|
35337
|
721
|
84
|
2026-04-16T09:48:40.719924+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776332920719_m2.jpg...
|
PhpStorm
|
faVsco.js – ~/jiminny/app/front-end/src/components faVsco.js – ~/jiminny/app/front-end/src/components/connect/connect.vue...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
4
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Http\Controllers;
use Illuminate\Http\JsonResponse;
use Jiminny\Component\FeatureFlags\FeatureRepository;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Events\EventDispatcher;
use Jiminny\Events\Users\SocialAccountConnected;
use Jiminny\Integrations\RouteProviderList;
use Jiminny\Models\SocialAccount;
use Jiminny\Repositories\SocialAccountRepository;
use Jiminny\Services\Crm\IntegrationApp\Api\TokenBuilder;
use Psr\Log\LoggerInterface;
/**
* Provision important Team Setup option, that are in essence configurable.
*/
class TeamSetupController extends Controller
{
public function __construct(
private readonly EventDispatcher $eventDispatcher,
private readonly TokenBuilder $tokenBuilder,
private readonly SocialAccountRepository $socialAccountRepository,
private readonly LoggerInterface $logger,
private readonly FeatureRepository $featureRepository,
) {
parent::__construct();
}
public function features(): JsonResponse
{
$availableFeatures = $this->featureRepository->getFeatures();
$availableFeaturesSerialised = [];
foreach ($availableFeatures as $feature) {
// getSlug() returns null for unknown enum values during deployment race condition
$slug = $feature->getSlug();
if ($slug === null) {
continue;
}
$availableFeaturesSerialised[] = [
'id' => $slug->name,
'label' => $feature->getTitle(),
'description' => $feature->getDescription(),
'type' => $feature->getType()->name,
'tier_id' => $feature->getTier() ? $feature->getTier()->getUuid() : null,
];
}
return response()->json($availableFeaturesSerialised);
}
public function tiers(): JsonResponse
{
$tiers = $this->featureRepository->getTiersOrderedByWeight();
return response()->json(
array_map(static function ($tier) { return ['id' => $tier->getUuid(), 'title' => $tier->getTitle()]; }, $tiers)
);
}
/**
* Get all enabled / available CRM providers
*/
public function crmServices(): JsonResponse
{
return response()->json(
Providers::getAllEnabledCrmProviders()
);
}
public function calendars(): JsonResponse
{
return response()->json([
['id' => 'office', 'label' => 'Office'],
['id' => 'google', 'label' => 'Google'],
]);
}
public function connectProviders(): JsonResponse
{
$user = $this->getUser();
$team = $user->getTeam();
$providerSlug = $team->getCrmConfiguration()->getProviderName();
$providers = RouteProviderList::getFrontendDefinitionsForConnectProviders();
if (Providers::isSalesforceTestableViaIntegrationApp($providerSlug)) {
$providers[$providerSlug]['viaIntegrationApp'] = false;
}
return response()->json(array_values($providers));
}
/**
* Prepare a token for integration app
*/
public function integrationAppToken(): JsonResponse
{
$user = $this->getUser();
$team = $user->getTeam();
$realProviderKey = Providers::getCrmIntegrationSlug($team->getCrmConfiguration());
/** If the provider is not via Integration APP, do nothing */
if (! Providers::isIntegrationAppProvider($realProviderKey)) {
return response()->json(['token' => '']);
}
/** No need to generate a token if the user des not require CRM */
if (! $user->isCrmRequired()) {
return response()->json(['token' => '']);
}
/** We keep all IntegrationApp providers as "integration-app" in the SocialAccount */
$crmProviderKey = Providers::getTranslatedCrmProviderKey($realProviderKey);
$socialAccount = $user->getSocialAccount($crmProviderKey);
/**
* We need a valid token to communicate with IntegrationApp.
*
* Either we need to create a new valid token and save it in a social account
*/
if ($socialAccount === null) {
$crmTokenCandidate = $this->tokenBuilder->create($team);
$socialAccount = $this->socialAccountRepository->create($user, [
'provider' => $crmProviderKey,
'provider_user_id' => $team->getUuid(),
'provider_user_token' => $crmTokenCandidate,
'expires' => $this->tokenBuilder->getExpireTime(),
'state' => SocialAccount::STATE_FULL_REFRESH_REQUIRED,
]);
$this->logger->info('[IntegrationApp] Connect step - New social account created with new token.', [
'team_id' => $team->getId(),
'provider' => $crmProviderKey,
'provider_user_id' => $team->getUuid(),
'state' => SocialAccount::STATE_FULL_REFRESH_REQUIRED,
]);
}
/**
* Or if a social account exists, but the token has expired, we need to regenerate it
* and update the social account
*/
if ($socialAccount->isExpired()) {
$crmTokenCandidate = $this->tokenBuilder->create($team);
$socialAccount = $this->socialAccountRepository->update($socialAccount, [
'provider_user_token' => $crmTokenCandidate,
'expires' => $this->tokenBuilder->getExpireTime(),
]);
$this->logger->info('[IntegrationApp] Connect step - Social account updated with new token.', [
'team_id' => $team->getId(),
'provider' => $crmProviderKey,
'provider_user_id' => $team->getUuid(),
'state' => SocialAccount::STATE_FULL_REFRESH_REQUIRED,
]);
}
return response()->json([
'token' => $socialAccount->getProviderUserToken(),
]);
}
public function integrationAppConnect(): JsonResponse
{
$user = $this->getUser();
$team = $user->getTeam();
$realProviderKey = Providers::getCrmIntegrationSlug($team->getCrmConfiguration());
/** If the provider is not via Integration APP, do nothing */
if (! Providers::isIntegrationAppProvider($realProviderKey)) {
$this->logger->error('[IntegrationApp] Unexpected provider for connection.', [
'team_id' => $team->getId(),
'provider' => $realProviderKey,
]);
return response()
->json([
'success' => false,
'message' => 'Action is not supported by the current CRM Provider',
])
->setStatusCode(JsonResponse::HTTP_BAD_REQUEST);
}
/** We keep all IntegrationApp providers as "integration-app" in the SocialAccount */
$crmProviderKey = Providers::getTranslatedCrmProviderKey($realProviderKey);
/** @var ?SocialAccount $socialAccount */
$socialAccount = $user->getSocialAccount($crmProviderKey);
if ($socialAccount === null) {
$this->logger->error('[IntegrationApp] Unexpected error. Social account is missing.', [
'team_id' => $team->getId(),
'iapp_provider' => $realProviderKey,
'provider' => $crmProviderKey,
]);
return response()
->json([
'success' => false,
'message' => 'Something went wrong. Social account is cannot be found.',
])
->setStatusCode(JsonResponse::HTTP_FAILED_DEPENDENCY);
}
$socialAccount->setAttribute('state', SocialAccount::STATE_CONNECTED);
$socialAccount->save();
$this->logger->info('[IntegrationApp] Social account is connected.', [
'team_id' => $team->getId(),
'iapp_provider' => $realProviderKey,
'provider' => $crmProviderKey,
'state' => SocialAccount::STATE_CONNECTED,
]);
$this->eventDispatcher->dispatch(new SocialAccountConnected($socialAccount));
return response()
->json([
'success' => true,
'message' => sprintf(
'%s is successfully connected',
Providers::getIntegrationAppProviderLabel($realProviderKey)
),
])
->setStatusCode(JsonResponse::HTTP_ACCEPTED);
}
}...
|
[{"role":"AXButton","text" [{"role":"AXButton","text":"Project: faVsco.js, menu","depth":5,"bounds":{"left":0.03046875,"top":0.017361112,"width":0.0453125,"height":0.022222223},"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"#11894 on JY-18909-automated-reports-ask-jiminny, menu","depth":5,"bounds":{"left":0.07578125,"top":0.017361112,"width":0.14960937,"height":0.022222223},"help_text":"Pull request #11894 exists for current branch JY-18909-automated-reports-ask-jiminny, but local branch is out of sync with remote","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Start Listening for PHP Debug Connections","depth":5,"bounds":{"left":0.78515625,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AutomatedReportsCommandTest","depth":6,"bounds":{"left":0.803125,"top":0.017361112,"width":0.09765625,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AutomatedReportsCommandTest'","depth":6,"bounds":{"left":0.9007813,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AutomatedReportsCommandTest'","depth":6,"bounds":{"left":0.9140625,"top":0.017361112,"width":0.01328125,"height":0.022222223},"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.9273437,"top":0.017361112,"width":0.01328125,"height":0.022222223},"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.96015626,"top":0.017361112,"width":0.01328125,"height":0.022222223},"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.9734375,"top":0.017361112,"width":0.01328125,"height":0.022222223},"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.9867188,"top":0.017361112,"width":0.013281226,"height":0.022222223},"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.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.049609374,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"4","depth":4,"bounds":{"left":0.403125,"top":0.19513889,"width":0.009375,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.41484374,"top":0.19513889,"width":0.009375,"height":0.013194445},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.42617187,"top":0.19375,"width":0.00859375,"height":0.015972223},"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.43476564,"top":0.19375,"width":0.008203125,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Http\\Controllers;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Jiminny\\Component\\FeatureFlags\\FeatureRepository;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Events\\EventDispatcher;\nuse Jiminny\\Events\\Users\\SocialAccountConnected;\nuse Jiminny\\Integrations\\RouteProviderList;\nuse Jiminny\\Models\\SocialAccount;\nuse Jiminny\\Repositories\\SocialAccountRepository;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\TokenBuilder;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * Provision important Team Setup option, that are in essence configurable.\n */\nclass TeamSetupController extends Controller\n{\n public function __construct(\n private readonly EventDispatcher $eventDispatcher,\n private readonly TokenBuilder $tokenBuilder,\n private readonly SocialAccountRepository $socialAccountRepository,\n private readonly LoggerInterface $logger,\n private readonly FeatureRepository $featureRepository,\n ) {\n parent::__construct();\n }\n public function features(): JsonResponse\n {\n $availableFeatures = $this->featureRepository->getFeatures();\n $availableFeaturesSerialised = [];\n foreach ($availableFeatures as $feature) {\n // getSlug() returns null for unknown enum values during deployment race condition\n $slug = $feature->getSlug();\n if ($slug === null) {\n continue;\n }\n $availableFeaturesSerialised[] = [\n 'id' => $slug->name,\n 'label' => $feature->getTitle(),\n 'description' => $feature->getDescription(),\n 'type' => $feature->getType()->name,\n 'tier_id' => $feature->getTier() ? $feature->getTier()->getUuid() : null,\n ];\n }\n\n return response()->json($availableFeaturesSerialised);\n }\n\n public function tiers(): JsonResponse\n {\n $tiers = $this->featureRepository->getTiersOrderedByWeight();\n\n return response()->json(\n array_map(static function ($tier) { return ['id' => $tier->getUuid(), 'title' => $tier->getTitle()]; }, $tiers)\n );\n }\n\n /**\n * Get all enabled / available CRM providers\n */\n public function crmServices(): JsonResponse\n {\n return response()->json(\n Providers::getAllEnabledCrmProviders()\n );\n }\n\n public function calendars(): JsonResponse\n {\n return response()->json([\n ['id' => 'office', 'label' => 'Office'],\n ['id' => 'google', 'label' => 'Google'],\n ]);\n }\n\n public function connectProviders(): JsonResponse\n {\n $user = $this->getUser();\n $team = $user->getTeam();\n\n $providerSlug = $team->getCrmConfiguration()->getProviderName();\n\n $providers = RouteProviderList::getFrontendDefinitionsForConnectProviders();\n if (Providers::isSalesforceTestableViaIntegrationApp($providerSlug)) {\n $providers[$providerSlug]['viaIntegrationApp'] = false;\n }\n\n return response()->json(array_values($providers));\n }\n\n /**\n * Prepare a token for integration app\n */\n public function integrationAppToken(): JsonResponse\n {\n $user = $this->getUser();\n $team = $user->getTeam();\n\n $realProviderKey = Providers::getCrmIntegrationSlug($team->getCrmConfiguration());\n /** If the provider is not via Integration APP, do nothing */\n if (! Providers::isIntegrationAppProvider($realProviderKey)) {\n return response()->json(['token' => '']);\n }\n\n /** No need to generate a token if the user des not require CRM */\n if (! $user->isCrmRequired()) {\n return response()->json(['token' => '']);\n }\n\n /** We keep all IntegrationApp providers as \"integration-app\" in the SocialAccount */\n $crmProviderKey = Providers::getTranslatedCrmProviderKey($realProviderKey);\n\n $socialAccount = $user->getSocialAccount($crmProviderKey);\n\n /**\n * We need a valid token to communicate with IntegrationApp.\n *\n * Either we need to create a new valid token and save it in a social account\n */\n if ($socialAccount === null) {\n $crmTokenCandidate = $this->tokenBuilder->create($team);\n $socialAccount = $this->socialAccountRepository->create($user, [\n 'provider' => $crmProviderKey,\n 'provider_user_id' => $team->getUuid(),\n 'provider_user_token' => $crmTokenCandidate,\n 'expires' => $this->tokenBuilder->getExpireTime(),\n 'state' => SocialAccount::STATE_FULL_REFRESH_REQUIRED,\n ]);\n\n $this->logger->info('[IntegrationApp] Connect step - New social account created with new token.', [\n 'team_id' => $team->getId(),\n 'provider' => $crmProviderKey,\n 'provider_user_id' => $team->getUuid(),\n 'state' => SocialAccount::STATE_FULL_REFRESH_REQUIRED,\n ]);\n }\n\n /**\n * Or if a social account exists, but the token has expired, we need to regenerate it\n * and update the social account\n */\n if ($socialAccount->isExpired()) {\n $crmTokenCandidate = $this->tokenBuilder->create($team);\n $socialAccount = $this->socialAccountRepository->update($socialAccount, [\n 'provider_user_token' => $crmTokenCandidate,\n 'expires' => $this->tokenBuilder->getExpireTime(),\n ]);\n\n $this->logger->info('[IntegrationApp] Connect step - Social account updated with new token.', [\n 'team_id' => $team->getId(),\n 'provider' => $crmProviderKey,\n 'provider_user_id' => $team->getUuid(),\n 'state' => SocialAccount::STATE_FULL_REFRESH_REQUIRED,\n ]);\n }\n\n return response()->json([\n 'token' => $socialAccount->getProviderUserToken(),\n ]);\n }\n\n public function integrationAppConnect(): JsonResponse\n {\n $user = $this->getUser();\n $team = $user->getTeam();\n\n $realProviderKey = Providers::getCrmIntegrationSlug($team->getCrmConfiguration());\n /** If the provider is not via Integration APP, do nothing */\n if (! Providers::isIntegrationAppProvider($realProviderKey)) {\n $this->logger->error('[IntegrationApp] Unexpected provider for connection.', [\n 'team_id' => $team->getId(),\n 'provider' => $realProviderKey,\n ]);\n\n return response()\n ->json([\n 'success' => false,\n 'message' => 'Action is not supported by the current CRM Provider',\n ])\n ->setStatusCode(JsonResponse::HTTP_BAD_REQUEST);\n }\n\n /** We keep all IntegrationApp providers as \"integration-app\" in the SocialAccount */\n $crmProviderKey = Providers::getTranslatedCrmProviderKey($realProviderKey);\n\n /** @var ?SocialAccount $socialAccount */\n $socialAccount = $user->getSocialAccount($crmProviderKey);\n if ($socialAccount === null) {\n $this->logger->error('[IntegrationApp] Unexpected error. Social account is missing.', [\n 'team_id' => $team->getId(),\n 'iapp_provider' => $realProviderKey,\n 'provider' => $crmProviderKey,\n ]);\n\n return response()\n ->json([\n 'success' => false,\n 'message' => 'Something went wrong. Social account is cannot be found.',\n ])\n ->setStatusCode(JsonResponse::HTTP_FAILED_DEPENDENCY);\n }\n\n $socialAccount->setAttribute('state', SocialAccount::STATE_CONNECTED);\n $socialAccount->save();\n\n $this->logger->info('[IntegrationApp] Social account is connected.', [\n 'team_id' => $team->getId(),\n 'iapp_provider' => $realProviderKey,\n 'provider' => $crmProviderKey,\n 'state' => SocialAccount::STATE_CONNECTED,\n ]);\n\n $this->eventDispatcher->dispatch(new SocialAccountConnected($socialAccount));\n\n return response()\n ->json([\n 'success' => true,\n 'message' => sprintf(\n '%s is successfully connected',\n Providers::getIntegrationAppProviderLabel($realProviderKey)\n ),\n ])\n ->setStatusCode(JsonResponse::HTTP_ACCEPTED);\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Http\\Controllers;\n\nuse Illuminate\\Http\\JsonResponse;\nuse Jiminny\\Component\\FeatureFlags\\FeatureRepository;\nuse Jiminny\\Contracts\\Crm\\Providers;\nuse Jiminny\\Events\\EventDispatcher;\nuse Jiminny\\Events\\Users\\SocialAccountConnected;\nuse Jiminny\\Integrations\\RouteProviderList;\nuse Jiminny\\Models\\SocialAccount;\nuse Jiminny\\Repositories\\SocialAccountRepository;\nuse Jiminny\\Services\\Crm\\IntegrationApp\\Api\\TokenBuilder;\nuse Psr\\Log\\LoggerInterface;\n\n/**\n * Provision important Team Setup option, that are in essence configurable.\n */\nclass TeamSetupController extends Controller\n{\n public function __construct(\n private readonly EventDispatcher $eventDispatcher,\n private readonly TokenBuilder $tokenBuilder,\n private readonly SocialAccountRepository $socialAccountRepository,\n private readonly LoggerInterface $logger,\n private readonly FeatureRepository $featureRepository,\n ) {\n parent::__construct();\n }\n public function features(): JsonResponse\n {\n $availableFeatures = $this->featureRepository->getFeatures();\n $availableFeaturesSerialised = [];\n foreach ($availableFeatures as $feature) {\n // getSlug() returns null for unknown enum values during deployment race condition\n $slug = $feature->getSlug();\n if ($slug === null) {\n continue;\n }\n $availableFeaturesSerialised[] = [\n 'id' => $slug->name,\n 'label' => $feature->getTitle(),\n 'description' => $feature->getDescription(),\n 'type' => $feature->getType()->name,\n 'tier_id' => $feature->getTier() ? $feature->getTier()->getUuid() : null,\n ];\n }\n\n return response()->json($availableFeaturesSerialised);\n }\n\n public function tiers(): JsonResponse\n {\n $tiers = $this->featureRepository->getTiersOrderedByWeight();\n\n return response()->json(\n array_map(static function ($tier) { return ['id' => $tier->getUuid(), 'title' => $tier->getTitle()]; }, $tiers)\n );\n }\n\n /**\n * Get all enabled / available CRM providers\n */\n public function crmServices(): JsonResponse\n {\n return response()->json(\n Providers::getAllEnabledCrmProviders()\n );\n }\n\n public function calendars(): JsonResponse\n {\n return response()->json([\n ['id' => 'office', 'label' => 'Office'],\n ['id' => 'google', 'label' => 'Google'],\n ]);\n }\n\n public function connectProviders(): JsonResponse\n {\n $user = $this->getUser();\n $team = $user->getTeam();\n\n $providerSlug = $team->getCrmConfiguration()->getProviderName();\n\n $providers = RouteProviderList::getFrontendDefinitionsForConnectProviders();\n if (Providers::isSalesforceTestableViaIntegrationApp($providerSlug)) {\n $providers[$providerSlug]['viaIntegrationApp'] = false;\n }\n\n return response()->json(array_values($providers));\n }\n\n /**\n * Prepare a token for integration app\n */\n public function integrationAppToken(): JsonResponse\n {\n $user = $this->getUser();\n $team = $user->getTeam();\n\n $realProviderKey = Providers::getCrmIntegrationSlug($team->getCrmConfiguration());\n /** If the provider is not via Integration APP, do nothing */\n if (! Providers::isIntegrationAppProvider($realProviderKey)) {\n return response()->json(['token' => '']);\n }\n\n /** No need to generate a token if the user des not require CRM */\n if (! $user->isCrmRequired()) {\n return response()->json(['token' => '']);\n }\n\n /** We keep all IntegrationApp providers as \"integration-app\" in the SocialAccount */\n $crmProviderKey = Providers::getTranslatedCrmProviderKey($realProviderKey);\n\n $socialAccount = $user->getSocialAccount($crmProviderKey);\n\n /**\n * We need a valid token to communicate with IntegrationApp.\n *\n * Either we need to create a new valid token and save it in a social account\n */\n if ($socialAccount === null) {\n $crmTokenCandidate = $this->tokenBuilder->create($team);\n $socialAccount = $this->socialAccountRepository->create($user, [\n 'provider' => $crmProviderKey,\n 'provider_user_id' => $team->getUuid(),\n 'provider_user_token' => $crmTokenCandidate,\n 'expires' => $this->tokenBuilder->getExpireTime(),\n 'state' => SocialAccount::STATE_FULL_REFRESH_REQUIRED,\n ]);\n\n $this->logger->info('[IntegrationApp] Connect step - New social account created with new token.', [\n 'team_id' => $team->getId(),\n 'provider' => $crmProviderKey,\n 'provider_user_id' => $team->getUuid(),\n 'state' => SocialAccount::STATE_FULL_REFRESH_REQUIRED,\n ]);\n }\n\n /**\n * Or if a social account exists, but the token has expired, we need to regenerate it\n * and update the social account\n */\n if ($socialAccount->isExpired()) {\n $crmTokenCandidate = $this->tokenBuilder->create($team);\n $socialAccount = $this->socialAccountRepository->update($socialAccount, [\n 'provider_user_token' => $crmTokenCandidate,\n 'expires' => $this->tokenBuilder->getExpireTime(),\n ]);\n\n $this->logger->info('[IntegrationApp] Connect step - Social account updated with new token.', [\n 'team_id' => $team->getId(),\n 'provider' => $crmProviderKey,\n 'provider_user_id' => $team->getUuid(),\n 'state' => SocialAccount::STATE_FULL_REFRESH_REQUIRED,\n ]);\n }\n\n return response()->json([\n 'token' => $socialAccount->getProviderUserToken(),\n ]);\n }\n\n public function integrationAppConnect(): JsonResponse\n {\n $user = $this->getUser();\n $team = $user->getTeam();\n\n $realProviderKey = Providers::getCrmIntegrationSlug($team->getCrmConfiguration());\n /** If the provider is not via Integration APP, do nothing */\n if (! Providers::isIntegrationAppProvider($realProviderKey)) {\n $this->logger->error('[IntegrationApp] Unexpected provider for connection.', [\n 'team_id' => $team->getId(),\n 'provider' => $realProviderKey,\n ]);\n\n return response()\n ->json([\n 'success' => false,\n 'message' => 'Action is not supported by the current CRM Provider',\n ])\n ->setStatusCode(JsonResponse::HTTP_BAD_REQUEST);\n }\n\n /** We keep all IntegrationApp providers as \"integration-app\" in the SocialAccount */\n $crmProviderKey = Providers::getTranslatedCrmProviderKey($realProviderKey);\n\n /** @var ?SocialAccount $socialAccount */\n $socialAccount = $user->getSocialAccount($crmProviderKey);\n if ($socialAccount === null) {\n $this->logger->error('[IntegrationApp] Unexpected error. Social account is missing.', [\n 'team_id' => $team->getId(),\n 'iapp_provider' => $realProviderKey,\n 'provider' => $crmProviderKey,\n ]);\n\n return response()\n ->json([\n 'success' => false,\n 'message' => 'Something went wrong. Social account is cannot be found.',\n ])\n ->setStatusCode(JsonResponse::HTTP_FAILED_DEPENDENCY);\n }\n\n $socialAccount->setAttribute('state', SocialAccount::STATE_CONNECTED);\n $socialAccount->save();\n\n $this->logger->info('[IntegrationApp] Social account is connected.', [\n 'team_id' => $team->getId(),\n 'iapp_provider' => $realProviderKey,\n 'provider' => $crmProviderKey,\n 'state' => SocialAccount::STATE_CONNECTED,\n ]);\n\n $this->eventDispatcher->dispatch(new SocialAccountConnected($socialAccount));\n\n return response()\n ->json([\n 'success' => true,\n 'message' => sprintf(\n '%s is successfully connected',\n Providers::getIntegrationAppProviderLabel($realProviderKey)\n ),\n ])\n ->setStatusCode(JsonResponse::HTTP_ACCEPTED);\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
-5533032456689895920
|
-4108250601105965134
|
visual_change
|
accessibility
|
NULL
|
Project: faVsco.js, menu
#11894 on JY-18909-automa Project: faVsco.js, menu
#11894 on JY-18909-automated-reports-ask-jiminny, menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Sync Changes
Hide This Notification
Code changed:
Hide
4
2
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Http\Controllers;
use Illuminate\Http\JsonResponse;
use Jiminny\Component\FeatureFlags\FeatureRepository;
use Jiminny\Contracts\Crm\Providers;
use Jiminny\Events\EventDispatcher;
use Jiminny\Events\Users\SocialAccountConnected;
use Jiminny\Integrations\RouteProviderList;
use Jiminny\Models\SocialAccount;
use Jiminny\Repositories\SocialAccountRepository;
use Jiminny\Services\Crm\IntegrationApp\Api\TokenBuilder;
use Psr\Log\LoggerInterface;
/**
* Provision important Team Setup option, that are in essence configurable.
*/
class TeamSetupController extends Controller
{
public function __construct(
private readonly EventDispatcher $eventDispatcher,
private readonly TokenBuilder $tokenBuilder,
private readonly SocialAccountRepository $socialAccountRepository,
private readonly LoggerInterface $logger,
private readonly FeatureRepository $featureRepository,
) {
parent::__construct();
}
public function features(): JsonResponse
{
$availableFeatures = $this->featureRepository->getFeatures();
$availableFeaturesSerialised = [];
foreach ($availableFeatures as $feature) {
// getSlug() returns null for unknown enum values during deployment race condition
$slug = $feature->getSlug();
if ($slug === null) {
continue;
}
$availableFeaturesSerialised[] = [
'id' => $slug->name,
'label' => $feature->getTitle(),
'description' => $feature->getDescription(),
'type' => $feature->getType()->name,
'tier_id' => $feature->getTier() ? $feature->getTier()->getUuid() : null,
];
}
return response()->json($availableFeaturesSerialised);
}
public function tiers(): JsonResponse
{
$tiers = $this->featureRepository->getTiersOrderedByWeight();
return response()->json(
array_map(static function ($tier) { return ['id' => $tier->getUuid(), 'title' => $tier->getTitle()]; }, $tiers)
);
}
/**
* Get all enabled / available CRM providers
*/
public function crmServices(): JsonResponse
{
return response()->json(
Providers::getAllEnabledCrmProviders()
);
}
public function calendars(): JsonResponse
{
return response()->json([
['id' => 'office', 'label' => 'Office'],
['id' => 'google', 'label' => 'Google'],
]);
}
public function connectProviders(): JsonResponse
{
$user = $this->getUser();
$team = $user->getTeam();
$providerSlug = $team->getCrmConfiguration()->getProviderName();
$providers = RouteProviderList::getFrontendDefinitionsForConnectProviders();
if (Providers::isSalesforceTestableViaIntegrationApp($providerSlug)) {
$providers[$providerSlug]['viaIntegrationApp'] = false;
}
return response()->json(array_values($providers));
}
/**
* Prepare a token for integration app
*/
public function integrationAppToken(): JsonResponse
{
$user = $this->getUser();
$team = $user->getTeam();
$realProviderKey = Providers::getCrmIntegrationSlug($team->getCrmConfiguration());
/** If the provider is not via Integration APP, do nothing */
if (! Providers::isIntegrationAppProvider($realProviderKey)) {
return response()->json(['token' => '']);
}
/** No need to generate a token if the user des not require CRM */
if (! $user->isCrmRequired()) {
return response()->json(['token' => '']);
}
/** We keep all IntegrationApp providers as "integration-app" in the SocialAccount */
$crmProviderKey = Providers::getTranslatedCrmProviderKey($realProviderKey);
$socialAccount = $user->getSocialAccount($crmProviderKey);
/**
* We need a valid token to communicate with IntegrationApp.
*
* Either we need to create a new valid token and save it in a social account
*/
if ($socialAccount === null) {
$crmTokenCandidate = $this->tokenBuilder->create($team);
$socialAccount = $this->socialAccountRepository->create($user, [
'provider' => $crmProviderKey,
'provider_user_id' => $team->getUuid(),
'provider_user_token' => $crmTokenCandidate,
'expires' => $this->tokenBuilder->getExpireTime(),
'state' => SocialAccount::STATE_FULL_REFRESH_REQUIRED,
]);
$this->logger->info('[IntegrationApp] Connect step - New social account created with new token.', [
'team_id' => $team->getId(),
'provider' => $crmProviderKey,
'provider_user_id' => $team->getUuid(),
'state' => SocialAccount::STATE_FULL_REFRESH_REQUIRED,
]);
}
/**
* Or if a social account exists, but the token has expired, we need to regenerate it
* and update the social account
*/
if ($socialAccount->isExpired()) {
$crmTokenCandidate = $this->tokenBuilder->create($team);
$socialAccount = $this->socialAccountRepository->update($socialAccount, [
'provider_user_token' => $crmTokenCandidate,
'expires' => $this->tokenBuilder->getExpireTime(),
]);
$this->logger->info('[IntegrationApp] Connect step - Social account updated with new token.', [
'team_id' => $team->getId(),
'provider' => $crmProviderKey,
'provider_user_id' => $team->getUuid(),
'state' => SocialAccount::STATE_FULL_REFRESH_REQUIRED,
]);
}
return response()->json([
'token' => $socialAccount->getProviderUserToken(),
]);
}
public function integrationAppConnect(): JsonResponse
{
$user = $this->getUser();
$team = $user->getTeam();
$realProviderKey = Providers::getCrmIntegrationSlug($team->getCrmConfiguration());
/** If the provider is not via Integration APP, do nothing */
if (! Providers::isIntegrationAppProvider($realProviderKey)) {
$this->logger->error('[IntegrationApp] Unexpected provider for connection.', [
'team_id' => $team->getId(),
'provider' => $realProviderKey,
]);
return response()
->json([
'success' => false,
'message' => 'Action is not supported by the current CRM Provider',
])
->setStatusCode(JsonResponse::HTTP_BAD_REQUEST);
}
/** We keep all IntegrationApp providers as "integration-app" in the SocialAccount */
$crmProviderKey = Providers::getTranslatedCrmProviderKey($realProviderKey);
/** @var ?SocialAccount $socialAccount */
$socialAccount = $user->getSocialAccount($crmProviderKey);
if ($socialAccount === null) {
$this->logger->error('[IntegrationApp] Unexpected error. Social account is missing.', [
'team_id' => $team->getId(),
'iapp_provider' => $realProviderKey,
'provider' => $crmProviderKey,
]);
return response()
->json([
'success' => false,
'message' => 'Something went wrong. Social account is cannot be found.',
])
->setStatusCode(JsonResponse::HTTP_FAILED_DEPENDENCY);
}
$socialAccount->setAttribute('state', SocialAccount::STATE_CONNECTED);
$socialAccount->save();
$this->logger->info('[IntegrationApp] Social account is connected.', [
'team_id' => $team->getId(),
'iapp_provider' => $realProviderKey,
'provider' => $crmProviderKey,
'state' => SocialAccount::STATE_CONNECTED,
]);
$this->eventDispatcher->dispatch(new SocialAccountConnected($socialAccount));
return response()
->json([
'success' => true,
'message' => sprintf(
'%s is successfully connected',
Providers::getIntegrationAppProviderLabel($realProviderKey)
),
])
->setStatusCode(JsonResponse::HTTP_ACCEPTED);
}
}...
|
35336
|
|
35963
|
731
|
84
|
2026-04-16T10:15:39.520157+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776334539520_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
SlackFileEditViewJiminny ...DMs= Unreads@ Threads6 SlackFileEditViewJiminny ...DMs= Unreads@ Threads6 Huddles* Drafts & sent8 DirectoriesAchivityEh External connectionsFiles# Starred8 jiminny-x-integrati...A platform-inner-teamMore# Channelsi# ai-chapter# alerts# backends contlicion-clinia# curiosity lab# engineering# frontendi# general# infra-changes# jiminny-bg# platrorm-uckets# product_launchesac random# releases# sofia-office# supportac thank-vous# the people of iimi....0 Direct messages€. Vasil Vasilev®. Galya DimitrovaC. Nikolay Ivanov®. Aneliya Angelova(3 Aneliya Angelova, ...Stoyan Tanev 2e VesR. Steliyan Georgiev3 Adelina Petrova, Ili...(0. Adelina Petrova D**:AppsToastJira CloudHistoryWindowHelpQ Search Jiminny Inc& jiminn... & 18• MessagesMore~January Z3ro.2029January 27th, 2025~Lukas Kovalik 1:44 PMWe have a few questions we'dlike to discuss. We're hoping youcan share some ideas on how toeffectively use the integrationapp. While our main focus at themoment is on Zoho CRM, we'relooking for approaches that canbe applied to any CRM we mightIntegrare in the tutureV18 7, 36 replies Lastr...January 28th. 2025 vINiKoay Malnoy ysAMHey Vlad, can u give abreakdown of the Credit APIrequests we've made from thewhole account to Zoho?Đ 2 2 replies Last reply i...Nikolay Ivanov 10:56 AMAnother two:1. SETUP_FAILED failedoccurred on 2025-01-2210:44:262. Sometimes connectionstimes out - this occurredtwo times on Thursday lastVlad 11:07 AMreplied to a thread: Hey Viad, ...Hey @Nikolay Ivanov! Asdiscussed vesterdav we don'tnave dreakaown or now manycrealts was spene on everyrequest. But we do haveexternal APl logs of all requestshere:[URL_WITH_CREDENTIALS] - could you check plz?091fºQ ) Bohdan Jun 3rd, 2025 at 4:42 PM© Hi, @Lukas Kovalik!From the code and from the ref docs I see that it must return a promiseEven if something was wrong internally it's still an async functionDo you have an example of how you are using it?Lukas Kovalik Jun 3rd, 2025 at 4:44 PMwhen we try to login we go through the process, log in via google,CleanShot 2025-06-03 at [EMAIL] •Linking your Zoho CRM accountfe productionAcceptingCleanShot 2025-06-03 at [EMAIL] -00JiminnyJiminny would like to access the followina informationiO) CRMget org dot• Full access to ZchocRM notiticationsTo oet the pioeline alona with associated stages• To read, create, update and delete global picklist...
|
NULL
|
60990489924016082
|
NULL
|
visual_change
|
ocr
|
NULL
|
SlackFileEditViewJiminny ...DMs= Unreads@ Threads6 SlackFileEditViewJiminny ...DMs= Unreads@ Threads6 Huddles* Drafts & sent8 DirectoriesAchivityEh External connectionsFiles# Starred8 jiminny-x-integrati...A platform-inner-teamMore# Channelsi# ai-chapter# alerts# backends contlicion-clinia# curiosity lab# engineering# frontendi# general# infra-changes# jiminny-bg# platrorm-uckets# product_launchesac random# releases# sofia-office# supportac thank-vous# the people of iimi....0 Direct messages€. Vasil Vasilev®. Galya DimitrovaC. Nikolay Ivanov®. Aneliya Angelova(3 Aneliya Angelova, ...Stoyan Tanev 2e VesR. Steliyan Georgiev3 Adelina Petrova, Ili...(0. Adelina Petrova D**:AppsToastJira CloudHistoryWindowHelpQ Search Jiminny Inc& jiminn... & 18• MessagesMore~January Z3ro.2029January 27th, 2025~Lukas Kovalik 1:44 PMWe have a few questions we'dlike to discuss. We're hoping youcan share some ideas on how toeffectively use the integrationapp. While our main focus at themoment is on Zoho CRM, we'relooking for approaches that canbe applied to any CRM we mightIntegrare in the tutureV18 7, 36 replies Lastr...January 28th. 2025 vINiKoay Malnoy ysAMHey Vlad, can u give abreakdown of the Credit APIrequests we've made from thewhole account to Zoho?Đ 2 2 replies Last reply i...Nikolay Ivanov 10:56 AMAnother two:1. SETUP_FAILED failedoccurred on 2025-01-2210:44:262. Sometimes connectionstimes out - this occurredtwo times on Thursday lastVlad 11:07 AMreplied to a thread: Hey Viad, ...Hey @Nikolay Ivanov! Asdiscussed vesterdav we don'tnave dreakaown or now manycrealts was spene on everyrequest. But we do haveexternal APl logs of all requestshere:[URL_WITH_CREDENTIALS] - could you check plz?091fºQ ) Bohdan Jun 3rd, 2025 at 4:42 PM© Hi, @Lukas Kovalik!From the code and from the ref docs I see that it must return a promiseEven if something was wrong internally it's still an async functionDo you have an example of how you are using it?Lukas Kovalik Jun 3rd, 2025 at 4:44 PMwhen we try to login we go through the process, log in via google,CleanShot 2025-06-03 at [EMAIL] •Linking your Zoho CRM accountfe productionAcceptingCleanShot 2025-06-03 at [EMAIL] -00JiminnyJiminny would like to access the followina informationiO) CRMget org dot• Full access to ZchocRM notiticationsTo oet the pioeline alona with associated stages• To read, create, update and delete global picklist...
|
35961
|
|
37523
|
770
|
84
|
2026-04-16T12:30:00.978456+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776342600978_m2.jpg...
|
Firefox
|
SQLite Web: db.sqlite — Personal
|
1
|
http://100.73.206.126:8767/frames/query/
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEditiViewHistoryBookmarksToolsWindowHel FirefoxFileEditiViewHistoryBookmarksToolsWindowHelpoedren wiin voocie or chter douresa$0.100% C28• Thu 16 Apr 15:30:00- Import bookmarks.Sorint BoardlSRD QueueGithuh22°CNew York CityNew Tab+ New TabFirefoxSearch with Google or enter addressPlatform Sprint2Q2 -...JiminnyJiminnyJY-20543 addAJ reports...MInbox (1,565) -Pipelines -jiminny/appBambooHRJiminny...
|
NULL
|
-562116467558830192
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEditiViewHistoryBookmarksToolsWindowHel FirefoxFileEditiViewHistoryBookmarksToolsWindowHelpoedren wiin voocie or chter douresa$0.100% C28• Thu 16 Apr 15:30:00- Import bookmarks.Sorint BoardlSRD QueueGithuh22°CNew York CityNew Tab+ New TabFirefoxSearch with Google or enter addressPlatform Sprint2Q2 -...JiminnyJiminnyJY-20543 addAJ reports...MInbox (1,565) -Pipelines -jiminny/appBambooHRJiminny...
|
NULL
|
|
37550
|
768
|
84
|
2026-04-16T12:30:42.631221+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776342642631_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+FinderFileEditViewGoWindowHomeDMsActivityFilesLat +FinderFileEditViewGoWindowHomeDMsActivityFilesLater..•More+HelpSearch Jiminny IncJiminny ...= UnreadsThreadsHuddlesDrafts & sentDirectoriesExternal connections Starredjiminny-x-integrati...& platform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# releases8 22Messages@ Files• Bookmarks+GitHub APPToday ~12:17 MIM2 new commits pushed to master by Vasil-JiminnyOdd73dfa - Fix an autocomplete mistakethat swapped Event for EventListener.9e23b6da - Merge pull request #11977from jiminny/fix-opened-namespacejiminny/app Added by GitHubCircleCl APP12:46 PMDeployment Successful!Project: appWhen:04/16/202609:46:09Tag:View JobCircleCl APP 3:06 PMDeployment Successful!Project: appWhen:04/16/202612:06:33Tag:View JobMessage #releases+Aa...New(ahlActivity MonitorAll ProcessesProcess NameWindowServerscreenpipeFirefoxCP Isolated Web ContentFirefoxkernel_taskFirefox GPU HelperreplaydFirefoxCP Isolated Web Contentmds_storesClaudelaunchdbluetoothdSlack HelperlaunchservicesdKarabiner-Core-ServiceFindercoreaudiodWispr Flow Helper (Renderer)Wispr Flow Helper (Renderer)Activity MonitoriTerm2Wl Wispr Floworg.pqrs.Karabiner-DriverKit-VirtualHIDDev...Slack Helper (Renderer)Karabiner-VirtualHIDDevice-DaemonBTLEServerWispr Flow Helper (GPU)System:User:Idle:7,84%19,94%72,22%% CPU47,038,216,616,115,69,59,28,37,46,04,84,44,33,73,53,53,53,32,82,72,32,32,22,11,91,81,5CPU LOAD100% C78 • Thu 16 Apr 15:30:42CPUMemoryEnergyDiskNetworkCPU TimeThreads12:58:44,731:53:07,103,2013,0224:52:18,363,021:38:33,677,861:07:46,299:14,4434:23,0233:09,414:52,881:19:18,1446:59,3640:48,1451:00,095:27,345:32,291:18:22,901:50:57,254:50,6822:25,4738:38,3228:57,9917:44,102:36,13AлIЛA 7АIdle Wake-Ups215829745392927671314141212182210182517Threads:Processes:361937281261528511731118133182008640643 578573...
|
NULL
|
-502302046035469561
|
NULL
|
visual_change
|
ocr
|
NULL
|
+FinderFileEditViewGoWindowHomeDMsActivityFilesLat +FinderFileEditViewGoWindowHomeDMsActivityFilesLater..•More+HelpSearch Jiminny IncJiminny ...= UnreadsThreadsHuddlesDrafts & sentDirectoriesExternal connections Starredjiminny-x-integrati...& platform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# releases8 22Messages@ Files• Bookmarks+GitHub APPToday ~12:17 MIM2 new commits pushed to master by Vasil-JiminnyOdd73dfa - Fix an autocomplete mistakethat swapped Event for EventListener.9e23b6da - Merge pull request #11977from jiminny/fix-opened-namespacejiminny/app Added by GitHubCircleCl APP12:46 PMDeployment Successful!Project: appWhen:04/16/202609:46:09Tag:View JobCircleCl APP 3:06 PMDeployment Successful!Project: appWhen:04/16/202612:06:33Tag:View JobMessage #releases+Aa...New(ahlActivity MonitorAll ProcessesProcess NameWindowServerscreenpipeFirefoxCP Isolated Web ContentFirefoxkernel_taskFirefox GPU HelperreplaydFirefoxCP Isolated Web Contentmds_storesClaudelaunchdbluetoothdSlack HelperlaunchservicesdKarabiner-Core-ServiceFindercoreaudiodWispr Flow Helper (Renderer)Wispr Flow Helper (Renderer)Activity MonitoriTerm2Wl Wispr Floworg.pqrs.Karabiner-DriverKit-VirtualHIDDev...Slack Helper (Renderer)Karabiner-VirtualHIDDevice-DaemonBTLEServerWispr Flow Helper (GPU)System:User:Idle:7,84%19,94%72,22%% CPU47,038,216,616,115,69,59,28,37,46,04,84,44,33,73,53,53,53,32,82,72,32,32,22,11,91,81,5CPU LOAD100% C78 • Thu 16 Apr 15:30:42CPUMemoryEnergyDiskNetworkCPU TimeThreads12:58:44,731:53:07,103,2013,0224:52:18,363,021:38:33,677,861:07:46,299:14,4434:23,0233:09,414:52,881:19:18,1446:59,3640:48,1451:00,095:27,345:32,291:18:22,901:50:57,254:50,6822:25,4738:38,3228:57,9917:44,102:36,13AлIЛA 7АIdle Wake-Ups215829745392927671314141212182210182517Threads:Processes:361937281261528511731118133182008640643 578573...
|
NULL
|
|
37818
|
776
|
84
|
2026-04-16T12:54:14.178371+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776344054178_m2.jpg...
|
Boosteroid
|
Boosteroid
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
150811002008/15Dark AgeGame Paused (P)Click to sel 150811002008/15Dark AgeGame Paused (P)Click to select this building.kovaliklukas (Dravidians1 kovaliklukas: 239/2392 Zbigniew Olesnicki: 229/2294 Roger II of Sicily: 228/2288 Mundzuk the Hun: 222/2226 Emperor Karel IV: 219/2193 Anastasios I Dikoros: 217/2177 Themistocles: 209/2095 Manuel I: 208/208...
|
NULL
|
-3193182210369049408
|
NULL
|
visual_change
|
ocr
|
NULL
|
150811002008/15Dark AgeGame Paused (P)Click to sel 150811002008/15Dark AgeGame Paused (P)Click to select this building.kovaliklukas (Dravidians1 kovaliklukas: 239/2392 Zbigniew Olesnicki: 229/2294 Roger II of Sicily: 228/2288 Mundzuk the Hun: 222/2226 Emperor Karel IV: 219/2193 Anastasios I Dikoros: 217/2177 Themistocles: 209/2095 Manuel I: 208/208...
|
NULL
|
|
37865
|
774
|
84
|
2026-04-16T12:55:30.339126+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776344130339_m1.jpg...
|
Boosteroid
|
Boosteroid
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
ClaudeFileEditViewWindowHelpC$O l 0100% <47Thu ClaudeFileEditViewWindowHelpC$O l 0100% <47Thu 16 Apr 15:55:30-zshDOCKER881Last login: Thu Apr 16 15:48:11 on ttys009DEV (-zsh)882APP (-zsh)*3-zsh• $84-zsh85Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~S sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%" OR window_name LIKE "%Boostroid%"ORDER BY created_at DESC LIMIT 20;"Error: in prepare, no such column: created_atari%' OR window_name LIKE "%Boosteroid%' ORDER BY created_at DESC LIMIT 20;error here--^Lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostroid%'ORDER BYcreated_at DESC LIMIT 20;"Error: in prepare, no such column: created_atari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;error here ---^lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostroid%' ORDER BYcreated_at DESC LIMIT 20;"Error: in prepare, no such column: created_atari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;error here ---лlukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ U...
|
NULL
|
-411779090385566734
|
NULL
|
click
|
ocr
|
NULL
|
ClaudeFileEditViewWindowHelpC$O l 0100% <47Thu ClaudeFileEditViewWindowHelpC$O l 0100% <47Thu 16 Apr 15:55:30-zshDOCKER881Last login: Thu Apr 16 15:48:11 on ttys009DEV (-zsh)882APP (-zsh)*3-zsh• $84-zsh85Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~S sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%" OR window_name LIKE "%Boostroid%"ORDER BY created_at DESC LIMIT 20;"Error: in prepare, no such column: created_atari%' OR window_name LIKE "%Boosteroid%' ORDER BY created_at DESC LIMIT 20;error here--^Lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostroid%'ORDER BYcreated_at DESC LIMIT 20;"Error: in prepare, no such column: created_atari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;error here ---^lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostroid%' ORDER BYcreated_at DESC LIMIT 20;"Error: in prepare, no such column: created_atari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;error here ---лlukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ U...
|
NULL
|
|
38050
|
779
|
84
|
2026-04-16T13:00:03.442819+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776344403442_m2.jpg...
|
Boosteroid
|
Boosteroid
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
28532710020021/30Dark AgeRight-click to attack thi 28532710020021/30Dark AgeRight-click to attack this animal. Huntedanimals (except predators) yield food, butsome will fight back.6 Emperor Karel IV: 597/5975 Manuel I: 577/5774 Roger II of Sicily: 545/545Anastasios I Dikoros: 544/544Zbigniew Olesnicki: 524/5248 Mundzuk the Hun: 523/5231 kovaliklukas: 521/5217 Themistocles: 515/515...
|
NULL
|
5912523736645606679
|
NULL
|
visual_change
|
ocr
|
NULL
|
28532710020021/30Dark AgeRight-click to attack thi 28532710020021/30Dark AgeRight-click to attack this animal. Huntedanimals (except predators) yield food, butsome will fight back.6 Emperor Karel IV: 597/5975 Manuel I: 577/5774 Roger II of Sicily: 545/545Anastasios I Dikoros: 544/544Zbigniew Olesnicki: 524/5248 Mundzuk the Hun: 523/5231 kovaliklukas: 521/5217 Themistocles: 515/515...
|
38048
|
|
38090
|
778
|
84
|
2026-04-16T13:01:10.287655+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776344470287_m1.jpg...
|
Boosteroid
|
Boosteroid
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
ClaudeFileEditViewWindowHelpC$O l 0100% <47Thu ClaudeFileEditViewWindowHelpC$O l 0100% <47Thu 16 Apr 16:01:10-zshDOCKER881Last login: Thu Apr 16 15:48:11 on ttys009DEV (-zsh)882APP (-zsh)*3-zsh-zsh85Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~S sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%" OR window_name LIKE "%Boostroid%"ORDER BY created_at DESC LIMIT 20;"Error: in prepare, no such column: created_atari%' OR window_name LIKE "%Boosteroid%' ORDER BY created_at DESC LIMIT 20;error here--^Lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostroid%'ORDER BYcreated_at DESC LIMIT 20;"Error: in prepare, no such column: created_atari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;error here ---^lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostroid%' ORDER BYcreated_at DESC LIMIT 20;"Error: in prepare, no such column: created_atari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;error here ---лlukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ U...
|
NULL
|
8519566601729880496
|
NULL
|
click
|
ocr
|
NULL
|
ClaudeFileEditViewWindowHelpC$O l 0100% <47Thu ClaudeFileEditViewWindowHelpC$O l 0100% <47Thu 16 Apr 16:01:10-zshDOCKER881Last login: Thu Apr 16 15:48:11 on ttys009DEV (-zsh)882APP (-zsh)*3-zsh-zsh85Poetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~S sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%" OR window_name LIKE "%Boostroid%"ORDER BY created_at DESC LIMIT 20;"Error: in prepare, no such column: created_atari%' OR window_name LIKE "%Boosteroid%' ORDER BY created_at DESC LIMIT 20;error here--^Lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostroid%'ORDER BYcreated_at DESC LIMIT 20;"Error: in prepare, no such column: created_atari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;error here ---^lukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostroid%' ORDER BYcreated_at DESC LIMIT 20;"Error: in prepare, no such column: created_atari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;error here ---лlukas®Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ U...
|
38088
|
|
38247
|
782
|
84
|
2026-04-16T13:05:58.123385+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776344758123_m2.jpg...
|
Boosteroid
|
Boosteroid
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
246100302802425/30Castle AgeGame Paused (P)Click a 246100302802425/30Castle AgeGame Paused (P)Click a villager to gather wood from this tree.Lown Centerkovalikukas (Dravidians)4/6Researching 15%Castle Age124000/240002 Zbigniew Olesnicki: 1196/11965 Manuel I: 1164/11648 Mundzuk the Hun: 1138/11383 Anastasios I Dikoros: 1133/11337 Themistocles: 1093/10934 Roger II of Sicily: 1041/10416 Emperor Karel IV: 925/9251 kovaliklukas: 909/909...
|
NULL
|
5084213915292261096
|
NULL
|
click
|
ocr
|
NULL
|
246100302802425/30Castle AgeGame Paused (P)Click a 246100302802425/30Castle AgeGame Paused (P)Click a villager to gather wood from this tree.Lown Centerkovalikukas (Dravidians)4/6Researching 15%Castle Age124000/240002 Zbigniew Olesnicki: 1196/11965 Manuel I: 1164/11648 Mundzuk the Hun: 1138/11383 Anastasios I Dikoros: 1133/11337 Themistocles: 1093/10934 Roger II of Sicily: 1041/10416 Emperor Karel IV: 925/9251 kovaliklukas: 909/909...
|
38245
|
|
38425
|
785
|
84
|
2026-04-16T13:11:23.218856+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776345083218_m2.jpg...
|
Boosteroid
|
Boosteroid
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
41623715641227/30Castle Age--Villager Created-Righ 41623715641227/30Castle Age--Villager Created-Right-click to gather food from this Farm.Build Farms near a Town Center or Mill togather food faster.2 Zbigniew Olesnicki: 1820/1820II5 Manuel I: 1774/17743 Anastasios I Dikoros: 1758/1758II-III6 Emperor Karel IV: 1693/16938 Mundzuk the Hun: 1671/1671II7 Themistocles: 1605/16054 Roger II of Sicily: 1551/1551II1 kovaliklukas: 1524/1524TЬORLE ОНUNTREDBuilderkovaliklukas (Dravidians)...
|
NULL
|
-5841575488168009523
|
NULL
|
click
|
ocr
|
NULL
|
41623715641227/30Castle Age--Villager Created-Righ 41623715641227/30Castle Age--Villager Created-Right-click to gather food from this Farm.Build Farms near a Town Center or Mill togather food faster.2 Zbigniew Olesnicki: 1820/1820II5 Manuel I: 1774/17743 Anastasios I Dikoros: 1758/1758II-III6 Emperor Karel IV: 1693/16938 Mundzuk the Hun: 1671/1671II7 Themistocles: 1605/16054 Roger II of Sicily: 1551/1551II1 kovaliklukas: 1524/1524TЬORLE ОНUNTREDBuilderkovaliklukas (Dravidians)...
|
38423
|
|
38602
|
788
|
84
|
2026-04-16T13:16:23.672076+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776345383672_m2.jpg...
|
Boosteroid
|
Boosteroid
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
68450859315242/50Castle Age-House Built----Village 68450859315242/50Castle Age-House Built----Villager Created---Warning: You are being attacked byPlayer 4 Roger II of Sicily!!!--Click to select this building.Town Centerkovaliklukas (DravidianCreating 90%Villager124000124100Zbigniew Olesnicki: 2479/24793 Anastasios I Dikoros: 2466/24668 Mundzuk the Hun: 2408/24086 Emperor Karel IV: 2393/23934 Roger II of Sicily: 2369/23695 Manuel I: 2314/23147 Themistocles: 2225/22251 kovaliklukas: 2013/2013...
|
NULL
|
-2948992055490454864
|
NULL
|
click
|
ocr
|
NULL
|
68450859315242/50Castle Age-House Built----Village 68450859315242/50Castle Age-House Built----Villager Created---Warning: You are being attacked byPlayer 4 Roger II of Sicily!!!--Click to select this building.Town Centerkovaliklukas (DravidianCreating 90%Villager124000124100Zbigniew Olesnicki: 2479/24793 Anastasios I Dikoros: 2466/24668 Mundzuk the Hun: 2408/24086 Emperor Karel IV: 2393/23934 Roger II of Sicily: 2369/23695 Manuel I: 2314/23147 Themistocles: 2225/22251 kovaliklukas: 2013/2013...
|
NULL
|
|
38640
|
787
|
84
|
2026-04-16T13:17:15.701772+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776345435701_m1.jpg...
|
Boosteroid
|
Boosteroid
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackFileEditViewEDHomeDMsActivityFilesLater..•Mo +SlackFileEditViewEDHomeDMsActivityFilesLater..•More+Jiminny ...w Starred& jiminny-x-integrati...8platform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...• Direct messages0. Nikolay Nikolov. Stoyan TanevG. Vasil Vasilev. Galya DimitrovaNibolav lanovGoHistoryWindowHelp→CSearch Jiminny Inc& platform-inner-...& 10MessagesP Channel OverviewMore v+create PDF verToday ~ uest_id: 822fa41b-afd3-43a9-a248-ooDue36f3131: (2013, 'Lostconnection to MySQL server during query([Errno 104] Connection reset by peer)"):correlation_id:ae2e38ff-ed04-401e-b77c-1e02e9d788c6 trace_id:f0194348-cece-4ca8-8413-21e32eef1d4f[2026-04-13 01:09:56] app.ERROR: Failed tocreate PDF version for request_id: 822fa41b-afd3-43a9-a248-86b0e36f3131: (2013, 'Lostconnection to MySQL server during query([Errno 104] Connection reset by peer)"):correlation_id:ae2e38ff-ed04-401e-b77c-1e02e9d788c6 trace_id:f0194348-cece-4ca8-8413-21e32eef1d4fecs/jiminny-prophet/fbd19ab3fe8d4775bb936af467904a55някакво connectivity ишу с MySql изглеждаSteliyan Georgiev 12:53 PMно това е само 1 случай2 replies Last reply today at 1:02 PMNewSteliyan Georgiev 4:09 PMМоже ли едно малко ревю на един ПР,който вече го прецизирах с @claude ревюhttps://github.com/jiminny/prophet/pull/479Message & platform-inner-team+Aa@ .••*3>0 lbl-zshA100% <478**884Thu 16 Apr 16:17:15-zsh85window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostwindow_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE '%Boostwindow_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostwindow_name FROM ocr_text WHERE app_name LIKE "%Safari%" OR window_name LIKE '%Boostit DATETIME);...
|
NULL
|
7133316166471284245
|
NULL
|
click
|
ocr
|
NULL
|
+SlackFileEditViewEDHomeDMsActivityFilesLater..•Mo +SlackFileEditViewEDHomeDMsActivityFilesLater..•More+Jiminny ...w Starred& jiminny-x-integrati...8platform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...• Direct messages0. Nikolay Nikolov. Stoyan TanevG. Vasil Vasilev. Galya DimitrovaNibolav lanovGoHistoryWindowHelp→CSearch Jiminny Inc& platform-inner-...& 10MessagesP Channel OverviewMore v+create PDF verToday ~ uest_id: 822fa41b-afd3-43a9-a248-ooDue36f3131: (2013, 'Lostconnection to MySQL server during query([Errno 104] Connection reset by peer)"):correlation_id:ae2e38ff-ed04-401e-b77c-1e02e9d788c6 trace_id:f0194348-cece-4ca8-8413-21e32eef1d4f[2026-04-13 01:09:56] app.ERROR: Failed tocreate PDF version for request_id: 822fa41b-afd3-43a9-a248-86b0e36f3131: (2013, 'Lostconnection to MySQL server during query([Errno 104] Connection reset by peer)"):correlation_id:ae2e38ff-ed04-401e-b77c-1e02e9d788c6 trace_id:f0194348-cece-4ca8-8413-21e32eef1d4fecs/jiminny-prophet/fbd19ab3fe8d4775bb936af467904a55някакво connectivity ишу с MySql изглеждаSteliyan Georgiev 12:53 PMно това е само 1 случай2 replies Last reply today at 1:02 PMNewSteliyan Georgiev 4:09 PMМоже ли едно малко ревю на един ПР,който вече го прецизирах с @claude ревюhttps://github.com/jiminny/prophet/pull/479Message & platform-inner-team+Aa@ .••*3>0 lbl-zshA100% <478**884Thu 16 Apr 16:17:15-zsh85window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostwindow_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE '%Boostwindow_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostwindow_name FROM ocr_text WHERE app_name LIKE "%Safari%" OR window_name LIKE '%Boostit DATETIME);...
|
NULL
|
|
38800
|
791
|
84
|
2026-04-16T13:21:13.153380+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776345673153_m2.jpg...
|
Boosteroid
|
Boosteroid
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
8556265341651/75toCastle Age--Forging Research Com 8556265341651/75toCastle Age--Forging Research Complete--Warning: You are being attacked byPlayer 5 Manuel I!!.---Elite Skirmisher Research Complete-Game Paused (P)Click to select this building.koval ikukas (Dravdians)4 8/1111 (4)4000/40004 Roger II of Sicily: 3136/31368 Mundzuk the Hun: 3061/3061Zbigniew Olesnicki: 3056/30563 Anastasios I Dikoros: 3019/30196 Emperor Karel IV: 3003/30035 Manuel I: 2955/29551 kovaliklukas: 2552/25527 Themistocles: 2433/2433BBGBBEE...
|
NULL
|
-8961007334284675209
|
NULL
|
click
|
ocr
|
NULL
|
8556265341651/75toCastle Age--Forging Research Com 8556265341651/75toCastle Age--Forging Research Complete--Warning: You are being attacked byPlayer 5 Manuel I!!.---Elite Skirmisher Research Complete-Game Paused (P)Click to select this building.koval ikukas (Dravdians)4 8/1111 (4)4000/40004 Roger II of Sicily: 3136/31368 Mundzuk the Hun: 3061/3061Zbigniew Olesnicki: 3056/30563 Anastasios I Dikoros: 3019/30196 Emperor Karel IV: 3003/30035 Manuel I: 2955/29551 kovaliklukas: 2552/25527 Themistocles: 2433/2433BBGBBEE...
|
NULL
|
|
38860
|
790
|
84
|
2026-04-16T13:22:52.311338+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776345772311_m1.jpg...
|
Boosteroid
|
Boosteroid
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+SlackFileEditViewEDHomeDMsActivityFilesLater..•Mo +SlackFileEditViewEDHomeDMsActivityFilesLater..•More+Jiminny ...w Starred& jiminny-x-integrati...8platform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...• Direct messages0. Nikolay Nikolov. Stoyan TanevG. Vasil Vasilev. Galya Dimitrovaal MikalavlanavGoHistoryWindowHelp→CSearch Jiminny Inc& platform-inner-...& 10MessagesP Channel OverviewMore v+create PDF verToday ~ uest_id: 822fa41b-afd3-43a9-a248-ooDue36f3131: (2013, 'Lostconnection to MySQL server during query([Errno 104] Connection reset by peer)"):correlation_id:ae2e38ff-ed04-401e-b77c-1e02e9d788c6 trace_id:f0194348-cece-4ca8-8413-21e32eef1d4f[2026-04-13 01:09:56] app.ERROR: Failed tocreate PDF version for request_id: 822fa41b-afd3-43a9-a248-86b0e36f3131: (2013, 'Lostconnection to MySQL server during query([Errno 104] Connection reset by peer)"):correlation_id:ae2e38ff-ed04-401e-b77c-1e02e9d788c6 trace_id:f0194348-cece-4ca8-8413-21e32eef1d4fecs/jiminny-prophet/fbd19ab3fe8d4775bb936af467904a55някакво connectivity ишу с MySql изглеждаSteliyan Georgiev 12:53 PMно това е само 1 случай2 replies Last reply today at 1:02 PMNewSteliyan Georgiev 4:09 PMМоже ли едно малко ревю на един ПР,който вече го прецизирах с @claude ревюhttps://github.com/jiminny/prophet/pull/479Message & platform-inner-team+Aa@ .••*3>0 lbl-zsh100% <478Thu 16 Apr 16:22:52• $84-zsh85window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostwindow_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE '%Boostwindow_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostwindow_name FROM ocr_text WHERE app_name LIKE "%Safari%" OR window_name LIKE '%Boostit DATETIME);...
|
NULL
|
-1480542212433081935
|
NULL
|
click
|
ocr
|
NULL
|
+SlackFileEditViewEDHomeDMsActivityFilesLater..•Mo +SlackFileEditViewEDHomeDMsActivityFilesLater..•More+Jiminny ...w Starred& jiminny-x-integrati...8platform-inner-teamChannels# ai-chapter# alerts# backend# confusion-clinic# curiosity_lab# engineering# frontend# general# infra-changes# jiminny-bg# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...• Direct messages0. Nikolay Nikolov. Stoyan TanevG. Vasil Vasilev. Galya Dimitrovaal MikalavlanavGoHistoryWindowHelp→CSearch Jiminny Inc& platform-inner-...& 10MessagesP Channel OverviewMore v+create PDF verToday ~ uest_id: 822fa41b-afd3-43a9-a248-ooDue36f3131: (2013, 'Lostconnection to MySQL server during query([Errno 104] Connection reset by peer)"):correlation_id:ae2e38ff-ed04-401e-b77c-1e02e9d788c6 trace_id:f0194348-cece-4ca8-8413-21e32eef1d4f[2026-04-13 01:09:56] app.ERROR: Failed tocreate PDF version for request_id: 822fa41b-afd3-43a9-a248-86b0e36f3131: (2013, 'Lostconnection to MySQL server during query([Errno 104] Connection reset by peer)"):correlation_id:ae2e38ff-ed04-401e-b77c-1e02e9d788c6 trace_id:f0194348-cece-4ca8-8413-21e32eef1d4fecs/jiminny-prophet/fbd19ab3fe8d4775bb936af467904a55някакво connectivity ишу с MySql изглеждаSteliyan Georgiev 12:53 PMно това е само 1 случай2 replies Last reply today at 1:02 PMNewSteliyan Georgiev 4:09 PMМоже ли едно малко ревю на един ПР,който вече го прецизирах с @claude ревюhttps://github.com/jiminny/prophet/pull/479Message & platform-inner-team+Aa@ .••*3>0 lbl-zsh100% <478Thu 16 Apr 16:22:52• $84-zsh85window_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostwindow_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE '%Boostwindow_name FROM ocr_text WHERE app_name LIKE "%Safari%' OR window_name LIKE "%Boostwindow_name FROM ocr_text WHERE app_name LIKE "%Safari%" OR window_name LIKE '%Boostit DATETIME);...
|
38858
|
|
39009
|
794
|
84
|
2026-04-16T13:26:51.623488+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776346011623_m2.jpg...
|
Boosteroid
|
Boosteroid
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
13081023122454778/85toШCastle Age-Elite Skirmisher 13081023122454778/85toШCastle Age-Elite Skirmisher Created---Villager Created-- House Built--Game Paused (P)Lown Centerkovalikukas (Dravidians4 5/7Creating 40%Villager12400/240004 Roger II of Sicily: 4856/48563 Anastasios I Dikoros: 4423/44235 Manuel I: 4257/42576 Emperor Karel IV: 4207/42078 Mundzuk the Hun: 3991/39912 Zbigniew Olesnicki: 3684/36841 kovaliklukas: 3509/35097 Themistocles: 3381/3381...
|
NULL
|
9008717033057843816
|
NULL
|
click
|
ocr
|
NULL
|
13081023122454778/85toШCastle Age-Elite Skirmisher 13081023122454778/85toШCastle Age-Elite Skirmisher Created---Villager Created-- House Built--Game Paused (P)Lown Centerkovalikukas (Dravidians4 5/7Creating 40%Villager12400/240004 Roger II of Sicily: 4856/48563 Anastasios I Dikoros: 4423/44235 Manuel I: 4257/42576 Emperor Karel IV: 4207/42078 Mundzuk the Hun: 3991/39912 Zbigniew Olesnicki: 3684/36841 kovaliklukas: 3509/35097 Themistocles: 3381/3381...
|
39007
|
|
39215
|
797
|
84
|
2026-04-16T13:33:30.132459+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776346410132_m2.jpg...
|
Boosteroid
|
Boosteroid
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
285845213447788/115VVImperial AgeComplete--Roger I 285845213447788/115VVImperial AgeComplete--Roger Il of Sicily advanced to theImperial Age.Click to select this building4 Roger II of Sicily: 6782/6782IV6 Emperor Karel IV: 6110/61103 Anastasios I Dikoros: 5667/5667IV5 Manuel I: 5428/54288 Mundzuk the Hun: 5078/50781 kovaliklukas: 4826/4826NVNV2 Zbigniew Olesnicki: 4725/47257 Themistocles: 4413/4413...
|
NULL
|
1375501494572922824
|
NULL
|
click
|
ocr
|
NULL
|
285845213447788/115VVImperial AgeComplete--Roger I 285845213447788/115VVImperial AgeComplete--Roger Il of Sicily advanced to theImperial Age.Click to select this building4 Roger II of Sicily: 6782/6782IV6 Emperor Karel IV: 6110/61103 Anastasios I Dikoros: 5667/5667IV5 Manuel I: 5428/54288 Mundzuk the Hun: 5078/50781 kovaliklukas: 4826/4826NVNV2 Zbigniew Olesnicki: 4725/47257 Themistocles: 4413/4413...
|
39213
|
|
39395
|
798
|
84
|
2026-04-16T13:37:53.718623+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776346673718_m1.jpg...
|
iTerm2
|
-zsh
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Last login: Thu Apr 16 15:48:10 on ttys008
Poetry Last login: Thu Apr 16 15:48:10 on ttys008
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Error: in prepare, no such column: created_at
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ sp-start
[1] 10835
detected hardware tier: Mid
warning: parakeet is not supported on this platform, using whisper-tiny instead
2026-04-16T15:49:34.042032Z INFO screenpipe_engine::cli: api auth enabled — key loaded
checking permissions...
screen recording: ok
accessibility: ok
2026-04-16T15:49:34.112749Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-16T15:49:34.594897Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-16T15:49:34.596610Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-16T15:49:34.596593Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-16T15:49:34.596791Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-04-16T15:49:34.596806Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-04-16T15:49:34.596807Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-16T15:49:34.596885Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-16T15:49:34.596870Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-16T15:49:34.597351Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-16T15:49:34.606273Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))
2026-04-16T15:49:34.618378Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-16T15:49:34.618584Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-16T15:49:34.619192Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-16T15:49:34.619360Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-16T15:49:34.619514Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-16T15:49:34.620079Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-16T15:49:34.620094Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ true │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
2026-04-16T15:49:34.621492Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
2026-04-16T15:49:34.624911Z WARN screenpipe: pi agent install failed: bun not found — install from [URL_WITH_CREDENTIALS] record --disable-audio
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ sp-start
[2] 16333
detected hardware tier: Mid
warning: parakeet is not supported on this platform, using whisper-tiny instead
2026-04-16T16:37:36.844691Z INFO screenpipe_engine::cli: api auth enabled — key loaded
checking permissions...
screen recording: ok
accessibility: ok
2026-04-16T16:37:36.908594Z ERROR screenpipe: you're likely already running screenpipe instance in a different environment, e.g. terminal/ide, close it and restart or use different port
Error: port already in use
[2] + exit 1 npx screenpipe@latest record --disable-audio
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ 2026-04-16T16:37:44.667889Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7015942202896518227, trigger=visual_change)
2026-04-16T16:37:45.533382Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7015942202896518227, trigger=click)
2026-04-16T16:37:45.561511Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7015942202896518227, trigger=click)
2026-04-16T16:37:47.292509Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7015942202896518227, trigger=click)
2026-04-16T16:37:47.298185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7015942202896518227, trigger=click)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
[{"role":"AXTextArea","text [{"role":"AXTextArea","text":"Last login: Thu Apr 16 15:48:10 on ttys008\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\"\nError: in prepare, no such column: created_at\n ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\n error here ---^\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ sp-start\n[1] 10835\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-04-16T15:49:34.042032Z INFO screenpipe_engine::cli: api auth enabled — key loaded\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-16T15:49:34.112749Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-16T15:49:34.594897Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-16T15:49:34.596610Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-16T15:49:34.596593Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-16T15:49:34.596791Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-04-16T15:49:34.596806Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-04-16T15:49:34.596807Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-16T15:49:34.596885Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-16T15:49:34.596870Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-16T15:49:34.597351Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-16T15:49:34.606273Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-16T15:49:34.618378Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-16T15:49:34.618584Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-16T15:49:34.619192Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-16T15:49:34.619360Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-16T15:49:34.619514Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-16T15:49:34.620079Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-16T15:49:34.620094Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n2026-04-16T15:49:34.621492Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n2026-04-16T15:49:34.624911Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-04-16T15:49:34.635508Z INFO screenpipe: starting UI event capture\n2026-04-16T15:49:34.650182Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-16T15:49:34.664835Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-16T15:49:34.664920Z INFO screenpipe_engine::ui_recorder: UI recording session started: 9b7c5415-eda0-4db6-9d45-49e7670207bb\n2026-04-16T15:49:34.665040Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-15 12:49:34.665038 UTC to 2026-04-16 12:49:34.665038 UTC)\n2026-04-16T15:49:34.665532Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-16T15:49:34.671502Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-04-16T15:49:34.675785Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-16T15:49:34.697836Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-16T15:49:34.697951Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-16T15:49:34.698000Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-16T15:49:34.738391Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (2560x1440)\n2026-04-16T15:49:34.738421Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-04-16T15:49:34.738434Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-16T15:49:34.738437Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-04-16T15:49:35.348337Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-04-16T15:49:35.438551Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (2560x1440, 2fps, 0 excluded)\n2026-04-16T15:49:35.450120Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=37623, dur=47ms\n2026-04-16T15:49:35.601781Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=37624, dur=123ms\n2026-04-16T15:49:36.694541Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=0 rows_returned=10000 elapsed=2.028777042s\n2026-04-16T15:49:36.717865Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 10000 frame entries, coverage from 2026-04-15 12:49:34.665038 UTC\n2026-04-16T15:49:53.109563Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4669775953353067079, trigger=visual_change)\n2026-04-16T15:49:53.356274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4669775953353067079, trigger=click)\n2026-04-16T15:49:53.542431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4669775953353067079, trigger=click)\n2026-04-16T15:49:59.880060Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4669775953353067079, trigger=click)\n2026-04-16T15:49:59.903812Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4669775953353067079, trigger=click)\n2026-04-16T15:50:01.035967Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4669775953353067079, trigger=click)\n2026-04-16T15:50:01.063355Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4669775953353067079, trigger=click)\n2026-04-16T15:50:02.148081Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4669775953353067079, trigger=visual_change)\n2026-04-16T15:50:37.954731Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=257 elapsed=3.35481725s\n2026-04-16T15:50:37.957981Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 257 eligible frames\n2026-04-16T15:50:44.647101Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 17.3MB → 8.0MB (2.2x), 99 JPEGs deleted\n2026-04-16T15:50:46.727307Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 4.6MB → 2.1MB (2.1x), 30 JPEGs deleted\n2026-04-16T15:50:54.552333Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 18.8MB → 9.3MB (2.0x), 99 JPEGs deleted\n2026-04-16T15:50:56.430376Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 27 frames, 3.9MB → 1.0MB (4.1x), 27 JPEGs deleted\n2026-04-16T15:55:59.594623Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=4 elapsed=3.157082875s\n2026-04-16T15:55:59.594845Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 4 eligible frames\n2026-04-16T16:01:02.762190Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=46 elapsed=3.2475265s\n2026-04-16T16:01:02.762534Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 46 eligible frames\n2026-04-16T16:01:04.226747Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 3.0MB → 0.8MB (3.9x), 23 JPEGs deleted\n2026-04-16T16:01:07.216208Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.6MB → 3.8MB (1.8x), 23 JPEGs deleted\n2026-04-16T16:06:10.245740Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=233 elapsed=3.015628333s\n2026-04-16T16:06:10.246070Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 233 eligible frames\n2026-04-16T16:06:15.816827Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 12.8MB → 0.2MB (61.7x), 99 JPEGs deleted\n2026-04-16T16:06:16.124348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 2 frames, 0.3MB → 0.2MB (1.6x), 2 JPEGs deleted\n2026-04-16T16:06:25.631776Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 34.1MB → 14.6MB (2.3x), 99 JPEGs deleted\n2026-04-16T16:06:29.913997Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 11.5MB → 7.1MB (1.6x), 31 JPEGs deleted\n2026-04-16T16:09:58.255643Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5947204789605049109, trigger=click)\n2026-04-16T16:09:59.993310Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5947204789605049109, trigger=visual_change)\n2026-04-16T16:11:32.789423Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=206 elapsed=2.861134666s\n2026-04-16T16:11:32.789627Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 206 eligible frames\n2026-04-16T16:11:37.885111Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 90 frames, 11.6MB → 0.2MB (57.7x), 90 JPEGs deleted\n2026-04-16T16:11:49.909833Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 43.5MB → 25.6MB (1.7x), 98 JPEGs deleted\n2026-04-16T16:11:52.043173Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 6.6MB → 3.7MB (1.8x), 14 JPEGs deleted\n2026-04-16T16:16:55.318686Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=177 elapsed=3.233162541s\n2026-04-16T16:16:55.319060Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-04-16T16:16:59.537078Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 74 frames, 9.6MB → 0.2MB (48.4x), 74 JPEGs deleted\n2026-04-16T16:17:12.936466Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 48.7MB → 31.0MB (1.6x), 98 JPEGs deleted\n2026-04-16T16:17:13.627892Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 2 frames, 1.0MB → 1.0MB (1.1x), 2 JPEGs deleted\n2026-04-16T16:22:16.622963Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=178 elapsed=2.97944825s\n2026-04-16T16:22:16.623406Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 178 eligible frames\n2026-04-16T16:22:20.965943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 76 frames, 10.9MB → 1.0MB (10.7x), 76 JPEGs deleted\n2026-04-16T16:22:35.088667Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 42.6MB → 31.4MB (1.4x), 98 JPEGs deleted\n2026-04-16T16:22:35.581151Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 1 frames, 0.5MB → 0.6MB (0.8x), 1 JPEGs deleted\n2026-04-16T16:27:07.448039Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5947204789605049109, trigger=visual_change)\n2026-04-16T16:27:11.165081Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5947204789605049109, trigger=click)\n2026-04-16T16:27:11.165329Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5947204789605049109, trigger=click)\n2026-04-16T16:27:13.527947Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5947204789605049109, trigger=visual_change)\n2026-04-16T16:27:38.772245Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=209 elapsed=3.177338208s\n2026-04-16T16:27:38.772676Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 209 eligible frames\n2026-04-16T16:27:44.035890Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 93 frames, 14.3MB → 0.3MB (52.6x), 93 JPEGs deleted\n2026-04-16T16:27:58.975654Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 50.6MB → 35.5MB (1.4x), 98 JPEGs deleted\n2026-04-16T16:28:02.032994Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 7.8MB → 6.3MB (1.3x), 15 JPEGs deleted\n2026-04-16T16:32:39.928777Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5947204789605049109, trigger=visual_change)\n2026-04-16T16:33:04.993225Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=213 elapsed=2.982255167s\n2026-04-16T16:33:04.993538Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 213 eligible frames\n2026-04-16T16:33:09.931497Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 87 frames, 13.4MB → 0.3MB (49.2x), 87 JPEGs deleted\n2026-04-16T16:33:24.379269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 53.0MB → 35.1MB (1.5x), 98 JPEGs deleted\n2026-04-16T16:33:29.295983Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 25 frames, 13.8MB → 11.3MB (1.2x), 25 JPEGs deleted\n2026-04-16T16:36:16.756971Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7513401259679065395, trigger=click)\n2026-04-16T16:36:19.537428Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7513401259679065395, trigger=visual_change)\n2026-04-16T16:36:41.001407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7556212354722770396, trigger=visual_change)\n2026-04-16T16:36:47.087161Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3934626164536711222, trigger=visual_change)\n2026-04-16T16:37:03.875831Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3934626164536711222, trigger=click)\n2026-04-16T16:37:03.899918Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3934626164536711222, trigger=click)\nsp-start\n[2] 16250\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-04-16T16:37:15.560343Z INFO screenpipe_engine::cli: api auth enabled — key loaded\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-16T16:37:15.628314Z ERROR screenpipe: you're likely already running screenpipe instance in a different environment, e.g. terminal/ide, close it and restart or use different port\nError: port already in use\n\n[2] + exit 1 npx screenpipe@latest record --disable-audio\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ sp-start\n[2] 16333\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-04-16T16:37:36.844691Z INFO screenpipe_engine::cli: api auth enabled — key loaded\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-16T16:37:36.908594Z ERROR screenpipe: you're likely already running screenpipe instance in a different environment, e.g. terminal/ide, close it and restart or use different port\nError: port already in use\n\n[2] + exit 1 npx screenpipe@latest record --disable-audio\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ 2026-04-16T16:37:44.667889Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7015942202896518227, trigger=visual_change)\n2026-04-16T16:37:45.533382Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7015942202896518227, trigger=click)\n2026-04-16T16:37:45.561511Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7015942202896518227, trigger=click)\n2026-04-16T16:37:47.292509Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7015942202896518227, trigger=click)\n2026-04-16T16:37:47.298185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7015942202896518227, trigger=click)","depth":4,"value":"Last login: Thu Apr 16 15:48:10 on ttys008\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\n\nPoetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ sqlite3 ~/.screenpipe/db.sqlite \"SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\"\nError: in prepare, no such column: created_at\n ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;\n error here ---^\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ sp-start\n[1] 10835\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-04-16T15:49:34.042032Z INFO screenpipe_engine::cli: api auth enabled — key loaded\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-16T15:49:34.112749Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6\n2026-04-16T15:49:34.594897Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor\n2026-04-16T15:49:34.596610Z INFO screenpipe: meeting detector enabled — independent of transcription mode\n2026-04-16T15:49:34.596593Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)\n2026-04-16T15:49:34.596791Z INFO screenpipe: API server listening on 127.0.0.1:3030 (localhost only)\n2026-04-16T15:49:34.596806Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key\n2026-04-16T15:49:34.596807Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)\n2026-04-16T15:49:34.596885Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)\n2026-04-16T15:49:34.596870Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager\n2026-04-16T15:49:34.597351Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)\n2026-04-16T15:49:34.606273Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))\n2026-04-16T15:49:34.618378Z INFO screenpipe_core::pipes: loaded pipe: day-recap\n2026-04-16T15:49:34.618584Z INFO screenpipe_core::pipes: loaded pipe: standup-update\n2026-04-16T15:49:34.619192Z INFO screenpipe_core::pipes: loaded pipe: ai-habits\n2026-04-16T15:49:34.619360Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown\n2026-04-16T15:49:34.619514Z INFO screenpipe_core::pipes: loaded pipe: video-export\n2026-04-16T15:49:34.620079Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary\n2026-04-16T15:49:34.620094Z INFO screenpipe_core::pipes: loaded 6 pipes from \"/Users/lukas/.screenpipe/pipes\"\n\n\n\n _ \n __________________ ___ ____ ____ (_____ ___ \n / ___/ ___/ ___/ _ \\/ _ \\/ __ \\ / __ \\/ / __ \\/ _ \\\n (__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/\n/____/\\___/_/ \\___/\\___/_/ /_/ / .___/_/ .___/\\___/ \n /_/ /_/ \n\n\n\npower AI by everything you've seen, said or heard\nopen source | runs locally | developer friendly\n\n\n┌────────────────────────┬────────────────────────────────────┐\n│ setting │ value │\n├────────────────────────┼────────────────────────────────────┤\n│ audio chunk duration │ 30 seconds │\n│ port │ 3030 │\n│ audio disabled │ true │\n│ vision disabled │ false │\n│ pause on DRM content │ false │\n│ audio engine │ Parakeet │\n│ vad engine │ Silero │\n│ data directory │ /Users/lukas/.screenpipe │\n│ debug mode │ false │\n│ telemetry │ true │\n│ use pii removal │ true │\n│ use all monitors │ true │\n│ ignored windows │ [] │\n│ included windows │ [] │\n│ cloud sync │ disabled │\n2026-04-16T15:49:34.621492Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)\n│ auto-destruct pid │ 0 │\n│ deepgram key │ not set │\n│ api auth │ enabled │\n2026-04-16T15:49:34.624911Z WARN screenpipe: pi agent install failed: bun not found — install from https://bun.sh\n│ encrypt secrets │ disabled │\n│ retention days │ 14 │\n├────────────────────────┼────────────────────────────────────┤\n│ languages │ │\n│ │ all languages │\n├────────────────────────┼────────────────────────────────────┤\n│ monitors │ │\n│ │ id: 1 │\n│ │ id: 2 │\n├────────────────────────┼────────────────────────────────────┤\n│ audio devices │ │\n│ │ disabled │\n└────────────────────────┴────────────────────────────────────┘\nyou are using local processing. all your data stays on your computer.\n\nwarning: telemetry is enabled. only error-level data will be sent.\nto disable, use the --disable-telemetry flag.\n\ncheck latest changes here: https://github.com/screenpipe/screenpipe/releases\n2026-04-16T15:49:34.635508Z INFO screenpipe: starting UI event capture\n2026-04-16T15:49:34.650182Z INFO screenpipe_engine::ui_recorder: Starting UI event capture\n2026-04-16T15:49:34.664835Z INFO screenpipe_engine::calendar_speaker_id: speaker identification: started (user_name=<not set>)\n2026-04-16T15:49:34.664920Z INFO screenpipe_engine::ui_recorder: UI recording session started: 9b7c5415-eda0-4db6-9d45-49e7670207bb\n2026-04-16T15:49:34.665040Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warming from DB (2026-04-15 12:49:34.665038 UTC to 2026-04-16 12:49:34.665038 UTC)\n2026-04-16T15:49:34.665532Z INFO screenpipe_engine::meeting_detector: meeting v2: detection loop started (base_interval=5s, profiles=12)\n2026-04-16T15:49:34.671502Z INFO screenpipe_engine::server: Server listening on 127.0.0.1:3030\n2026-04-16T15:49:34.675785Z INFO screenpipe_connect::mdns: mdns: advertising screenpipe on port 3030\n2026-04-16T15:49:34.697836Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 1 (1440x900)\n2026-04-16T15:49:34.697951Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 1 (device: monitor_1)\n2026-04-16T15:49:34.698000Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 1 (device: monitor_1)\n2026-04-16T15:49:34.738391Z INFO screenpipe_engine::vision_manager::manager: Starting vision recording for monitor 2 (2560x1440)\n2026-04-16T15:49:34.738421Z INFO screenpipe_engine::vision_manager::manager: Starting event-driven capture for monitor 2 (device: monitor_2)\n2026-04-16T15:49:34.738434Z INFO screenpipe_engine::vision_manager::monitor_watcher: Starting monitor watcher (polling every 5 seconds)\n2026-04-16T15:49:34.738437Z INFO screenpipe_engine::event_driven_capture: event-driven capture started for monitor 2 (device: monitor_2)\n2026-04-16T15:49:35.348337Z INFO sck_rs::stream_manager: persistent SCK stream started for display 1 (1440x900, 2fps, 0 excluded)\n2026-04-16T15:49:35.438551Z INFO sck_rs::stream_manager: persistent SCK stream started for display 2 (2560x1440, 2fps, 0 excluded)\n2026-04-16T15:49:35.450120Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 1: frame_id=37623, dur=47ms\n2026-04-16T15:49:35.601781Z INFO screenpipe_engine::event_driven_capture: startup capture for monitor 2: frame_id=37624, dur=123ms\n2026-04-16T15:49:36.694541Z WARN sqlx::query: summary=\"SELECT f.id, f.timestamp, f.offset_index, …\" db.statement=\"\\n\\nSELECT\\n f.id,\\n f.timestamp,\\n f.offset_index,\\n COALESCE(\\n SUBSTR(f.full_text, 1, 200),\\n SUBSTR(f.accessibility_text, 1, 200),\\n (\\n SELECT\\n SUBSTR(ot.text, 1, 200)\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as text,\\n COALESCE(\\n f.app_name,\\n (\\n SELECT\\n ot.app_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as app_name,\\n COALESCE(\\n f.window_name,\\n (\\n SELECT\\n ot.window_name\\n FROM\\n ocr_text ot\\n WHERE\\n ot.frame_id = f.id\\n LIMIT\\n 1\\n )\\n ) as window_name,\\n COALESCE(vc.device_name, f.device_name) as screen_device,\\n COALESCE(vc.file_path, f.snapshot_path) as video_path,\\n COALESCE(vc.fps, 0.033) as chunk_fps,\\n f.browser_url,\\n f.machine_id\\nFROM\\n frames f\\n LEFT JOIN video_chunks vc ON f.video_chunk_id = vc.id\\nWHERE\\n f.timestamp >= ?1\\n AND f.timestamp <= ?2\\n AND COALESCE(vc.file_path, f.snapshot_path, '') NOT LIKE 'cloud://%'\\nORDER BY\\n f.timestamp DESC,\\n f.offset_index DESC\\nLIMIT\\n 10000\\n\" rows_affected=0 rows_returned=10000 elapsed=2.028777042s\n2026-04-16T15:49:36.717865Z INFO screenpipe_engine::hot_frame_cache: hot_frame_cache: warmed with 10000 frame entries, coverage from 2026-04-15 12:49:34.665038 UTC\n2026-04-16T15:49:53.109563Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4669775953353067079, trigger=visual_change)\n2026-04-16T15:49:53.356274Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4669775953353067079, trigger=click)\n2026-04-16T15:49:53.542431Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4669775953353067079, trigger=click)\n2026-04-16T15:49:59.880060Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4669775953353067079, trigger=click)\n2026-04-16T15:49:59.903812Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4669775953353067079, trigger=click)\n2026-04-16T15:50:01.035967Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4669775953353067079, trigger=click)\n2026-04-16T15:50:01.063355Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-4669775953353067079, trigger=click)\n2026-04-16T15:50:02.148081Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-4669775953353067079, trigger=visual_change)\n2026-04-16T15:50:37.954731Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=257 elapsed=3.35481725s\n2026-04-16T15:50:37.957981Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 257 eligible frames\n2026-04-16T15:50:44.647101Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 17.3MB → 8.0MB (2.2x), 99 JPEGs deleted\n2026-04-16T15:50:46.727307Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 30 frames, 4.6MB → 2.1MB (2.1x), 30 JPEGs deleted\n2026-04-16T15:50:54.552333Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 18.8MB → 9.3MB (2.0x), 99 JPEGs deleted\n2026-04-16T15:50:56.430376Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 27 frames, 3.9MB → 1.0MB (4.1x), 27 JPEGs deleted\n2026-04-16T15:55:59.594623Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=4 elapsed=3.157082875s\n2026-04-16T15:55:59.594845Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 4 eligible frames\n2026-04-16T16:01:02.762190Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=46 elapsed=3.2475265s\n2026-04-16T16:01:02.762534Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 46 eligible frames\n2026-04-16T16:01:04.226747Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 3.0MB → 0.8MB (3.9x), 23 JPEGs deleted\n2026-04-16T16:01:07.216208Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 23 frames, 6.6MB → 3.8MB (1.8x), 23 JPEGs deleted\n2026-04-16T16:06:10.245740Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=233 elapsed=3.015628333s\n2026-04-16T16:06:10.246070Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 233 eligible frames\n2026-04-16T16:06:15.816827Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 12.8MB → 0.2MB (61.7x), 99 JPEGs deleted\n2026-04-16T16:06:16.124348Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 2 frames, 0.3MB → 0.2MB (1.6x), 2 JPEGs deleted\n2026-04-16T16:06:25.631776Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 99 frames, 34.1MB → 14.6MB (2.3x), 99 JPEGs deleted\n2026-04-16T16:06:29.913997Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 31 frames, 11.5MB → 7.1MB (1.6x), 31 JPEGs deleted\n2026-04-16T16:09:58.255643Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5947204789605049109, trigger=click)\n2026-04-16T16:09:59.993310Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5947204789605049109, trigger=visual_change)\n2026-04-16T16:11:32.789423Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=206 elapsed=2.861134666s\n2026-04-16T16:11:32.789627Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 206 eligible frames\n2026-04-16T16:11:37.885111Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 90 frames, 11.6MB → 0.2MB (57.7x), 90 JPEGs deleted\n2026-04-16T16:11:49.909833Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 43.5MB → 25.6MB (1.7x), 98 JPEGs deleted\n2026-04-16T16:11:52.043173Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 14 frames, 6.6MB → 3.7MB (1.8x), 14 JPEGs deleted\n2026-04-16T16:16:55.318686Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=177 elapsed=3.233162541s\n2026-04-16T16:16:55.319060Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 177 eligible frames\n2026-04-16T16:16:59.537078Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 74 frames, 9.6MB → 0.2MB (48.4x), 74 JPEGs deleted\n2026-04-16T16:17:12.936466Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 48.7MB → 31.0MB (1.6x), 98 JPEGs deleted\n2026-04-16T16:17:13.627892Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 2 frames, 1.0MB → 1.0MB (1.1x), 2 JPEGs deleted\n2026-04-16T16:22:16.622963Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=178 elapsed=2.97944825s\n2026-04-16T16:22:16.623406Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 178 eligible frames\n2026-04-16T16:22:20.965943Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 76 frames, 10.9MB → 1.0MB (10.7x), 76 JPEGs deleted\n2026-04-16T16:22:35.088667Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 42.6MB → 31.4MB (1.4x), 98 JPEGs deleted\n2026-04-16T16:22:35.581151Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 1 frames, 0.5MB → 0.6MB (0.8x), 1 JPEGs deleted\n2026-04-16T16:27:07.448039Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5947204789605049109, trigger=visual_change)\n2026-04-16T16:27:11.165081Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5947204789605049109, trigger=click)\n2026-04-16T16:27:11.165329Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=5947204789605049109, trigger=click)\n2026-04-16T16:27:13.527947Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5947204789605049109, trigger=visual_change)\n2026-04-16T16:27:38.772245Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=209 elapsed=3.177338208s\n2026-04-16T16:27:38.772676Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 209 eligible frames\n2026-04-16T16:27:44.035890Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 93 frames, 14.3MB → 0.3MB (52.6x), 93 JPEGs deleted\n2026-04-16T16:27:58.975654Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 50.6MB → 35.5MB (1.4x), 98 JPEGs deleted\n2026-04-16T16:28:02.032994Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 15 frames, 7.8MB → 6.3MB (1.3x), 15 JPEGs deleted\n2026-04-16T16:32:39.928777Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=5947204789605049109, trigger=visual_change)\n2026-04-16T16:33:04.993225Z WARN sqlx::query: summary=\"SELECT id, snapshot_path, device_name, …\" db.statement=\"\\n\\nSELECT\\n id,\\n snapshot_path,\\n device_name,\\n timestamp\\nFROM\\n frames\\nWHERE\\n snapshot_path IS NOT NULL\\n AND timestamp < ?1\\nORDER BY\\n device_name,\\n timestamp ASC\\nLIMIT\\n 5000\\n\" rows_affected=0 rows_returned=213 elapsed=2.982255167s\n2026-04-16T16:33:04.993538Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: found 213 eligible frames\n2026-04-16T16:33:09.931497Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 87 frames, 13.4MB → 0.3MB (49.2x), 87 JPEGs deleted\n2026-04-16T16:33:24.379269Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 98 frames, 53.0MB → 35.1MB (1.5x), 98 JPEGs deleted\n2026-04-16T16:33:29.295983Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction: 25 frames, 13.8MB → 11.3MB (1.2x), 25 JPEGs deleted\n2026-04-16T16:36:16.756971Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7513401259679065395, trigger=click)\n2026-04-16T16:36:19.537428Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-7513401259679065395, trigger=visual_change)\n2026-04-16T16:36:41.001407Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7556212354722770396, trigger=visual_change)\n2026-04-16T16:36:47.087161Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3934626164536711222, trigger=visual_change)\n2026-04-16T16:37:03.875831Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=-3934626164536711222, trigger=click)\n2026-04-16T16:37:03.899918Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=-3934626164536711222, trigger=click)\nsp-start\n[2] 16250\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-04-16T16:37:15.560343Z INFO screenpipe_engine::cli: api auth enabled — key loaded\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-16T16:37:15.628314Z ERROR screenpipe: you're likely already running screenpipe instance in a different environment, e.g. terminal/ide, close it and restart or use different port\nError: port already in use\n\n[2] + exit 1 npx screenpipe@latest record --disable-audio\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ sp-start\n[2] 16333\ndetected hardware tier: Mid\nwarning: parakeet is not supported on this platform, using whisper-tiny instead\n2026-04-16T16:37:36.844691Z INFO screenpipe_engine::cli: api auth enabled — key loaded\nchecking permissions...\n screen recording: ok\n accessibility: ok\n2026-04-16T16:37:36.908594Z ERROR screenpipe: you're likely already running screenpipe instance in a different environment, e.g. terminal/ide, close it and restart or use different port\nError: port already in use\n\n[2] + exit 1 npx screenpipe@latest record --disable-audio\nlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ 2026-04-16T16:37:44.667889Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7015942202896518227, trigger=visual_change)\n2026-04-16T16:37:45.533382Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7015942202896518227, trigger=click)\n2026-04-16T16:37:45.561511Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7015942202896518227, trigger=click)\n2026-04-16T16:37:47.292509Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7015942202896518227, trigger=click)\n2026-04-16T16:37:47.298185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7015942202896518227, trigger=click)","is_focused":true},{"role":"AXRadioButton","text":"DOCKER","depth":2,"bounds":{"left":0.0,"top":0.05888889,"width":0.20069444,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.004166667,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"DEV (-zsh)","depth":2,"bounds":{"left":0.20069444,"top":0.05888889,"width":0.20034721,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.2048611,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"APP (-zsh)","depth":2,"bounds":{"left":0.40104166,"top":0.05888889,"width":0.20034721,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.40520832,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.6013889,"top":0.05888889,"width":0.20034721,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.60555553,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXRadioButton","text":"-zsh","depth":2,"bounds":{"left":0.8017361,"top":0.05888889,"width":0.19826388,"height":0.026666667},"role_description":"radio button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close Tab","depth":3,"bounds":{"left":0.8059028,"top":0.06333333,"width":0.011111111,"height":0.017777778},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"⌥⌘1","depth":1,"bounds":{"left":0.9736111,"top":0.032222223,"width":0.026388884,"height":0.018888889},"automation_id":"_NS:8","role_description":"text"},{"role":"AXStaticText","text":"-zsh","depth":1,"bounds":{"left":0.49791667,"top":0.033333335,"width":0.022916667,"height":0.017777778},"role_description":"text"}]...
|
-7532101219404907208
|
915840714190985075
|
visual_change
|
accessibility
|
NULL
|
Last login: Thu Apr 16 15:48:10 on ttys008
Poetry Last login: Thu Apr 16 15:48:10 on ttys008
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/app or its parents
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ sqlite3 ~/.screenpipe/db.sqlite "SELECT app_name, window_name FROM ocr_text WHERE app_name LIKE '%Safari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;"
Error: in prepare, no such column: created_at
ari%' OR window_name LIKE '%Boosteroid%' ORDER BY created_at DESC LIMIT 20;
error here ---^
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ sp-start
[1] 10835
detected hardware tier: Mid
warning: parakeet is not supported on this platform, using whisper-tiny instead
2026-04-16T15:49:34.042032Z INFO screenpipe_engine::cli: api auth enabled — key loaded
checking permissions...
screen recording: ok
accessibility: ok
2026-04-16T15:49:34.112749Z INFO screenpipe_screen::monitor::macos_version: Detected macOS version: 14.6
2026-04-16T15:49:34.594897Z INFO screenpipe_engine::sleep_monitor: Starting macOS sleep/wake monitor
2026-04-16T15:49:34.596610Z INFO screenpipe: meeting detector enabled — independent of transcription mode
2026-04-16T15:49:34.596593Z INFO screenpipe_engine::sleep_monitor: Screen lock/unlock observers registered (CFNotificationCenter)
2026-04-16T15:49:34.596791Z INFO screenpipe: API server listening on [IP_ADDRESS]:3030 (localhost only)
2026-04-16T15:49:34.596806Z INFO screenpipe: API auth enabled — run `screenpipe auth token` to view your key
2026-04-16T15:49:34.596807Z INFO screenpipe_engine::power::manager: power manager started (poll interval: 10s)
2026-04-16T15:49:34.596885Z INFO screenpipe_engine::snapshot_compaction: snapshot compaction worker started (min_age=600s, poll=300s)
2026-04-16T15:49:34.596870Z INFO screenpipe_engine::vision_manager::manager: Starting VisionManager
2026-04-16T15:49:34.597351Z INFO screenpipe_engine::sleep_monitor: Display reconfiguration watcher registered (CGDisplayRegisterReconfigurationCallback)
2026-04-16T15:49:34.606273Z INFO screenpipe_engine::power::manager: initial power profile: Performance (on_ac=true, battery=Some(100))
2026-04-16T15:49:34.618378Z INFO screenpipe_core::pipes: loaded pipe: day-recap
2026-04-16T15:49:34.618584Z INFO screenpipe_core::pipes: loaded pipe: standup-update
2026-04-16T15:49:34.619192Z INFO screenpipe_core::pipes: loaded pipe: ai-habits
2026-04-16T15:49:34.619360Z INFO screenpipe_core::pipes: loaded pipe: time-breakdown
2026-04-16T15:49:34.619514Z INFO screenpipe_core::pipes: loaded pipe: video-export
2026-04-16T15:49:34.620079Z INFO screenpipe_core::pipes: loaded pipe: meeting-summary
2026-04-16T15:49:34.620094Z INFO screenpipe_core::pipes: loaded 6 pipes from "/Users/lukas/.screenpipe/pipes"
_
__________________ ___ ____ ____ (_____ ___
/ ___/ ___/ ___/ _ \/ _ \/ __ \ / __ \/ / __ \/ _ \
(__ / /__/ / / __/ __/ / / / / /_/ / / /_/ / __/
/____/\___/_/ \___/\___/_/ /_/ / .___/_/ .___/\___/
/_/ /_/
power AI by everything you've seen, said or heard
open source | runs locally | developer friendly
┌────────────────────────┬────────────────────────────────────┐
│ setting │ value │
├────────────────────────┼────────────────────────────────────┤
│ audio chunk duration │ 30 seconds │
│ port │ 3030 │
│ audio disabled │ true │
│ vision disabled │ false │
│ pause on DRM content │ false │
│ audio engine │ Parakeet │
│ vad engine │ Silero │
│ data directory │ /Users/lukas/.screenpipe │
│ debug mode │ false │
│ telemetry │ true │
│ use pii removal │ true │
│ use all monitors │ true │
│ ignored windows │ [] │
│ included windows │ [] │
│ cloud sync │ disabled │
2026-04-16T15:49:34.621492Z INFO screenpipe_core::pipes: pipe scheduler started (generation 2)
│ auto-destruct pid │ 0 │
│ deepgram key │ not set │
│ api auth │ enabled │
2026-04-16T15:49:34.624911Z WARN screenpipe: pi agent install failed: bun not found — install from [URL_WITH_CREDENTIALS] record --disable-audio
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ sp-start
[2] 16333
detected hardware tier: Mid
warning: parakeet is not supported on this platform, using whisper-tiny instead
2026-04-16T16:37:36.844691Z INFO screenpipe_engine::cli: api auth enabled — key loaded
checking permissions...
screen recording: ok
accessibility: ok
2026-04-16T16:37:36.908594Z ERROR screenpipe: you're likely already running screenpipe instance in a different environment, e.g. terminal/ide, close it and restart or use different port
Error: port already in use
[2] + exit 1 npx screenpipe@latest record --disable-audio
lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/app (JY-18909-automated-reports-ask-jiminny) $ 2026-04-16T16:37:44.667889Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7015942202896518227, trigger=visual_change)
2026-04-16T16:37:45.533382Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7015942202896518227, trigger=click)
2026-04-16T16:37:45.561511Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7015942202896518227, trigger=click)
2026-04-16T16:37:47.292509Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 2 (hash=7015942202896518227, trigger=click)
2026-04-16T16:37:47.298185Z INFO screenpipe_engine::event_driven_capture: content dedup: skipping capture for monitor 1 (hash=7015942202896518227, trigger=click)
DOCKER
Close Tab
DEV (-zsh)
Close Tab
APP (-zsh)
Close Tab
-zsh
Close Tab
-zsh
Close Tab
⌥⌘1
-zsh...
|
NULL
|
|
39408
|
799
|
84
|
2026-04-16T13:38:14.693124+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-16/1776 /Users/lukas/.screenpipe/data/data/2026-04-16/1776346694693_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
ClaudeEditViewWindowHelp• Not Secure | [URL_WITH_C ClaudeEditViewWindowHelp• Not Secure | [URL_WITH_CREDENTIALS] ~ $ sqlite3~/.screenpipe/db.sqlite "SELECT DISTINCT app_name, window_name FROMocr_text WHERE window_name LIKE "%Boosteroid%' OR window_name LIKE'%boosteroid%' OR app_name LIKE '%Boosteroid%' OR app_name LIKE'%Chrome%' OR app_name LIKE '%Firefox%' OR app_name LIKE '%Arc%' ORapp_name LIKE '%Brave%' OR app_name LIKE '%Vivaldi%' LIMIT 50;"lUKas@LUKas-Kovalks-Macbook-rro-diminny ~ y solltes~/.screenpipe/db.sqlite "SELECT DISTINCT app_name FROM ocr_text LIMIT50;"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~$The DB is completely empty — no OCR data at all. This means Screenpipe isn't recordinganything currently, or the DB you're querying is not the active one.Check a few things:1. Is Screenpipe actually running?Dasnpgrep -la screenpipe2. Is this the right DB?bash1s -1h ~/. screenpipe/db.sqlite# Check if there are other DB filesfind ~ -name "db.sqlite" 2>/dev/nu1l3. Check DB size — if it's tiny, it's empty:bashdu -sh ~/. screenpipe/db.sqlite4. Check frames table too:bashsqlite3 ~/.screenpipe/db.sqlite "SELECT COUNT(*) FROM frames;"If Screenpipe is running but the DB is empty, it may be writing to a different location than~/. screenpipe/. The config path on your work Mac might differ from the personal one.E О*Reply...+sonnet 46v…Lukas kovalkclaude is Al and can make mistakes. rlease double-cneck responses...
|
NULL
|
229858165067858727
|
NULL
|
click
|
ocr
|
NULL
|
ClaudeEditViewWindowHelp• Not Secure | [URL_WITH_C ClaudeEditViewWindowHelp• Not Secure | [URL_WITH_CREDENTIALS] ~ $ sqlite3~/.screenpipe/db.sqlite "SELECT DISTINCT app_name, window_name FROMocr_text WHERE window_name LIKE "%Boosteroid%' OR window_name LIKE'%boosteroid%' OR app_name LIKE '%Boosteroid%' OR app_name LIKE'%Chrome%' OR app_name LIKE '%Firefox%' OR app_name LIKE '%Arc%' ORapp_name LIKE '%Brave%' OR app_name LIKE '%Vivaldi%' LIMIT 50;"lUKas@LUKas-Kovalks-Macbook-rro-diminny ~ y solltes~/.screenpipe/db.sqlite "SELECT DISTINCT app_name FROM ocr_text LIMIT50;"lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~$The DB is completely empty — no OCR data at all. This means Screenpipe isn't recordinganything currently, or the DB you're querying is not the active one.Check a few things:1. Is Screenpipe actually running?Dasnpgrep -la screenpipe2. Is this the right DB?bash1s -1h ~/. screenpipe/db.sqlite# Check if there are other DB filesfind ~ -name "db.sqlite" 2>/dev/nu1l3. Check DB size — if it's tiny, it's empty:bashdu -sh ~/. screenpipe/db.sqlite4. Check frames table too:bashsqlite3 ~/.screenpipe/db.sqlite "SELECT COUNT(*) FROM frames;"If Screenpipe is running but the DB is empty, it may be writing to a different location than~/. screenpipe/. The config path on your work Mac might differ from the personal one.E О*Reply...+sonnet 46v…Lukas kovalkclaude is Al and can make mistakes. rlease double-cneck responses...
|
39405
|
|
41089
|
873
|
84
|
2026-04-17T06:01:24.286233+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776405684286_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelp, 0hihlA100% C•Fri 17 Apr 9:01:23jiminny.sentry.io/organizations/jiminny/issues/6873095751/?environment=production&environment=production-eu&project=82419- Platform Sprint 2 Q2 - Platform TeccllAcID: 26d2294b13 hours ago | JSONJump to: HighlightsStack TraceTraceCantoyt( GitHub# Jira[SRD-6793] Les Mills activity type:FeedAcuIvilyNew Tabssuesv Stack Trace© DisplayCopy asvAdo a comment..Errors & OutagesSymfony|Component|Debugle *+ New TabBreached MetricsSymfony Component Debua Exception FatalThrowableErronLeague\Flysystem\Filesystem: :has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218mechanismdener5 months agoexplore08DashboardswalmailnesUser FeedbackCrashed in non-app:/vendor/league/fiysystem/src/Filesystem.php in League\Flysystem\Filesystem.hasaop/Jobs/automatearepors/senareporJob.ong.ou 1n Jiminny.joos automacearepons.senareooroo.nanaleAll ViewsmisigtieI):ConfigureAicilssssraun = sautonarecredortsservce-pcetrecaraui sredort.SettingsI/ Verify the file exists in S3if (! Storage::disk('client-data-cloud')->exists($s3Path) ) {Slogger-›error(self::LOG_PREFIX.Report file not found in S3',luund => sthis->revortuuzd.soraln ossrdth,841):automatedReportsSerObject Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsServicejobDispatcherObject Jiminny\Jobs\JobDispatcherloggerObject Illuminate\Log\LogManagerCalled from: /vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php in Illuminate\Container\BoundMethod:Illuminate\Container\(closure)/app/Queue/Worker/Worker.php:72 in Jiminny\Queue\Worker\Worker:processCalled trom:/vendor/arave/tramework/src/uminate/Queue/worker.oho inuminate @ueue Worker.run.JooTrace Preview222hr1 hidden span, 12 hidden issuesC Error - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (iCe Error - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (jCP Error - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (j@ Error - League\Flysystem\Filesystem:has0: Argument #1 (Slocation) must be of type string, null given, called in /home/jiminn|Qe Error - SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '749-003SZ00000kiWwBYAU' for key'contacts_/de Error - [MatchActivitiesToNewOpportunitv) Cannot find opportunity with ID: 20530935 Jiminnv Exceptions\InvalidAraumentEv Tagscorrelation_idenvironmenthandledlaravel_versionlevelmecnanasilld8fe2b34-1f65-47dd-9f3a-f6cd4b33924aproductionregionreleaserunuimle- nallleserver_halleus-east-2872394php 8.3.30(**)build12.54.71errongenertcLinux 6.1.141-155.222.amzn2023.aarch64#1 SMP Tue Jun 17 10:29:19 UTC 2025Linux669ca8d9602dLKShow 1 more frameIn AooMarked as ungoingaulomatically oy sentrkedresseeby sentry in 10//15keso veooy Martin PetkovView 3 morev reopeMP INpartcipatingSOBSIKINVieweel•monuns aoo5 months agoSimilar IssuesViewMerged IssuesvlewShow 14 more tramesIn AppShow 17 more tramesView Full TracecustomAnolicationCllentother...
|
NULL
|
1778401914167608974
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindowHelp, 0hihlA100% C•Fri 17 Apr 9:01:23jiminny.sentry.io/organizations/jiminny/issues/6873095751/?environment=production&environment=production-eu&project=82419- Platform Sprint 2 Q2 - Platform TeccllAcID: 26d2294b13 hours ago | JSONJump to: HighlightsStack TraceTraceCantoyt( GitHub# Jira[SRD-6793] Les Mills activity type:FeedAcuIvilyNew Tabssuesv Stack Trace© DisplayCopy asvAdo a comment..Errors & OutagesSymfony|Component|Debugle *+ New TabBreached MetricsSymfony Component Debua Exception FatalThrowableErronLeague\Flysystem\Filesystem: :has(): Argument #1 ($location) must be of type string, null given, called in /home/jiminny/vendor/laravel/framework/src/Illuminate/Filesystem/FilesystemAdapter.php on line 218mechanismdener5 months agoexplore08DashboardswalmailnesUser FeedbackCrashed in non-app:/vendor/league/fiysystem/src/Filesystem.php in League\Flysystem\Filesystem.hasaop/Jobs/automatearepors/senareporJob.ong.ou 1n Jiminny.joos automacearepons.senareooroo.nanaleAll ViewsmisigtieI):ConfigureAicilssssraun = sautonarecredortsservce-pcetrecaraui sredort.SettingsI/ Verify the file exists in S3if (! Storage::disk('client-data-cloud')->exists($s3Path) ) {Slogger-›error(self::LOG_PREFIX.Report file not found in S3',luund => sthis->revortuuzd.soraln ossrdth,841):automatedReportsSerObject Jiminny\Services\Kiosk\AutomatedReports\AutomatedReportsServicejobDispatcherObject Jiminny\Jobs\JobDispatcherloggerObject Illuminate\Log\LogManagerCalled from: /vendor/laravel/framework/src/Illuminate/Container/BoundMethod.php in Illuminate\Container\BoundMethod:Illuminate\Container\(closure)/app/Queue/Worker/Worker.php:72 in Jiminny\Queue\Worker\Worker:processCalled trom:/vendor/arave/tramework/src/uminate/Queue/worker.oho inuminate @ueue Worker.run.JooTrace Preview222hr1 hidden span, 12 hidden issuesC Error - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (iCe Error - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (jCP Error - SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (j@ Error - League\Flysystem\Filesystem:has0: Argument #1 (Slocation) must be of type string, null given, called in /home/jiminn|Qe Error - SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '749-003SZ00000kiWwBYAU' for key'contacts_/de Error - [MatchActivitiesToNewOpportunitv) Cannot find opportunity with ID: 20530935 Jiminnv Exceptions\InvalidAraumentEv Tagscorrelation_idenvironmenthandledlaravel_versionlevelmecnanasilld8fe2b34-1f65-47dd-9f3a-f6cd4b33924aproductionregionreleaserunuimle- nallleserver_halleus-east-2872394php 8.3.30(**)build12.54.71errongenertcLinux 6.1.141-155.222.amzn2023.aarch64#1 SMP Tue Jun 17 10:29:19 UTC 2025Linux669ca8d9602dLKShow 1 more frameIn AooMarked as ungoingaulomatically oy sentrkedresseeby sentry in 10//15keso veooy Martin PetkovView 3 morev reopeMP INpartcipatingSOBSIKINVieweel•monuns aoo5 months agoSimilar IssuesViewMerged IssuesvlewShow 14 more tramesIn AppShow 17 more tramesView Full TracecustomAnolicationCllentother...
|
41088
|
|
41389
|
878
|
84
|
2026-04-17T06:12:27.462221+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776406347462_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Firefox FileEdit View History Bookmarks Profiles Firefox FileEdit View History Bookmarks Profiles•.••<→ cTools Window Help• signin.aws.amazon.com/switchrole?roleName=Production_View_Only&account=jiminnyPlatform Sprint 2 Q2 - Platform Teaws+ [SRD-6793] Les Mills activity type:New Tabs) Symfony\Component\Debug\ExcerE New TabNew TabCloudWatch | us-east-2Z Configure SSH access to multipleAmazon Web Services Switch i X+ New labMOA 10%9 8 Fi17Apr 9:12:27English ySwitch RoleSwitching roles enables you to manage resources across Amazon Web Services accounts using a single user. When you switch roles, youermissions assigned to the new role. When you exit the role, you give up those permissions and get your originalpermissions back. Learn more [?Account IuThe 12-diait account number or the alias of the account in which the role exists.jiminnyIAM role nameThe name of the role that you want to assume which can be found at the end of the role's ARN. For example, provide the TestRole rolename from the following role ARN: arn:aws:iam:: 123456789012:role/TestRole.Production_View_UnlyDisplay name - optionalThis name will appear in the console navigation bar when active. Choose a name to help identify the permission set assigned to the role.PRODDisplay color - optionalThe selected color displays in the console navigation when this role is activeO None• NoneSt RedCancelSwitch RoleOrangeYellow• Greenblue© 2026, Amazon Web Services, Inc. or its affiliates.Privacylerms...
|
NULL
|
-4796050014765893027
|
NULL
|
click
|
ocr
|
NULL
|
Firefox FileEdit View History Bookmarks Profiles Firefox FileEdit View History Bookmarks Profiles•.••<→ cTools Window Help• signin.aws.amazon.com/switchrole?roleName=Production_View_Only&account=jiminnyPlatform Sprint 2 Q2 - Platform Teaws+ [SRD-6793] Les Mills activity type:New Tabs) Symfony\Component\Debug\ExcerE New TabNew TabCloudWatch | us-east-2Z Configure SSH access to multipleAmazon Web Services Switch i X+ New labMOA 10%9 8 Fi17Apr 9:12:27English ySwitch RoleSwitching roles enables you to manage resources across Amazon Web Services accounts using a single user. When you switch roles, youermissions assigned to the new role. When you exit the role, you give up those permissions and get your originalpermissions back. Learn more [?Account IuThe 12-diait account number or the alias of the account in which the role exists.jiminnyIAM role nameThe name of the role that you want to assume which can be found at the end of the role's ARN. For example, provide the TestRole rolename from the following role ARN: arn:aws:iam:: 123456789012:role/TestRole.Production_View_UnlyDisplay name - optionalThis name will appear in the console navigation bar when active. Choose a name to help identify the permission set assigned to the role.PRODDisplay color - optionalThe selected color displays in the console navigation when this role is activeO None• NoneSt RedCancelSwitch RoleOrangeYellow• Greenblue© 2026, Amazon Web Services, Inc. or its affiliates.Privacylerms...
|
41387
|
|
41556
|
880
|
84
|
2026-04-17T06:16:44.661236+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776406604661_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorToo PhpStormFileEditViewNavigateCodeLaravelRefactorToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-jiminny kProjectvM+ README.mdg sonar-project.properties= test.py4> Untited Diagram.Xmius vetur.config.is© AutomatedReportsService.php© SendReportJob.php© ReportController.phpTokenBuilder.phpc leamsetuocontroller.ongpnp apl.onoFilesystem.php© AutomatedReportsCommand.php© AskJiminnyReportsController.php© AutomatedReportsCommandTest.php© AutomatedReportsSendCommand.php© Team.phpC AutomatedReportsRepository.php(c CrealenelaAcuiviyevent.onoM+ WEBHOOK_FILTERING_IMPLEe) Track?rovidernstalled-vent.onoih External LibrariesE® Scratches and Consoles~ D Database Consolesv AEUA console [EU]C DEAL RISKS EUI& DI LEUJ42UFU1& fiminny@localnost© CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© RequestGenerateAskJiminnyReportJob.phpRequestGeneratekeportJob.ong© AutomatedReportResult.phpc) AutomatedRenort.onn1.08.25 Nikolovclass AutomatedReportResult extends Mor in11.09.25public function getPdfUrl(): ?stringllUs.Lo INIKOlOreturn Sresponselpdt urc' ?? nuuli11.09.25 Nikolov11.09.25 Nikolov© AutomatedReportsCallbackService.php0/4375console iminny alocallA DI [jiminny@localhost]3 usages570571572-57357457510/0577A8 X1 X1 A Y 578579580581-582583A HS_local [jiminny@local4 SF [jiminny@localhost]A zoho_dev [jiminny@locaV L PRODA console [PROD]A console_1 [PROD]A DI [PROD]11.09.25 Nikolov11.09.25 Nikolov11.09.25 Nikolov11.09.25 Nikolov11.09.25 Nikolov11.09.25 Nikolov1.08.25 NikolovJo0377public function getPodcastAudioUrL(): ?stringhos v$response = $this->getResponse);return $response['podcast_audio_url'] ?? null;100% C•Fri 17 Apr 9:16:44ServicesOutputfi jiminny.automated_report.results Xv D Database1 rowvV AEU50,0s consolev A jiminny@localhost4 SFA HS_localV A PROD4 console 1 s 194 msV A STAGINGA consoley Docker, 0lablAAutomatedReportsCommandTest-= custom.logElaravel.logA SF [jiminny@localhost]V connect.vueV Onboard.vueA HS_local [jiminny@localhost]< console EUiconsole Probconsole SlAGINGCascadeFixing Sentry Error in SSo?IX: AUTO VMlaycroundvMa lminny vCONCAT(U.id, CASE WHEN U.id = t.owner_id THEN ' (owner)' ELSE "' END) AS US' ] 032 A1 A31 X61 ~u.email,sa.*,Towner 1o rkur socar accounts saJulr users u on uro = sa.soclaote 70JOIN teams tI.ns">l on c.10 = U.ceall 10WHERE U. team_id = 581 and sa.provider = 'salesferce':Review this sentry error Symfony|Component|Debug\Exception|FatalThrowableErrorcvellls loldlwLevel. ErronLeague|Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called innome minny vendorlaraveltramework/sre/muminaterllesystem/rllesystemadagter.one on line 210INOuncolneapesoos aulomaleanepons/senekeponJoo.ono inJiminny Joos Aulomaleckegors senareporvoo.nanale. osenareportsod.onoSELECT * FROM automated_report_results order by id desc;select * from features;select * from team_features where feature_id = 40;Letme look al ooun tles lo understane tne issueselect * tron reans where 1o = 5501Read SendReportJob.php and AutomatedReportsService.php>Now let me find the getMediaPath method:select * from automated_report_resulus order by no desc,SELECT * FROM automated_report_results WHERE uuid_to_bin('822fa41b-afd3-43a9-a248-86b0e36f3131') = uuid;Exoloree Auromaleckeporsoervice.ono ana searchea celmealaraln›SELECT * FROM automated_report_results WHERE id = 1919;1file +9 >Reject allAccept allAsk anything (&4L)+ @ CodelClaude Sonnet 4.6® :x: Auto vFQEEAO0 id1872wuid (UUID with time-low and time-high swapped)822fa41b-afd3-43a9-a248-86b0e36f3131report_idnameCoaching Profiles - 6 - 12 Apr 2026 - Client Success, UK SalesI media_typepdfparent_idI statusI reasonpayloadI responseI requested_atgenerated_atI sent_atI created_atI updated_at2026-04-13 01:00:272026-04-13 01:11:48f("team_id":1, "request_id": "822fa41b-afd3-43a9-a248-86b0e36f3131", "report_type":"coaching_profiles", "media_types": ["pdf", "podcast"], "from_date": "2026-04-06T00:00:00+00:00", "to_date" : "2026-04-12T23:59:59+00:00", "group_ids" : [91,2],"("request d":"822Fa41b-af03-439-248-86b03673131","status".;"completed", "tinestanp": "2026-04-13T01:21:48.648399-00:00", "S3U": "S3: VV/jininny.cLzent-dataV/f0f 4[PHONE]-8f69-93429a84070b V/reports\/822Fa4ab-aFd3-43a9 -a248-86B2026-04-13 01:00:572026-04-13 01:11:481 row retrieved starting from 1 in 488 ms (execution: 152 ms, fetching: 336 ms)SUM: 0 10:1 W Windsurf Teams585:36UTF-84 spaces...
|
NULL
|
-3373301372918130856
|
NULL
|
visual_change
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorToo PhpStormFileEditViewNavigateCodeLaravelRefactorToolsWindowHelpFV faVsco.s v#11894 on JY-18909-automated-reports-ask-jiminny kProjectvM+ README.mdg sonar-project.properties= test.py4> Untited Diagram.Xmius vetur.config.is© AutomatedReportsService.php© SendReportJob.php© ReportController.phpTokenBuilder.phpc leamsetuocontroller.ongpnp apl.onoFilesystem.php© AutomatedReportsCommand.php© AskJiminnyReportsController.php© AutomatedReportsCommandTest.php© AutomatedReportsSendCommand.php© Team.phpC AutomatedReportsRepository.php(c CrealenelaAcuiviyevent.onoM+ WEBHOOK_FILTERING_IMPLEe) Track?rovidernstalled-vent.onoih External LibrariesE® Scratches and Consoles~ D Database Consolesv AEUA console [EU]C DEAL RISKS EUI& DI LEUJ42UFU1& fiminny@localnost© CreateActivityLoggedEvent.php© UserPilotActivityListener.php© ActivityLogged.php© RequestGenerateAskJiminnyReportJob.phpRequestGeneratekeportJob.ong© AutomatedReportResult.phpc) AutomatedRenort.onn1.08.25 Nikolovclass AutomatedReportResult extends Mor in11.09.25public function getPdfUrl(): ?stringllUs.Lo INIKOlOreturn Sresponselpdt urc' ?? nuuli11.09.25 Nikolov11.09.25 Nikolov© AutomatedReportsCallbackService.php0/4375console iminny alocallA DI [jiminny@localhost]3 usages570571572-57357457510/0577A8 X1 X1 A Y 578579580581-582583A HS_local [jiminny@local4 SF [jiminny@localhost]A zoho_dev [jiminny@locaV L PRODA console [PROD]A console_1 [PROD]A DI [PROD]11.09.25 Nikolov11.09.25 Nikolov11.09.25 Nikolov11.09.25 Nikolov11.09.25 Nikolov11.09.25 Nikolov1.08.25 NikolovJo0377public function getPodcastAudioUrL(): ?stringhos v$response = $this->getResponse);return $response['podcast_audio_url'] ?? null;100% C•Fri 17 Apr 9:16:44ServicesOutputfi jiminny.automated_report.results Xv D Database1 rowvV AEU50,0s consolev A jiminny@localhost4 SFA HS_localV A PROD4 console 1 s 194 msV A STAGINGA consoley Docker, 0lablAAutomatedReportsCommandTest-= custom.logElaravel.logA SF [jiminny@localhost]V connect.vueV Onboard.vueA HS_local [jiminny@localhost]< console EUiconsole Probconsole SlAGINGCascadeFixing Sentry Error in SSo?IX: AUTO VMlaycroundvMa lminny vCONCAT(U.id, CASE WHEN U.id = t.owner_id THEN ' (owner)' ELSE "' END) AS US' ] 032 A1 A31 X61 ~u.email,sa.*,Towner 1o rkur socar accounts saJulr users u on uro = sa.soclaote 70JOIN teams tI.ns">l on c.10 = U.ceall 10WHERE U. team_id = 581 and sa.provider = 'salesferce':Review this sentry error Symfony|Component|Debug\Exception|FatalThrowableErrorcvellls loldlwLevel. ErronLeague|Flysystem\Filesystem::has(): Argument #1 ($location) must be of type string, null given, called innome minny vendorlaraveltramework/sre/muminaterllesystem/rllesystemadagter.one on line 210INOuncolneapesoos aulomaleanepons/senekeponJoo.ono inJiminny Joos Aulomaleckegors senareporvoo.nanale. osenareportsod.onoSELECT * FROM automated_report_results order by id desc;select * from features;select * from team_features where feature_id = 40;Letme look al ooun tles lo understane tne issueselect * tron reans where 1o = 5501Read SendReportJob.php and AutomatedReportsService.php>Now let me find the getMediaPath method:select * from automated_report_resulus order by no desc,SELECT * FROM automated_report_results WHERE uuid_to_bin('822fa41b-afd3-43a9-a248-86b0e36f3131') = uuid;Exoloree Auromaleckeporsoervice.ono ana searchea celmealaraln›SELECT * FROM automated_report_results WHERE id = 1919;1file +9 >Reject allAccept allAsk anything (&4L)+ @ CodelClaude Sonnet 4.6® :x: Auto vFQEEAO0 id1872wuid (UUID with time-low and time-high swapped)822fa41b-afd3-43a9-a248-86b0e36f3131report_idnameCoaching Profiles - 6 - 12 Apr 2026 - Client Success, UK SalesI media_typepdfparent_idI statusI reasonpayloadI responseI requested_atgenerated_atI sent_atI created_atI updated_at2026-04-13 01:00:272026-04-13 01:11:48f("team_id":1, "request_id": "822fa41b-afd3-43a9-a248-86b0e36f3131", "report_type":"coaching_profiles", "media_types": ["pdf", "podcast"], "from_date": "2026-04-06T00:00:00+00:00", "to_date" : "2026-04-12T23:59:59+00:00", "group_ids" : [91,2],"("request d":"822Fa41b-af03-439-248-86b03673131","status".;"completed", "tinestanp": "2026-04-13T01:21:48.648399-00:00", "S3U": "S3: VV/jininny.cLzent-dataV/f0f 4[PHONE]-8f69-93429a84070b V/reports\/822Fa4ab-aFd3-43a9 -a248-86B2026-04-13 01:00:572026-04-13 01:11:481 row retrieved starting from 1 in 488 ms (execution: 152 ms, fetching: 336 ms)SUM: 0 10:1 W Windsurf Teams585:36UTF-84 spaces...
|
41554
|
|
41575
|
879
|
84
|
2026-04-17T06:17:26.733463+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776406646733_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRu PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpEU (ssh)DOCKERDEV (-zsh)О 882APP (-zsh)883-zshXI11 DOCKER (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/infrastructure/dev/docker or its parentsPoetry could not find a pyproject.toml/docker or its parentsin /Users/lukas/jiminny/infrastructure/dev(all* Review screenpipe U...100% 1478Fri 17 Apr 9:17:26181*4-zsh®О885PROD (ssh)Run 'do-release-upgrade' to upgrade to it.•*6-zshPRODlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/infrastructure/dev/docker (develop)$Lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/infrastructure/dev/docker (develop)$ 0*** System restart required ***Last login: Thu Apr 16 06:55:09 2026 from 212.39.71.189lukas@jiminny-prod-bastion:~$X L3 EU (ssh)New release '24.04.4 LTS' available.Run'do-release-upgrade'to upgrade to it.U*** System restart required ***login: Thu Apr 16 06:55:03 2026 from 212.39.71.189lukas@jiminny-eu-bastion:~$ |T4 STAGE (-zsh)Last login: Thu Apr 16 15:43:43 on consolePoetry could not find a pyproject.toml file in /Users/lukas or its parentsSTAGEPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny$T5 QA (-zsh)Last login: Thu Apr 16 15:43:43 on consolePoetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.tomlfile in /Users/lukas or its parentsXT6 FE (-zsh)Last login: Thu Apr 16 15:48:07 on ttys004Poetry could not find a pyproject.toml file in /Users/lukas or its parents RONTENDPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ IX T7 EXT (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas or its parentsEXTENSIONPoetry could not find a pyproject.tomlfile in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ I|...
|
NULL
|
-4752024793246044444
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormFileEditViewNavigateCodeLaravelRefactorRu PhpStormFileEditViewNavigateCodeLaravelRefactorRunToolsGitWindowHelpEU (ssh)DOCKERDEV (-zsh)О 882APP (-zsh)883-zshXI11 DOCKER (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas/jiminny/infrastructure/dev/docker or its parentsPoetry could not find a pyproject.toml/docker or its parentsin /Users/lukas/jiminny/infrastructure/dev(all* Review screenpipe U...100% 1478Fri 17 Apr 9:17:26181*4-zsh®О885PROD (ssh)Run 'do-release-upgrade' to upgrade to it.•*6-zshPRODlukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/infrastructure/dev/docker (develop)$Lukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~/jiminny/infrastructure/dev/docker (develop)$ 0*** System restart required ***Last login: Thu Apr 16 06:55:09 2026 from 212.39.71.189lukas@jiminny-prod-bastion:~$X L3 EU (ssh)New release '24.04.4 LTS' available.Run'do-release-upgrade'to upgrade to it.U*** System restart required ***login: Thu Apr 16 06:55:03 2026 from 212.39.71.189lukas@jiminny-eu-bastion:~$ |T4 STAGE (-zsh)Last login: Thu Apr 16 15:43:43 on consolePoetry could not find a pyproject.toml file in /Users/lukas or its parentsSTAGEPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny$T5 QA (-zsh)Last login: Thu Apr 16 15:43:43 on consolePoetry could not find a pyproject.toml file in /Users/lukas or its parentsPoetry could not find a pyproject.tomlfile in /Users/lukas or its parentsXT6 FE (-zsh)Last login: Thu Apr 16 15:48:07 on ttys004Poetry could not find a pyproject.toml file in /Users/lukas or its parents RONTENDPoetry could not find a pyproject.toml file in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ IX T7 EXT (-zsh)Poetry could not find a pyproject.toml file in /Users/lukas or its parentsEXTENSIONPoetry could not find a pyproject.tomlfile in /Users/lukas or its parentslukas@Lukas-Kovaliks-MacBook-Pro-Jiminny ~ $ I|...
|
41573
|
|
43822
|
928
|
84
|
2026-04-17T08:22:42.612798+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776414162612_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelpmeet.google.com/xpx-omah-rkn(ahlBackend Chapter • 8 m left100% 178 • Fri 17 Apr 11:22:426+llian Kyuchukov (Presenting, annotating)BraveViewProfilesHelp40trer ourine oraoroueueeeCloudWatch | us-east-2@ DEV Jiminnyhttps//us-east-2.console.aws.amazon.com/cloudwatch/home?regionsus-east-2#logsV2:logs-insightsS3FqueryDetallS3D-(enPROD EU JiminnyQ My PRS• Assigned• To Review@ Jminny Prophet W..3 Pipelines - jiminery-OJRAIOpenAl PlatformE3 Confluence(7 Service-Desk - Qu.Sentry@ AWSaws[Option+S) ©4United States (Ohie)Logs InsightsGeneral• Query definition info12hCustom (1d)CompewtSaved queriesQ Filter by query nomeQuery scopeProwtywrctonLog group nameSelect up to 50 log groupsBrowse: Log Groups Facets Lookup tables)410346195943E Show more chosen log groups (+1)fields @tinestanp, (nessage, @logStrean, @logatter essade ixeportalso:3304451 sort @tinestanp desc1linit 10000Clear allZ Query generatorQ FieldsSaved and sample queriesQuery commandsRun auerycandeWodote trvedoutervlSchedule query@ Completed. Query executed for 2 log grouptLogs (-)Patterns (-)VisualizationLogs (-)nvettonteÖ Share resultsExport resultsAdd to dashboard• CleanDB (14)|• CRM (14)|• Dialers (11)|• Integrations (2)• LiveCoach (5) |• Meetings (4)• Notetaker (4)|• Nudge (2)|• Ogi (5)• Processing team (6)• Prophet (3)|• RDS (4)• Recall (6)• Reports (4)• Tomov (4)Showing 0 of 0 records matched ©6,393,450 records (20 GB) scanned in 3.25 ₽ 1,990,488 records/s (626.0 MB/s),8882Hiannat trros - Cwu tBerdock - CWL +|Command Memory Usage - CwU +Conference Failure - CWL +®CoudsheFeedback© 2026, Amazon Web Services, Inc. or its affilates.PtvacyTerms• Q 8• Fri17 Apr 11:22[ All Bookmarksnt ID: 4103-4619-5943n.View_Only @ imLearn more 2JnVasil Vasilevllian KyuchukovMihail MihaylovNikolay NikolovCookde preferencesSetmsnshot2024-11_6.66.pngLukas Kovalik11:22 AM | Daily - Processing...
|
NULL
|
-6869199969904869157
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfilesToolsWi FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelpmeet.google.com/xpx-omah-rkn(ahlBackend Chapter • 8 m left100% 178 • Fri 17 Apr 11:22:426+llian Kyuchukov (Presenting, annotating)BraveViewProfilesHelp40trer ourine oraoroueueeeCloudWatch | us-east-2@ DEV Jiminnyhttps//us-east-2.console.aws.amazon.com/cloudwatch/home?regionsus-east-2#logsV2:logs-insightsS3FqueryDetallS3D-(enPROD EU JiminnyQ My PRS• Assigned• To Review@ Jminny Prophet W..3 Pipelines - jiminery-OJRAIOpenAl PlatformE3 Confluence(7 Service-Desk - Qu.Sentry@ AWSaws[Option+S) ©4United States (Ohie)Logs InsightsGeneral• Query definition info12hCustom (1d)CompewtSaved queriesQ Filter by query nomeQuery scopeProwtywrctonLog group nameSelect up to 50 log groupsBrowse: Log Groups Facets Lookup tables)410346195943E Show more chosen log groups (+1)fields @tinestanp, (nessage, @logStrean, @logatter essade ixeportalso:3304451 sort @tinestanp desc1linit 10000Clear allZ Query generatorQ FieldsSaved and sample queriesQuery commandsRun auerycandeWodote trvedoutervlSchedule query@ Completed. Query executed for 2 log grouptLogs (-)Patterns (-)VisualizationLogs (-)nvettonteÖ Share resultsExport resultsAdd to dashboard• CleanDB (14)|• CRM (14)|• Dialers (11)|• Integrations (2)• LiveCoach (5) |• Meetings (4)• Notetaker (4)|• Nudge (2)|• Ogi (5)• Processing team (6)• Prophet (3)|• RDS (4)• Recall (6)• Reports (4)• Tomov (4)Showing 0 of 0 records matched ©6,393,450 records (20 GB) scanned in 3.25 ₽ 1,990,488 records/s (626.0 MB/s),8882Hiannat trros - Cwu tBerdock - CWL +|Command Memory Usage - CwU +Conference Failure - CWL +®CoudsheFeedback© 2026, Amazon Web Services, Inc. or its affilates.PtvacyTerms• Q 8• Fri17 Apr 11:22[ All Bookmarksnt ID: 4103-4619-5943n.View_Only @ imLearn more 2JnVasil Vasilevllian KyuchukovMihail MihaylovNikolay NikolovCookde preferencesSetmsnshot2024-11_6.66.pngLukas Kovalik11:22 AM | Daily - Processing...
|
43820
|
|
44007
|
931
|
84
|
2026-04-17T08:29:29.406509+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776414569406_m1.jpg...
|
Firefox
|
Developers | HubSpot — Work
|
1
|
app.hubspot.com/developer/2752939/application/3848 app.hubspot.com/developer/2752939/application/38484/monitoring/webhooks?objectTypeIds=0-3&subscriptionTypes=deal.creation&subscriptionTypes=deal.propertyChange&subscriptionTypes=deal.associationChange...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Workers | Datadog
Developers | HubSpot
Developers Workers | Datadog
Developers | HubSpot
Developers | HubSpot
Close tab
Inbox (1,574) - [EMAIL] - Jiminny Mail
Inbox (1,574) - [EMAIL] - Jiminny Mail
Inbox (3,737) - [EMAIL] - Jiminny Mail
Inbox (3,737) - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
HubSpot logo
Find or Ask
⌘
K
Create new
Scroll up
Scroll down
Back to all apps
Back to all apps
Jiminny
Jiminny
Created by
Jiminny #127
Jiminny
#
127
Basic info
Basic info
Contact & support
Contact & support
Monitoring
Monitoring
Features
Features
CRM cards
CRM cards
UI extensions BETA
UI extensions
BETA
Timeline events
Timeline events
Webhooks
Webhooks
App settings
App settings
More features
More features
API calls
API calls
Webhooks
Webhooks
App settings
App settings
UI extensions BETA
UI extensions
BETA
Log traces BETA
Log traces
BETA
OAuth
OAuth
Filter by:
Deal Close
Deal
Close
deal.creation Close deal.propertyChange Close deal.associationChange Close
deal.creation
Close
deal.propertyChange
Close
deal.associationChange
Close
Status
Status
Start date
End date
04/12/2026
to
04/17/2026
Log ID
Log ID
Search by log ID
Export logs (CSV)
Export logs (CSV)
STATUS
SUBSCRIPTION TYPE
BATCH ID
ATTEMPT START
204
deal.associationChange
49845354-415a-461a-bc92-c5b62bb46ce0
April 17, 2026 4:26 AM EDT
204
deal.associationChange
e456953e-4034-4375-bb5c-3d81bbae99d5
April 17, 2026 4:26 AM EDT...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Workers | Datadog","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Developers | HubSpot","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Developers | HubSpot","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Inbox (1,574) - lukas.kovalik@jiminny.com - Jiminny Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox (1,574) - lukas.kovalik@jiminny.com - Jiminny Mail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Inbox (3,737) - integration-account@jiminny.com - Jiminny Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Inbox (3,737) - integration-account@jiminny.com - Jiminny Mail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"HubSpot logo","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextField","text":"Find or Ask","depth":11,"help_text":"","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"⌘","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"K","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Create new","depth":9,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Scroll up","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Scroll down","depth":9,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Back to all apps","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Back to all apps","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Jiminny","depth":10,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created by","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny #127","depth":10,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"127","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Basic info","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Basic info","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Contact & support","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Contact & support","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Monitoring","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Monitoring","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Features","depth":10,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Features","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"CRM cards","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"CRM cards","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UI extensions BETA","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"UI extensions","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BETA","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Timeline events","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Timeline events","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Webhooks","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Webhooks","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"App settings","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"App settings","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"More features","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More features","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"API calls","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"API calls","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Webhooks","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Webhooks","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"App settings","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"App settings","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"UI extensions BETA","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"UI extensions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BETA","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Log traces BETA","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Log traces","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BETA","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"OAuth","depth":12,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"OAuth","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Filter by:","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Deal Close","depth":12,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deal","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close","depth":16,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"deal.creation Close deal.propertyChange Close deal.associationChange Close","depth":12,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"deal.creation","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close","depth":16,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"deal.propertyChange","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close","depth":16,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"deal.associationChange","depth":21,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close","depth":16,"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Status","depth":12,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Start date","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"End date","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"04/12/2026","depth":12,"value":"04/12/2026","help_text":"","placeholder":"MM/DD/YYYY","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"to","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"04/17/2026","depth":12,"value":"04/17/2026","help_text":"","placeholder":"MM/DD/YYYY","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"Log ID","depth":12,"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Log ID","depth":18,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search by log ID","depth":12,"help_text":"","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Export logs (CSV)","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Export logs (CSV)","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"STATUS","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SUBSCRIPTION TYPE","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BATCH ID","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ATTEMPT START","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"204","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"deal.associationChange","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"49845354-415a-461a-bc92-c5b62bb46ce0","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"April 17, 2026 4:26 AM EDT","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"204","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"deal.associationChange","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"e456953e-4034-4375-bb5c-3d81bbae99d5","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"April 17, 2026 4:26 AM EDT","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
7902201284774468120
|
-7186191736429571955
|
visual_change
|
accessibility
|
NULL
|
Workers | Datadog
Developers | HubSpot
Developers Workers | Datadog
Developers | HubSpot
Developers | HubSpot
Close tab
Inbox (1,574) - [EMAIL] - Jiminny Mail
Inbox (1,574) - [EMAIL] - Jiminny Mail
Inbox (3,737) - [EMAIL] - Jiminny Mail
Inbox (3,737) - [EMAIL] - Jiminny Mail
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
HubSpot logo
Find or Ask
⌘
K
Create new
Scroll up
Scroll down
Back to all apps
Back to all apps
Jiminny
Jiminny
Created by
Jiminny #127
Jiminny
#
127
Basic info
Basic info
Contact & support
Contact & support
Monitoring
Monitoring
Features
Features
CRM cards
CRM cards
UI extensions BETA
UI extensions
BETA
Timeline events
Timeline events
Webhooks
Webhooks
App settings
App settings
More features
More features
API calls
API calls
Webhooks
Webhooks
App settings
App settings
UI extensions BETA
UI extensions
BETA
Log traces BETA
Log traces
BETA
OAuth
OAuth
Filter by:
Deal Close
Deal
Close
deal.creation Close deal.propertyChange Close deal.associationChange Close
deal.creation
Close
deal.propertyChange
Close
deal.associationChange
Close
Status
Status
Start date
End date
04/12/2026
to
04/17/2026
Log ID
Log ID
Search by log ID
Export logs (CSV)
Export logs (CSV)
STATUS
SUBSCRIPTION TYPE
BATCH ID
ATTEMPT START
204
deal.associationChange
49845354-415a-461a-bc92-c5b62bb46ce0
April 17, 2026 4:26 AM EDT
204
deal.associationChange
e456953e-4034-4375-bb5c-3d81bbae99d5
April 17, 2026 4:26 AM EDT...
|
NULL
|
|
44167
|
933
|
84
|
2026-04-17T08:34:50.536307+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776414890536_m1.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
+FirefoxFileEditViewHistoryBookmarksProfilesToolsW +FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp→meet.google.com/xpx-omah-rknllian Kyuchukov (Presenting, annotating)DBeaverFileNavigateSearchC* g so•à Database Navigutor Xai_Jopp|team|crmlocalhost 127.0.Q1:33064Prod EU VIEW Iocalhost75324 Prod EU WRITE locelhost:7532Prod ViEw localhost7632E3 Administer1 Prod WRITE localhost:783210Alocahost:7432#Staging + Planets 127.0.0,1:7732Help-0.8.9.aucrmatemolatEa Data7,594,349wuidNOЇK • 71ai team_id(ahlSupport Daily • in 3 h 26 m100% C8 • Fri 17 Apr 11:34:5040• • Q 8• Fri17Apr 11:34.Es aucim temo atesteacrm-temolatt alucim temolsteooportuntiesxcrm_configurati..r2scrm_confiquration, loi2s accountud9,794,5311as° stage_jd16,352© stage_updated.aa1record_type_k2026-04-17 07-50-373,706a tricaINNVasil Vasilevllian Kyuchukov• Files - General Xra bookiаrкяSy Dashboardsn DiaoramsEl Scripts4 Prod EU WRITE • jminny E opportunities0-+:°0ValueE Metadata X123 idi3 wuidwuidtas team_idteam_idwcimconcmeceriees3 account_jaccount_jddu stagelo stage.dUshuewotae ueeal crm provicrm.provider.cuseruser_idxs owner_id owner_idAl currency_ currency_code5559• ТурeCatalog NameO INTEGER UNSIG jiminny2 INTEGER UNSIG3 INTEGER UNSIGH4 INTEGER UNSIG)5 INTEGER UNSIG jmion7 INTEGER UNSIG)8 VARCHAR9 INTEGER UNSIG jiminn10 VARCHAR11 VARCHAR12 DECIMAL13P. Export data -EEST18Schema Name200Table NameopportunitiesVwwweconCeDortunsE1Maк LengthPrecision088888868888Scale J0BC TypeO INTEGERO INTEGERO NTEGERO INTEGERO TIMESTAVEO INTEGERo VARCHARO INTEGERO VARCHAROVAXCHАX2 DECIMALATMar1 rowis) fetched - 0.064s (0.001s fetchi, on 2026-04-17 at 10:50.38Mihail MihaylovNikolay Nikolov2024-11_6.56.pngLukas Kovalik11:34 AM | Daily - ProcessingW...
|
NULL
|
593790689858944413
|
NULL
|
click
|
ocr
|
NULL
|
+FirefoxFileEditViewHistoryBookmarksProfilesToolsW +FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelp→meet.google.com/xpx-omah-rknllian Kyuchukov (Presenting, annotating)DBeaverFileNavigateSearchC* g so•à Database Navigutor Xai_Jopp|team|crmlocalhost 127.0.Q1:33064Prod EU VIEW Iocalhost75324 Prod EU WRITE locelhost:7532Prod ViEw localhost7632E3 Administer1 Prod WRITE localhost:783210Alocahost:7432#Staging + Planets 127.0.0,1:7732Help-0.8.9.aucrmatemolatEa Data7,594,349wuidNOЇK • 71ai team_id(ahlSupport Daily • in 3 h 26 m100% C8 • Fri 17 Apr 11:34:5040• • Q 8• Fri17Apr 11:34.Es aucim temo atesteacrm-temolatt alucim temolsteooportuntiesxcrm_configurati..r2scrm_confiquration, loi2s accountud9,794,5311as° stage_jd16,352© stage_updated.aa1record_type_k2026-04-17 07-50-373,706a tricaINNVasil Vasilevllian Kyuchukov• Files - General Xra bookiаrкяSy Dashboardsn DiaoramsEl Scripts4 Prod EU WRITE • jminny E opportunities0-+:°0ValueE Metadata X123 idi3 wuidwuidtas team_idteam_idwcimconcmeceriees3 account_jaccount_jddu stagelo stage.dUshuewotae ueeal crm provicrm.provider.cuseruser_idxs owner_id owner_idAl currency_ currency_code5559• ТурeCatalog NameO INTEGER UNSIG jiminny2 INTEGER UNSIG3 INTEGER UNSIGH4 INTEGER UNSIG)5 INTEGER UNSIG jmion7 INTEGER UNSIG)8 VARCHAR9 INTEGER UNSIG jiminn10 VARCHAR11 VARCHAR12 DECIMAL13P. Export data -EEST18Schema Name200Table NameopportunitiesVwwweconCeDortunsE1Maк LengthPrecision088888868888Scale J0BC TypeO INTEGERO INTEGERO NTEGERO INTEGERO TIMESTAVEO INTEGERo VARCHARO INTEGERO VARCHAROVAXCHАX2 DECIMALATMar1 rowis) fetched - 0.064s (0.001s fetchi, on 2026-04-17 at 10:50.38Mihail MihaylovNikolay Nikolov2024-11_6.56.pngLukas Kovalik11:34 AM | Daily - ProcessingW...
|
NULL
|
|
45996
|
972
|
84
|
2026-04-17T10:15:38.972325+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776420938972_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
SlackFileEditViewHistoryWindowHelpQ Search Jiminny SlackFileEditViewHistoryWindowHelpQ Search Jiminny IncJiminny ...& jiminn... & 18DMs= Unreads@ Threads6 Huddles* Drafts & sent8 Directories• MessagesMore~Processing uploaded nie... complete.01AchivityEh External connectionsFiles# Starred8 jiminny-x-integrati...A platform-inner-teamMoreohannes# ai-chapter# alerts# backendconflicion-clnid# curiosity lab# engineering# frontendi# general# infra-changes# jiminny-bg# platform-tickets# product_launchesac random* releases# support# thank-yous# the people of jimi...•- Direct messages. Nikolav Nikolov3 Aneliya Angelova, .®. Galya Dimitrova lio Stoyan TanevC. Vasil Vasilev. Nikolay Ivanov®. Aneliya Angelovae VesR. Steliyan Georgiev# Apps# Jira CloudToastGoogle Cale...Cohort for Self-Integrations.Read more here: https://self-integration.getmembrane.com.Check out self-integrationmanifesto once in, if you'reinterested in the vision and whywe are working on thisReply or react a if you'reinterested - we're happy towalk you through it over a verySnoncallnYesterdavyLukas Kovalik *11:04 АМHi guys, we have one issue weusea to nave derore regarainginecutnorsarontor cono ckv.When the clients go through allsteps and login it just returnshim back to the login screen. Ibelieve this is the reference tothe previous conversationhttps://jiminny.slack.com/archives/CO7RAC4U86M/p1748957897141919. Could you please havea look if there is any change?e Lukas Kovalik1. There appears to be arecent change in thesok OAutn mecnanism.Wnen a new clientconnees to ine da.rormnusine cono, we neloneer receive a rromise(https://console.integration.app/ref/sdk/classes/IntegrationAccessor.html#openNewConnection)upon successful login.This functionality wasworking just a fewweeks ago.edlledThread inuminnv-x-integraton.app Jun sra. 2025 View message10 replies Last reply ...10 external people are fromMembraneMessage & jiminny-x-integration-...AaThreadMembrane Al Assistant APP Yesterday at 1:49 PMN Ah. I see now! You're reterring to the connection object neld in the arl responsenot wednook events. roure night- tneres deen a change trom ausconnectea toconnected in the APl response.Looking at your API response:• Old held: "disconnected": false• New field: |"connected" : trueThis is a breaking change that affects the logic you built around checkingconnection status. The boolean logic is also inverted ( disconnected: false =connection is active, while connected: true = connection is active).Let me escalate this to the team to confirm when this change was introduced andwhether both fields are temporarily supported during a transition period, or if youneed to update your code immediately to use the connected field instead ofdisconnected.I've escalated this to our engineering team to get clarification on the API change.They'll get back to you shortly with details about when this change was introducedand guidance on now to nandle it in your codeMembrane Al Assistant APP Yesterday at 2:26 PM• Good news! l've investigated the API change and here's what I found:Both fields are still returned - no breaking change!The API response now includes both:connected: true (new canonical field)disconnected: false (deprecated but still returned for backwardcomloa alolWhat happened:On April 3, 2026, we updated the platform to use (connected as the primary fieldinstead of disconnected for better code readability. However, to ensure backwardcompatibility, the API automatically derives and includes the disconnected field inall responses (di sconnected = !connected ).What this means for you:Your existing code using di sconnected will continue to work• No immediate code changes are requiredYou can migrate to using connected whenever convenientThe disconnected field is marked as deprecated but there's no removalameline announcedlWhen you do migrate, remember the logic is inverted:disconnected: false = connected: true (connection is active)(disconnected: true = [connected: false (connection needs re-authentication10 external people are from Membranemvou ook crine oav oae apove tnere s no c sconnecce so ts not packwarecompatible. Is there scenario where would receive disconnected instead ofconnected? Also can we revert the connection window back that was there before Iupgraded the connector? We don't want to show Connect via Membrane. |_ Also send to jiminny-x-integration-appAa, 50 ll{ Support Daily • in 1h 45 mA100% C4Fri 17 Apr 13:15:38AX Translate to English XnShareve and delete global picklisteM Object Query Language COQL¡ccess tne aoove cala Trom my Lono account.neleCLiв 0=xing your Zoho CRM accounting your Zoho CRM account...
|
NULL
|
4555856267864127276
|
NULL
|
visual_change
|
ocr
|
NULL
|
SlackFileEditViewHistoryWindowHelpQ Search Jiminny SlackFileEditViewHistoryWindowHelpQ Search Jiminny IncJiminny ...& jiminn... & 18DMs= Unreads@ Threads6 Huddles* Drafts & sent8 Directories• MessagesMore~Processing uploaded nie... complete.01AchivityEh External connectionsFiles# Starred8 jiminny-x-integrati...A platform-inner-teamMoreohannes# ai-chapter# alerts# backendconflicion-clnid# curiosity lab# engineering# frontendi# general# infra-changes# jiminny-bg# platform-tickets# product_launchesac random* releases# support# thank-yous# the people of jimi...•- Direct messages. Nikolav Nikolov3 Aneliya Angelova, .®. Galya Dimitrova lio Stoyan TanevC. Vasil Vasilev. Nikolay Ivanov®. Aneliya Angelovae VesR. Steliyan Georgiev# Apps# Jira CloudToastGoogle Cale...Cohort for Self-Integrations.Read more here: https://self-integration.getmembrane.com.Check out self-integrationmanifesto once in, if you'reinterested in the vision and whywe are working on thisReply or react a if you'reinterested - we're happy towalk you through it over a verySnoncallnYesterdavyLukas Kovalik *11:04 АМHi guys, we have one issue weusea to nave derore regarainginecutnorsarontor cono ckv.When the clients go through allsteps and login it just returnshim back to the login screen. Ibelieve this is the reference tothe previous conversationhttps://jiminny.slack.com/archives/CO7RAC4U86M/p1748957897141919. Could you please havea look if there is any change?e Lukas Kovalik1. There appears to be arecent change in thesok OAutn mecnanism.Wnen a new clientconnees to ine da.rormnusine cono, we neloneer receive a rromise(https://console.integration.app/ref/sdk/classes/IntegrationAccessor.html#openNewConnection)upon successful login.This functionality wasworking just a fewweeks ago.edlledThread inuminnv-x-integraton.app Jun sra. 2025 View message10 replies Last reply ...10 external people are fromMembraneMessage & jiminny-x-integration-...AaThreadMembrane Al Assistant APP Yesterday at 1:49 PMN Ah. I see now! You're reterring to the connection object neld in the arl responsenot wednook events. roure night- tneres deen a change trom ausconnectea toconnected in the APl response.Looking at your API response:• Old held: "disconnected": false• New field: |"connected" : trueThis is a breaking change that affects the logic you built around checkingconnection status. The boolean logic is also inverted ( disconnected: false =connection is active, while connected: true = connection is active).Let me escalate this to the team to confirm when this change was introduced andwhether both fields are temporarily supported during a transition period, or if youneed to update your code immediately to use the connected field instead ofdisconnected.I've escalated this to our engineering team to get clarification on the API change.They'll get back to you shortly with details about when this change was introducedand guidance on now to nandle it in your codeMembrane Al Assistant APP Yesterday at 2:26 PM• Good news! l've investigated the API change and here's what I found:Both fields are still returned - no breaking change!The API response now includes both:connected: true (new canonical field)disconnected: false (deprecated but still returned for backwardcomloa alolWhat happened:On April 3, 2026, we updated the platform to use (connected as the primary fieldinstead of disconnected for better code readability. However, to ensure backwardcompatibility, the API automatically derives and includes the disconnected field inall responses (di sconnected = !connected ).What this means for you:Your existing code using di sconnected will continue to work• No immediate code changes are requiredYou can migrate to using connected whenever convenientThe disconnected field is marked as deprecated but there's no removalameline announcedlWhen you do migrate, remember the logic is inverted:disconnected: false = connected: true (connection is active)(disconnected: true = [connected: false (connection needs re-authentication10 external people are from Membranemvou ook crine oav oae apove tnere s no c sconnecce so ts not packwarecompatible. Is there scenario where would receive disconnected instead ofconnected? Also can we revert the connection window back that was there before Iupgraded the connector? We don't want to show Connect via Membrane. |_ Also send to jiminny-x-integration-appAa, 50 ll{ Support Daily • in 1h 45 mA100% C4Fri 17 Apr 13:15:38AX Translate to English XnShareve and delete global picklisteM Object Query Language COQL¡ccess tne aoove cala Trom my Lono account.neleCLiв 0=xing your Zoho CRM accounting your Zoho CRM account...
|
NULL
|
|
46228
|
976
|
84
|
2026-04-17T10:26:02.964360+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776421562964_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProtiles...Tool FirefoxFileEoitViewHistoryBookmarksProtiles...ToolsWindow Help= app.dev.jiminny.com/onboardDevelopers | HubSpotM'inbox (1,575) - lukas.kovalike@fimin/M 120216 is your HubSpot Log In CodCa CloudWatch | eu-west-1New TabZ Configure SSH access to multiple. fix-cache-for-business-processes4 [JY-20692] Issue with reconnectir8 Jiminny+ New TabJIMINNYUpdate your informationGENERALTIMEZONEEurope/Sofia (UTC +03:00)LANGUAGES SPOKEN DURING CALLSDEFAULT SPOKEN LANGUAGEEnglish (United Kingdom)If the language isn't detected we'll default to this one• Add languageCONNECT/SYNC SETTINGSConnect Zoho CRMImport Calendar Meetings*:can ConnectedG Sign in with GoogleLet's Get Started! →Support Daily • in 1h 34mA100% CS•Fri 17 Apr 13:26:02Q Inspector• ConsoleD DebuggerNL Network() Style EditorP Filter Output( PerformanceErrors Warnings Info Logs Debug022 0CSsA Content-Security-Policy warningsChe totboning trertres: toh-37 784- 42947/p- 89/ artny to tz Vane 4, , , 2 2163the tosro) ing htrest//teis.intercomcdn.comO Content-Securi(Report-Only policy) TheRequestsonboate•Contesre urtty PollY (Repsra-0nm0312)0/23/Sbc S Betenis woua d bock the 2owoira oe ausesdurceVfolttes the fottosing directivet ont-s/la+Se175/56u4BHxg5wa/nn/X0B97sX7://A2Pbecausemimy.com/-Only policy)irective: *Sont-src self aective:[URL_WITH_CREDENTIALS] 6loLdTox 2 ии506 ск1А20к1 40e take con htepseneeevs becay-ceit oete th forcorch derective: "font-sre "self" httpa/icontent-securlty-rol1following directive: "font-src "self https:app.dev.jiminny.com https://app.dev.jiminny.com/ https:/Lis.intercomcdn.com*app.dev.jiminny.com https://app.dev.jliminny.com/ https://is.intercomcdn.com"content-securlty-rollcy(Report-Only policy) Thethe loading of afollowing directive: "font-src 'self' https:/Lapp.dev.jiminny.com https://app.dev.jiminny.com/ https:/Lis.intercomcdn.com*@ Content-Security-Policy: (Report-Only policy) The page's settings would block the loading of a resourceapo.cev.aminny.com nutos.apo.dev.aminny.com nitos:S.1nterconcan.com© Content-Security-Policy:(Report-Only policy)the loading of aLYLUAMOXC89YmC2D:Rone ikeyngecom Attecab2avV1 becauxecai/ aolatez the noloind directive:'self' https://aponboatefollowing directive:"font-src "self' https://app.dev.jiminny.com https://app.dev.jiminny.com/https:/Lis.in® Referrerpolicy "no-referrer-when-downgrade" for thecross-site request: https://cdn.logr-in.com/loqger-1.min.isLogget-tlciotoenv. Luokuekcl 1b nas a Talsy value = surina semocy strna>plugin-vue export-helper-DD3s5456.is:123:3974© [env] SENTRY_DSN has a falsy value = string <empty string›plugin-vue export-helper-DD3s5456.is:123:3974" Reterrer Pollov: lonorind the less restrlcted referrer poucy "no-reterrer-when-downarade" for the cross.Sate request.ntcos.wiacec.1ntercom.1o/wlocet naoxn/4r...
|
NULL
|
6068231049098979404
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProtiles...Tool FirefoxFileEoitViewHistoryBookmarksProtiles...ToolsWindow Help= app.dev.jiminny.com/onboardDevelopers | HubSpotM'inbox (1,575) - lukas.kovalike@fimin/M 120216 is your HubSpot Log In CodCa CloudWatch | eu-west-1New TabZ Configure SSH access to multiple. fix-cache-for-business-processes4 [JY-20692] Issue with reconnectir8 Jiminny+ New TabJIMINNYUpdate your informationGENERALTIMEZONEEurope/Sofia (UTC +03:00)LANGUAGES SPOKEN DURING CALLSDEFAULT SPOKEN LANGUAGEEnglish (United Kingdom)If the language isn't detected we'll default to this one• Add languageCONNECT/SYNC SETTINGSConnect Zoho CRMImport Calendar Meetings*:can ConnectedG Sign in with GoogleLet's Get Started! →Support Daily • in 1h 34mA100% CS•Fri 17 Apr 13:26:02Q Inspector• ConsoleD DebuggerNL Network() Style EditorP Filter Output( PerformanceErrors Warnings Info Logs Debug022 0CSsA Content-Security-Policy warningsChe totboning trertres: toh-37 784- 42947/p- 89/ artny to tz Vane 4, , , 2 2163the tosro) ing htrest//teis.intercomcdn.comO Content-Securi(Report-Only policy) TheRequestsonboate•Contesre urtty PollY (Repsra-0nm0312)0/23/Sbc S Betenis woua d bock the 2owoira oe ausesdurceVfolttes the fottosing directivet ont-s/la+Se175/56u4BHxg5wa/nn/X0B97sX7://A2Pbecausemimy.com/-Only policy)irective: *Sont-src self aective:[URL_WITH_CREDENTIALS] 6loLdTox 2 ии506 ск1А20к1 40e take con htepseneeevs becay-ceit oete th forcorch derective: "font-sre "self" httpa/icontent-securlty-rol1following directive: "font-src "self https:app.dev.jiminny.com https://app.dev.jiminny.com/ https:/Lis.intercomcdn.com*app.dev.jiminny.com https://app.dev.jliminny.com/ https://is.intercomcdn.com"content-securlty-rollcy(Report-Only policy) Thethe loading of afollowing directive: "font-src 'self' https:/Lapp.dev.jiminny.com https://app.dev.jiminny.com/ https:/Lis.intercomcdn.com*@ Content-Security-Policy: (Report-Only policy) The page's settings would block the loading of a resourceapo.cev.aminny.com nutos.apo.dev.aminny.com nitos:S.1nterconcan.com© Content-Security-Policy:(Report-Only policy)the loading of aLYLUAMOXC89YmC2D:Rone ikeyngecom Attecab2avV1 becauxecai/ aolatez the noloind directive:'self' https://aponboatefollowing directive:"font-src "self' https://app.dev.jiminny.com https://app.dev.jiminny.com/https:/Lis.in® Referrerpolicy "no-referrer-when-downgrade" for thecross-site request: https://cdn.logr-in.com/loqger-1.min.isLogget-tlciotoenv. Luokuekcl 1b nas a Talsy value = surina semocy strna>plugin-vue export-helper-DD3s5456.is:123:3974© [env] SENTRY_DSN has a falsy value = string <empty string›plugin-vue export-helper-DD3s5456.is:123:3974" Reterrer Pollov: lonorind the less restrlcted referrer poucy "no-reterrer-when-downarade" for the cross.Sate request.ntcos.wiacec.1ntercom.1o/wlocet naoxn/4r...
|
46227
|
|
46363
|
978
|
84
|
2026-04-17T10:30:50.347566+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776421850347_m2.jpg...
|
PhpStorm
|
faVsco.js – ~/jiminny/app/front-end/src/components faVsco.js – ~/jiminny/app/front-end/src/components/connect/connect.vue...
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Project: faVsco.js, menu
JY-20692-fix-integration- Project: faVsco.js, menu
JY-20692-fix-integration-app-[API_KEY], menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Show Replace Field
Search History
cachedStages
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
2/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Code changed:
Hide
Sync Changes
Hide This Notification
33
2
19
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot\ServiceTraits;
use Carbon\Carbon;
use HubSpot\Client\Crm\Deals\Model\CollectionResponseAssociatedId;
use Jiminny\Exceptions\InvalidArgumentException;
use Jiminny\Models\Account;
use Exception;
use Jiminny\Component\DealInsights\Forecast\Forecast;
use Jiminny\Jobs\Crm\MatchActivitiesToNewOpportunity;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\BusinessProcess;
use Jiminny\Exceptions\CrmException;
use Jiminny\Models\Opportunity;
use Illuminate\Support\Collection;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\CrmEntityRepository;
use Jiminny\Services\Crm\Hubspot\DealFieldsService;
use Jiminny\Services\Crm\Hubspot\OpportunitySyncStrategy\HubspotSingleSyncStrategy;
use Jiminny\Services\Crm\Hubspot\WebhookSyncBatchProcessor;
use Jiminny\Services\Crm\OpportunitySyncStrategyResolver;
use Jiminny\Utils\CurrencyFormatter;
/**
* Optimized sync methods for better performance
* These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains
*/
trait OpportunitySyncTrait
{
private const int BATCH_SIZE = 100;
private const int BATCH_PROCESS_SIZE = 800;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected DealFieldsService $dealFieldsService;
private ?array $cachedClosedDealStages = null;
private array $cachedBusinessProcesses = [];
private array $cachedStages = [];
public function syncOpportunities(array $parameters, ?string $strategy = null): int
{
$strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);
$parameters['config'] = $this->config;
$syncCount = 0;
$reportedTotal = 0;
$lastSyncedId = [];
try {
foreach ($strategies as $strategyName => $syncStrategy) {
$this->logger->info(
'[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .
$strategyName
);
$total = 0;
$lastId = null;
$buffer = [];
// HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies
foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {
$buffer[] = $hsOpportunity;
// process every 800 rows (fits < 1 000 association limit)
if (\count($buffer) >= self::BATCH_PROCESS_SIZE) {
$syncCount += $this->processOpportunityBatch($buffer);
$buffer = [];
}
}
// leftovers
if ($buffer) {
$syncCount += $this->processOpportunityBatch($buffer);
}
$reportedTotal += $total;
$lastSyncedId = $lastId;
}
} catch (\HubSpot\Client\Crm\Deals\ApiException | CrmException $e) {
$this->handleSyncException($e, $parameters);
}
$this->logger->info(
'[HubSpot] Synced opportunities',
[
'team' => $this->team->getId(),
'sync_count' => $syncCount,
'total' => $reportedTotal,
'last_synced_id' => $lastSyncedId,
]
);
return $reportedTotal;
}
private function handleSyncException(\Throwable $e, array $parameters): void
{
if (($parameters['since'] ?? null) instanceof Carbon) {
$parameters['since'] = $parameters['since']->toDateTimeString();
}
$parameters['config'] = $this->config->getId();
$this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [
'teamId' => $this->team->getUuid(),
'parameters' => $parameters,
'reason' => $e->getMessage(),
]);
}
/**
* @inheritdoc
*/
public function syncOpportunity(string $crmId): ?Opportunity
{
$strategy = $this->opportunitySyncStrategyResolver->resolve(
$this->config,
OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,
);
$parameters = [
'config' => $this->config,
'crm_id' => $crmId,
];
try {
if (! $strategy instanceof HubspotSingleSyncStrategy) {
throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');
}
$hsOpportunity = $strategy->fetchOpportunity($parameters);
} catch (\HubSpot\Client\Crm\Deals\ApiException $e) {
$this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [
'teamId' => $this->team->getUuid(),
'crmId' => $crmId,
'reason' => $e->getMessage(),
]);
return null;
}
$hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);
return $this->importOrUpdateOpportunity($hsOpportunity);
}
/**
* Process webhook-collected opportunity batches.
*
* Drains Redis sets containing company CRM IDs collected from webhook events
* and dispatches ImportOpportunityBatch jobs for batch processing.
*
* @return int Number of opportunity IDs dispatched to jobs
*/
public function batchSyncOpportunities(): int
{
$configId = $this->team->getCrmConfiguration()->getId();
return $this->batchProcessor->processBatchesForObjectType(
WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,
$configId
);
}
/**
* Import a batch of opportunities by their CRM IDs.
* Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().
*
* @param array<string> $crmIds HubSpot deal CRM IDs
*
* @return array{success: array, failed_ids: array, errors?: array<string, string>}
*/
public function importOpportunityBatchByIds(array $crmIds): array
{
$fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);
$allDeals = [];
foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {
$deals = $this->client->getOpportunitiesByIds($chunk, $fields);
foreach ($deals as $deal) {
$allDeals[] = $deal;
}
}
// IDs not returned by HubSpot are likely deleted or inaccessible deals.
// These are not failures — retrying won't bring them back.
$fetchedIds = array_map('strval', array_column($allDeals, 'id'));
$notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));
if (! empty($notFoundIds)) {
$this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [
'teamId' => $this->team->getId(),
'notFoundCount' => \count($notFoundIds),
'notFoundIds' => $notFoundIds,
'requestedCount' => \count($crmIds),
'fetchedCount' => \count($allDeals),
]);
}
if (empty($allDeals)) {
return ['success' => [], 'failed_ids' => []];
}
return $this->importOpportunityBatch($allDeals);
}
private function getClosedDealStages(): array
{
if ($this->cachedClosedDealStages !== null) {
return $this->cachedClosedDealStages;
}
$stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);
$data = [
'lost' => [],
'won' => [],
];
foreach ($stages as $stage) {
if ($stage->probability == 0.00) {
$data['lost'][] = $stage->crm_provider_id;
}
if ($stage->probability == 100.00) {
$data['won'][] = $stage->crm_provider_id;
}
}
$this->cachedClosedDealStages = $data;
return $data;
}
/**
* Import deals into the database with pre-fetched associations.
*
* API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT
* caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()
* where Laravel retries the whole job with backoff. After all retries exhausted,
* failed() requeues all IDs to Redis.
*
* The per-deal loop catches exceptions individually. A deal can end up in three states:
* - success: imported/updated successfully
* - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)
* These are permanent issues — retrying won't fix them.
* - skipped (null): missing dependencies (no account, unknown pipeline/stage).
* This is acceptable — the deal cannot be imported until those exist.
*/
private function importOpportunityBatch(array $deals): array
{
$syncedOpportunities = [
'success' => [],
'failed_ids' => [],
];
$dealIds = array_column($deals, 'id');
// Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the
// queue job retries the whole batch and eventually requeues all deal IDs back to Redis.
try {
$companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');
$contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');
$associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);
$existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(
$this->config,
array_map('strval', $dealIds)
);
$existingCrmIdSet = array_flip($existingCrmIds);
} catch (\Throwable $e) {
$this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [
'teamId' => $this->team->getId(),
'dealCount' => count($dealIds),
'error' => $e->getMessage(),
]);
throw $e;
}
foreach ($deals as $deal) {
try {
$deal['associations'] = $this->prepareAssociationsForOpportunity(
$deal['id'],
$companyAssociations,
$contactAssociations,
$associationsData
);
$syncedOpportunity = $this->importOrUpdateOpportunity(
$deal,
isset($existingCrmIdSet[(string) $deal['id']])
);
if ($syncedOpportunity) {
$syncedOpportunities['success'][] = $syncedOpportunity;
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [
'teamId' => $this->team->getId(),
'crmId' => $deal['id'],
'error' => $e->getMessage(),
]);
$syncedOpportunities['failed_ids'][] = $deal['id'];
$syncedOpportunities['errors'][$deal['id']] = $e->getMessage();
}
}
return $syncedOpportunities;
}
/**
* Prepare associated entities for opportunities with optimized batch processing
* Returns structured data with CRM ID to DB ID mappings for each opportunity
*/
private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array
{
// Step 1: Collect all unique company and contact IDs from associations
$allCompanyIds = $this->flattenAssociationIds($companyAssociations);
$allContactIds = $this->flattenAssociationIds($contactAssociations);
// Step 2: Batch sync missing entities and get CRM ID to DB ID mappings
$companyIdMappings = [];
$contactIdMappings = [];
if (! empty($allCompanyIds)) {
$companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);
}
if (! empty($allContactIds)) {
$contactIdMappings = $this->prepareAssociatedContacts($allContactIds);
}
return [
'company_id_mappings' => $companyIdMappings,
'contact_id_mappings' => $contactIdMappings,
];
}
/**
* Flatten association data to get unique IDs
*/
private function flattenAssociationIds(array $associations): array
{
$ids = [];
foreach ($associations as $dealAssociations) {
if (is_array($dealAssociations)) {
foreach ($dealAssociations as $id) {
$ids[$id] = true;
}
}
}
return array_keys($ids);
}
/**
* Batch sync missing accounts
*/
private function prepareAssociatedAccounts(array $companyIds): array
{
// Find which accounts already exist
$existingAccounts = $this->crmEntityRepository
->findAccountsByExternalIds($this->config, $companyIds);
$existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();
$existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {
return [$account->getCrmProviderId() => $account->getId()];
})->toArray();
$missingCompanyIds = array_diff($companyIds, $existingCompanyIds);
if (empty($missingCompanyIds)) {
return $existingAccountsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [
'teamId' => $this->team->getUuid(),
'total_companies' => count($companyIds),
'existing_companies' => count($existingCompanyIds),
'missing_companies' => count($missingCompanyIds),
]);
// we already have limit on opportunity ids count
// Initialize variable before try block
$syncedAccountsData = [];
try {
$syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [
'size' => count($missingCompanyIds),
'error' => $e->getMessage(),
]);
$syncedAccountsData = [];
}
return $existingAccountsData + $syncedAccountsData;
}
/**
* Prepare associated contacts - find existing and sync missing ones
* Returns mapping of CRM ID to DB ID
*/
private function prepareAssociatedContacts(array $contactIds): array
{
// Find which contacts already exist
$existingContacts = $this->crmEntityRepository
->findContactsByExternalIds($this->config, $contactIds);
$existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();
// Create mapping for existing contacts
$existingContactsData = $existingContacts->mapWithKeys(function ($contact) {
return [$contact->getCrmProviderId() => $contact->getId()];
})->toArray();
$missingContactIds = array_diff($contactIds, $existingContactIds);
if (empty($missingContactIds)) {
return $existingContactsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [
'teamId' => $this->team->getUuid(),
'total_contacts' => count($contactIds),
'existing_contacts' => count($existingContactIds),
'missing_contacts' => count($missingContactIds),
]);
// Sync missing contacts using batch API
try {
$syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [
'size' => count($missingContactIds),
'error' => $e->getMessage(),
]);
$syncedContactsData = [];
}
return $existingContactsData + $syncedContactsData;
}
private function batchSyncCrmObjects(string $objectType, array $crmIds): array
{
$syncObjects = [];
$crmObjectIds = array_values($crmIds);
foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {
try {
$objects = $objectType === 'companies' ?
$this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :
$this->client->getContactsByIds($chunk, $this->getContactFields());
foreach ($objects as $objectId => $objectData) {
$this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [
'requested_count' => count($chunk),
'synced_count' => count($objects),
]);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [
'ids' => $chunk,
'error' => $e->getMessage(),
]);
}
}
return $syncObjects;
}
private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void
{
try {
$object = $objectType === 'companies' ?
$this->importAccount($objectData) :
$this->importContact($objectData);
if ($object) {
$syncObjects[$object->getCrmProviderId()] = $object->getId();
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [
'id' => $objectId,
'error' => $e->getMessage(),
]);
}
}
/**
* Prepare associations for a single opportunity
*
* The return value is an array with the following structure:
* [
* 'companies' => [
* $companyCrmId => $companyId,
* ...
* ],
* 'contacts' => [
* $contactCrmId => $contactId,
* ...
* ],
* 'account_id' => $accountId,
* ]
*/
private function prepareAssociationsForOpportunity(
string $oppCrmId,
array $companyAssociations,
array $contactAssociations,
array $associationsData
): array {
$associations = [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
$oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];
foreach ($oppCompanyIds as $companyCrmId) {
if (isset($associationsData['company_id_mappings'][$companyCrmId])) {
$associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];
// Set primary account (first company becomes primary account)
if ($associations['account_id'] === null) {
$associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];
}
}
}
$oppContactIds = $contactAssociations[$oppCrmId] ?? [];
foreach ($oppContactIds as $contactCrmId) {
if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {
$associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];
}
}
return $associations;
}
/**
* Update only associations for an opportunity
*/
private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void
{
// Update contact associations
$this->importOpportunityContacts($opportunity, $associations['contacts']);
// Update company (account) associations
$this->updateOpportunityAccount($opportunity, $associations['account_id']);
}
/**
* Remove all contact associations from an opportunity
*/
private function removeAllOpportunityContacts(Opportunity $opportunity): void
{
$currentCount = (int) $opportunity->contacts()->count();
if ($currentCount > 0) {
$opportunity->contacts()->detach();
$this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_count' => $currentCount,
]);
}
}
private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void
{
if ($accountId === null) {
// No account ID provided - keep current account
return;
}
$currentAccountId = $opportunity->getAccountId();
// Only update if account has changed
if ($currentAccountId !== $accountId) {
$opportunity->account_id = $accountId;
$opportunity->save();
$this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [
'opportunity_id' => $opportunity->getId(),
'old_account_id' => $currentAccountId,
'new_account_id' => $accountId,
]);
}
}
/**
* Find existing opportunities by external IDs (OPTIMIZED VERSION)
* Uses batch query for better performance
*/
private function findExistingOpportunities(array $crmIds): Collection
{
return $this->crmEntityRepository
->findOpportunitiesByExternalIds($this->config, $crmIds);
}
private function processOpportunityBatch(array $opportunities): int
{
$syncedOpportunities = $this->importOpportunityBatch($opportunities);
return count($syncedOpportunities['success'] ?? []);
}
/**
* Convert single deal associations from HubSpot format to internal format
* Handles both HubSpot SDK objects and array formats
*
* @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed
*
* @return array Processed associations with DB IDs
*/
private function convertDealAssociations(array $opportunityAssociations): array
{
$associations = $this->initializeAssociationsStructure();
if (empty($opportunityAssociations)) {
return $associations;
}
$associationIds = $this->extractAssociationIds($opportunityAssociations);
$this->processCompanyAssociations($associationIds, $associations);
$this->processContactAssociations($associationIds, $associations);
return $associations;
}
private function initializeAssociationsStructure(): array
{
return [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
}
private function extractAssociationIds(array $opportunityAssociations): array
{
$associationIds = [];
foreach ($opportunityAssociations as $type => $associationData) {
if (! empty($associationData)) {
$associationIds[$type] = $this->convertSingleDealAssociations($associationData);
}
}
return $associationIds;
}
private function processCompanyAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['companies'])) {
return;
}
$companyId = $associationIds['companies'][0];
$account = $this->findOrSyncAccount($companyId);
if ($account instanceof Account) {
$associations['companies'][$companyId] = $account->getId();
$associations['account_id'] = $account->getId();
}
}
private function processContactAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['contacts'])) {
return;
}
foreach ($associationIds['contacts'] as $contactId) {
$contact = $this->findOrSyncContact($contactId);
if ($contact instanceof Contact) {
$associations['contacts'][$contactId] = $contact->getId();
}
}
}
private function findOrSyncAccount(string $companyId): ?Account
{
$account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);
if (! $account instanceof Account) {
$account = $this->syncAccount($companyId);
}
return $account;
}
private function findOrSyncContact(string $contactId): ?Contact
{
$contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);
if (! $contact instanceof Contact) {
$contact = $this->syncContact($contactId);
}
return $contact;
}
private function convertSingleDealAssociations($opportunityAssociations = null): array
{
$associationData = [];
if ($opportunityAssociations === null) {
return $associationData;
}
// Handle array input (from extractAssociationIds)
if (is_array($opportunityAssociations)) {
return $opportunityAssociations;
}
// Handle CollectionResponseAssociatedId object
if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {
foreach ($opportunityAssociations->getResults() as $association) {
$associationData[] = $association->getId();
}
}
return $associationData;
}
private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity
{
if (empty($crmData['properties'])) {
return null;
}
$crmId = (string) $crmData['id'];
$properties = $crmData['properties'];
$associations = $crmData['associations'] ?? [];
$opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(
$this->config,
$crmId
);
if ($opportunityExists) {
return $this->updateOpportunity($crmId, $properties, $associations);
} else {
return $this->createOpportunity($crmId, $properties, $associations);
}
}
/**
* Create new opportunity
*/
private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity
{
$accountId = $this->resolveAccountId($associations);
if (! $accountId) {
return null;
}
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
if (! $businessProcess) {
return null;
}
$stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);
if (! $stage) {
return null;
}
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->importOpportunityContacts($opportunity, $associations['contacts']);
if ($opportunity->wasRecentlyCreated) {
MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());
}
return $opportunity;
}
/**
* Update existing opportunity
*/
private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity
{
$accountId = $this->resolveAccountId($associations);
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
$stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->updateOpportunityAssociations($opportunity, $associations);
return $opportunity;
}
private function resolveAccountId(array $associations): ?int
{
if (! empty($associations['accountId'])) {
return $associations['accountId'];
}
if (empty($associations)) {
return null;
}
// we can't resolve multiple account ids (currently SDK returns one company)
foreach ($associations['companies'] as $accountId) {
return $accountId;
}
return null;
}
private function buildOpportunityData(
array $properties,
?int $accountId,
?BusinessProcess $businessProcess,
?Stage $stage
): array {
$ownerId = null;
$profile = null;
if (! empty($properties['hubspot_owner_id'])) {
$ownerId = $properties['hubspot_owner_id'];
$profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);
}
$name = 'Unknown';
if (isset($properties['dealname'])) {
$name = mb_strimwidth($properties['dealname'], 0, 128);
}
$amount = $this->resolveAmount($properties);
$currency = $properties['deal_currency_code'] ?? null;
$closeDate = null;
if (! empty($properties['closedate'])) {
$closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');
}
$remotelyCreatedAt = null;
if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {
$date = $this->parseCleanDatetime($properties['createdate']);
$remotelyCreatedAt = $date?->format('Y-m-d H:i:s');
}
$closedStages = $this->getClosedDealStages();
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$data = [
'team_id' => $this->team->getId(),
'user_id' => $profile ? $profile->user_id : null,
'owner_id' => $ownerId,
'name' => $name,
'value' => ! empty($amount) ? $amount : null,
'currency_code' => CurrencyFormatter::formatCode($currency),
'close_date' => $closeDate,
'is_closed' => $isWon || $isLost,
'is_won' => $isWon,
'remotely_created_at' => $remotelyCreatedAt,
'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),
'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),
];
if ($accountId) {
$data['account_id'] = $accountId;
}
if ($stage) {
$data['stage_id'] = $stage->id;
}
if ($businessProcess) {
$recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);
if ($recordType) {
$data['record_type_id'] = $recordType->id;
}
}
return $data;
}
private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess
{
if ($pipelineId === null) {
return null;
}
if (isset($this->cachedBusinessProcesses[$pipelineId])) {
return $this->cachedBusinessProcesses[$pipelineId];
}
$businessProcess = $this->getBusinessProcess($pipelineId);
if (! $businessProcess instanceof BusinessProcess) {
$this->importStages();
$businessProcess = $this->getBusinessProcess($pipelineId);
}
if (! $businessProcess instanceof BusinessProcess) {
$this->logger->info(
'[HubSpot] Deal is not attached to a pipeline',
[
'pipeline' => $pipelineId]
);
}
$this->cachedBusinessProcesses[$pipelineId] = $businessProcess;
return $businessProcess;
}
private function getBusinessProcess(string $pipelineId): ?BusinessProcess
{
return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);
}
private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage
{
if (empty($stageId)) {
return null;
}
$cacheKey = $businessProcess->getId() . ':' . $stageId;
if (isset($this->cachedStages[$cacheKey])) {
return $this->cachedStages[$cacheKey];
}
$stage = $this->crmEntityRepository->getPipelineStageByConditions(
$businessProcess,
[
'crm_provider_id' => $stageId,
'type' => Stage::TYPE_OPPORTUNITY,
]
);
if ($stage === null) {
$this->importStages(null, $stageId);
}
if ($stage === null) {
$this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);
}
$this->cachedStages[$cacheKey] = $stage;
return $stage;
}
private function resolveAmount(array $properties): ?string
{
$amount = null;
if (! empty($properties['amount'])) {
$amount = str_replace(',', '', $properties['amount']);
}
if ($this->config->hasDefaultCurrencyFieldSet()) {
$valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();
$amount = $properties[$valueFieldName] ?? $amount;
}
return $amount;
}
private function parseCleanDatetime(string $datetime): ?Carbon
{
// Treat pre-1980 values as invalid
$minValidDate = Carbon::parse('1980-01-01 00:00:00');
try {
$date = Carbon::parse($datetime);
if ($minValidDate->gt($date)) {
return null;
}
return $date;
} catch (Exception) {
return null; // On parse error, treat as null
}
}
private function resolveDealProbability(?string $stageProbability): int
{
if ($stageProbability === null) {
return 0;
}
$probability = (float) $stageProbability;
return $probability > 1 ? 0 : (int) ($probability * 100);
}
private function resolveForecastCategory(?string $forecastCategory): string
{
if (! $forecastCategory) {
return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;
}
$forecastCategory = str_replace('_', ' ', $forecastCategory);
return ucwords(strtolower($forecastCategory));
}
private function importExternalFieldData(array $properties, int $opportunityId): void
{
$crmFields = $this->getOpportunitySyncableFields();
$this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);
}
private function importOpportunityContacts(Opportunity $opportunity, array $associations): void
{
// Handle empty or missing contact associations
if (empty($associations)) {
// Remove all existing contact associations if none provided
$this->removeAllOpportunityContacts($opportunity);
return;
}
// Use differential sync approach for better performance and accuracy
$this->syncOpportunityContactsDifferential($opportunity, $associations);
}
/**
* Sync opportunity contacts using differential approach
* This compares current vs new associations and only makes necessary changes
*/
private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void
{
$currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);
$contactAssociationIds = array_keys($contactAssociations);
$contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);
$contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);
if (empty($contactsToAdd) && empty($contactsToRemove)) {
return;
}
$this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);
$this->removeContactAssociations($opportunity, $contactsToRemove);
$this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);
}
private function getCurrentContactCrmIds(Opportunity $opportunity): array
{
return $opportunity->contacts()
->pluck('contacts.crm_provider_id')
->toArray();
}
private function logContactAssociationChanges(
Opportunity $opportunity,
array $currentContactCrmIds,
array $contactAssociations,
array $contactsToAdd,
array $contactsToRemove
): void {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [
'opportunity_id' => $opportunity->getId(),
'current_contacts' => $currentContactCrmIds,
'new_contacts' => $contactAssociations,
'contacts_to_add' => $contactsToAdd,
'contacts_to_remove' => $contactsToRemove,
]);
}
private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void
{
if (empty($contactsToRemove)) {
return;
}
$contactsToDetach = $opportunity->contacts()
->whereIn('contacts.crm_provider_id', $contactsToRemove)
->pluck('contacts.id')
->toArray();
if (! empty($contactsToDetach)) {
$opportunity->contacts()->detach($contactsToDetach);
$this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_contact_crm_ids' => $contactsToRemove,
'removed_contact_count' => count($contactsToDetach),
]);
}
}
private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void
{
if (empty($contactsToAdd)) {
return;
}
$contactsAdded = [];
foreach ($contactsToAdd as $crmId) {
$id = $contactAssociations[$crmId];
if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {
$contactsAdded[] = $crmId;
}
}
$this->logAddedContacts($opportunity, $contactsAdded);
}
private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool
{
try {
$contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);
if (! $contact) {
return false;
}
return $this->performContactAttachment($opportunity, $contact, $crmId);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [
'opportunity_id' => $opportunity->getId(),
'contact_crm_id' => $crmId,
'error' => $e->getMessage(),
]);
return false;
}
}
private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool
{
try {
$opportunity->contacts()->attach($contact->getId(), [
'crm_provider_id' => $crmId,
]);
return true;
} catch (\Illuminate\Database\QueryException $e) {
if (str_contains($e->getMessage(), 'Duplicate entry')) {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [
'contact_id' => $contact->getId(),
'contact_crm_id' => $crmId,
'opportunity_id' => $opportunity->getId(),
]);
return false;
}
throw $e;
}
}
private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void
{
if (! empty($contactsAdded)) {
$this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [
'opportunity_id' => $opportunity->getId(),
'contacts_to_add_count' => count($contactsAdded),
'added_contact_crm_ids' => $contactsAdded,
'added_contacts_count' => count($contactsAdded),
]);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
1
Previous Highlighted Error
Next Highlighted Error
<template>
<WelcomeLayout
title="Account disconnected"
textPosition="center"
:icon="faUnlink"
:class="$style.layout"
>
<div :class="$style.container" v-if="providersLoaded">
<p>
<strong>
It looks like your {{ localProvider.displayName }} account has become
disconnected
</strong>
</p>
<p :class="$style.small">Please re-connect to continue</p>
<p v-if="isInIframe">
We'll open the {{ localProvider.displayName }} authentication in a new
tab. Please return here and refresh the page once complete
</p>
<GoogleLikeButton
v-if="localProvider.viaIntegrationApp && crmTokenLoaded"
as="a"
:key="localProvider.name"
:brand-logo="localProvider.name"
:class="$style.connectButton"
@click="integrationAppOnClick"
>
Sign in with {{ localProvider.displayName }}
</GoogleLikeButton>
<GoogleLikeButton
v-if="!localProvider.viaIntegrationApp"
as="a"
:key="localProvider.name"
:href="`/auth/redirect/${localProvider.name}`"
:target="target"
:brand-logo="localProvider.name"
:class="$style.connectButton"
>
Sign in with {{ localProvider.displayName }}
</GoogleLikeButton>
</div>
<BuildInfo />
<KioskBanner />
</WelcomeLayout>
</template>
<script>
import window from "window";
import axios from "axios";
import { faUnlink } from "@fortawesome/pro-regular-svg-icons";
import isInIframe from "@/utils/isInIframe";
import BuildInfo from "@/components/layout/BuildInfo/BuildInfo.vue";
import KioskBanner from "@/components/shared/KioskBanner/KioskBanner.vue";
import WelcomeLayout from "@/components/layout/WelcomeLayout/WelcomeLayout.vue";
import GoogleLikeButton from "@/components/shared/Buttons/GoogleLikeButton.vue";
import { showSnackbarError, normalizeError } from "@/utils/index";
import { IntegrationAppClient } from "@integration-app/sdk";
export default {
name: "ConnectPage",
components: {
BuildInfo,
KioskBanner,
WelcomeLayout,
GoogleLikeButton,
},
data() {
return {
...window.connectData,
crmToken: null,
faUnlink,
isInIframe,
providers: [],
providersLoaded: false,
crmTokenLoaded: false,
};
},
computed: {
localProvider() {
return this.providers.find((e) => e.name === this.provider);
},
target() {
return this.isInIframe ? "_blank" : null;
},
},
created() {
this.getProviders();
},
mounted() {
this.showErrors();
},
watch: {
providersLoaded() {
if (this.providersLoaded) {
this.prepareIntegrationAppConnection();
}
},
},
methods: {
showErrors() {
if (!this.error) return;
showSnackbarError(this.error, undefined, undefined, false);
},
unwrapEntityResponse({ data }) {
return data.map(({ icon, name, displayName, viaIntegrationApp }) => {
return { icon, name, displayName, viaIntegrationApp };
});
},
async getProviders() {
try {
const response = await axios.get("/api/v1/connect-providers");
this.providers = this.unwrapEntityResponse(response);
this.providersLoaded = true;
} catch {
showSnackbarError(
"An error occurred, while loading form data (connect providers).",
);
}
},
async prepareIntegrationAppConnection() {
if (this.localProvider.viaIntegrationApp) {
try {
const response = await axios.get("/api/v1/integration-app-token");
this.crmToken = response.data.token;
this.crmTokenLoaded = true;
} catch (error) {
console.log(error);
showSnackbarError(
`An error occurred while preparing the page.
Try refreshing, if the error persists get in touch with the Jiminny team.`,
);
}
}
},
async integrationAppOnClick() {
const integrationApp = new IntegrationAppClient({
token: this.crmToken,
});
const connection = await integrationApp
.integration(this.localProvider.name)
.openNewConnection({
showPoweredBy: false,
allowMultipleConnections: false,
});
console.log('[IntegrationApp] openNewConnection resolved:', JSON.stringify(connection));
// [IntegrationApp] openNewConnection resolved: {
// "id":"69e0b41a67d0068c2ca0b48e",
// "name":"Zoho CRM",
// "userId":"1ece66c8-feb1-4df1-b321-21607daf4623",
// "tenantId":"69e0b3faef3e7b6248189289",
// "isTest":false,
// "connected":true,
// "state":"READY",
// "errors":[],
// "integrationId":"66fe6c913202f3a165e3c14d",
// "externalAppId":"6671653e7e2d642e4e41b0fa",
// "authOptionKey":"",
// "createdAt":"2026-04-16T10:04:10.420Z",
// "updatedAt":"2026-04-16T10:04:10.575Z",
// "retryAttempts":0,
// "isDeactivated":false
// }
if (connection && connection.disconnected !== true && connection.connected !== false) {
console.log('[IntegrationApp] connection condition matched');
try {
const saveRequest = await axios.post(
"/api/v1/integration-app-connect",
);
if (saveRequest.data && saveRequest.data.success === true) {
/** If all is good refresh the page here */
window.location = "/dashboard";
return;
}
throw new Error(saveRequest.data.message);
} catch (error) {
console.log(error);
showSnackbarError(normalizeError(error));
}
}
},
},
};
</script>
<style module lang="less" src="./connect.less"></style>
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.03046875,"top":0.017361112,"width":0.0453125,"height":0.022222223},"help_text":"~/jiminny/app","role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"JY-20692-fix-integration-app-token-auth-response-change, menu","depth":5,"bounds":{"left":0.07578125,"top":0.017361112,"width":0.15898438,"height":0.022222223},"help_text":"Git Branch: JY-20692-fix-integration-app-token-auth-response-change","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.78515625,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"AutomatedReportsCommandTest","depth":6,"bounds":{"left":0.803125,"top":0.017361112,"width":0.09765625,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Run 'AutomatedReportsCommandTest'","depth":6,"bounds":{"left":0.9007813,"top":0.017361112,"width":0.01328125,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Debug 'AutomatedReportsCommandTest'","depth":6,"bounds":{"left":0.9140625,"top":0.017361112,"width":0.01328125,"height":0.022222223},"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.9273437,"top":0.017361112,"width":0.01328125,"height":0.022222223},"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.96015626,"top":0.017361112,"width":0.01328125,"height":0.022222223},"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.9734375,"top":0.017361112,"width":0.01328125,"height":0.022222223},"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.9867188,"top":0.017361112,"width":0.013281226,"height":0.022222223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Show Replace Field","depth":4,"bounds":{"left":0.12382813,"top":0.22083333,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Search History","depth":3,"bounds":{"left":0.13867188,"top":0.22013889,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"cachedStages","depth":4,"bounds":{"left":0.1515625,"top":0.22013889,"width":0.0515625,"height":0.013888889},"value":"cachedStages","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.21367188,"top":0.22013889,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Match Case","depth":3,"bounds":{"left":0.22539063,"top":0.22013889,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Words","depth":3,"bounds":{"left":0.23554687,"top":0.22013889,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Regex","depth":3,"bounds":{"left":0.24570313,"top":0.22013889,"width":0.00859375,"height":0.015277778},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Replace History","depth":3,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Replace","depth":4,"role_description":"text field","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"New Line","depth":3,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Preserve case","depth":3,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"checkbox","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2/4","depth":4,"bounds":{"left":0.26171875,"top":0.21944444,"width":0.030078124,"height":0.015277778},"role_description":"text"},{"role":"AXButton","text":"Previous Occurrence","depth":4,"bounds":{"left":0.29179686,"top":0.21875,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Next Occurrence","depth":4,"bounds":{"left":0.30195314,"top":0.21875,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Filter Search Results","depth":4,"bounds":{"left":0.31210938,"top":0.21875,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Open in Window, Multiple Cursors","depth":4,"bounds":{"left":0.32226562,"top":0.21875,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"Click to highlight","depth":4,"role_description":"link","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Close","depth":4,"bounds":{"left":0.38320312,"top":0.21875,"width":0.01015625,"height":0.016666668},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.049609374,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"33","depth":4,"bounds":{"left":0.3421875,"top":0.24583334,"width":0.012109375,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"2","depth":4,"bounds":{"left":0.35664064,"top":0.24583334,"width":0.009375,"height":0.013194445},"role_description":"text"},{"role":"AXStaticText","text":"19","depth":4,"bounds":{"left":0.3683594,"top":0.24583334,"width":0.011328125,"height":0.013194445},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.3816406,"top":0.24444444,"width":0.00859375,"height":0.015972223},"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.39023438,"top":0.24444444,"width":0.008203125,"height":0.015972223},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits;\n\nuse Carbon\\Carbon;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\CollectionResponseAssociatedId;\nuse Jiminny\\Exceptions\\InvalidArgumentException;\nuse Jiminny\\Models\\Account;\nuse Exception;\nuse Jiminny\\Component\\DealInsights\\Forecast\\Forecast;\nuse Jiminny\\Jobs\\Crm\\MatchActivitiesToNewOpportunity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Models\\Opportunity;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Services\\Crm\\Hubspot\\DealFieldsService;\nuse Jiminny\\Services\\Crm\\Hubspot\\OpportunitySyncStrategy\\HubspotSingleSyncStrategy;\nuse Jiminny\\Services\\Crm\\Hubspot\\WebhookSyncBatchProcessor;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Utils\\CurrencyFormatter;\n\n/**\n * Optimized sync methods for better performance\n * These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains\n */\ntrait OpportunitySyncTrait\n{\n private const int BATCH_SIZE = 100;\n private const int BATCH_PROCESS_SIZE = 800;\n\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected DealFieldsService $dealFieldsService;\n\n private ?array $cachedClosedDealStages = null;\n private array $cachedBusinessProcesses = [];\n private array $cachedStages = [];\n\n public function syncOpportunities(array $parameters, ?string $strategy = null): int\n {\n $strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);\n $parameters['config'] = $this->config;\n $syncCount = 0;\n $reportedTotal = 0;\n $lastSyncedId = [];\n\n try {\n foreach ($strategies as $strategyName => $syncStrategy) {\n $this->logger->info(\n '[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .\n $strategyName\n );\n\n $total = 0;\n $lastId = null;\n $buffer = [];\n\n // HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies\n foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {\n $buffer[] = $hsOpportunity;\n\n // process every 800 rows (fits < 1 000 association limit)\n if (\\count($buffer) >= self::BATCH_PROCESS_SIZE) {\n $syncCount += $this->processOpportunityBatch($buffer);\n $buffer = [];\n }\n }\n\n // leftovers\n if ($buffer) {\n $syncCount += $this->processOpportunityBatch($buffer);\n }\n\n $reportedTotal += $total;\n $lastSyncedId = $lastId;\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException | CrmException $e) {\n $this->handleSyncException($e, $parameters);\n }\n\n $this->logger->info(\n '[HubSpot] Synced opportunities',\n [\n 'team' => $this->team->getId(),\n 'sync_count' => $syncCount,\n 'total' => $reportedTotal,\n 'last_synced_id' => $lastSyncedId,\n ]\n );\n\n return $reportedTotal;\n }\n\n private function handleSyncException(\\Throwable $e, array $parameters): void\n {\n if (($parameters['since'] ?? null) instanceof Carbon) {\n $parameters['since'] = $parameters['since']->toDateTimeString();\n }\n $parameters['config'] = $this->config->getId();\n\n $this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [\n 'teamId' => $this->team->getUuid(),\n 'parameters' => $parameters,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n /**\n * @inheritdoc\n */\n public function syncOpportunity(string $crmId): ?Opportunity\n {\n $strategy = $this->opportunitySyncStrategyResolver->resolve(\n $this->config,\n OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,\n );\n\n $parameters = [\n 'config' => $this->config,\n 'crm_id' => $crmId,\n ];\n\n try {\n if (! $strategy instanceof HubspotSingleSyncStrategy) {\n throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');\n }\n\n $hsOpportunity = $strategy->fetchOpportunity($parameters);\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $e) {\n $this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [\n 'teamId' => $this->team->getUuid(),\n 'crmId' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n return null;\n }\n\n $hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);\n\n return $this->importOrUpdateOpportunity($hsOpportunity);\n }\n\n /**\n * Process webhook-collected opportunity batches.\n *\n * Drains Redis sets containing company CRM IDs collected from webhook events\n * and dispatches ImportOpportunityBatch jobs for batch processing.\n *\n * @return int Number of opportunity IDs dispatched to jobs\n */\n public function batchSyncOpportunities(): int\n {\n $configId = $this->team->getCrmConfiguration()->getId();\n\n return $this->batchProcessor->processBatchesForObjectType(\n WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,\n $configId\n );\n }\n\n /**\n * Import a batch of opportunities by their CRM IDs.\n * Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().\n *\n * @param array<string> $crmIds HubSpot deal CRM IDs\n *\n * @return array{success: array, failed_ids: array, errors?: array<string, string>}\n */\n public function importOpportunityBatchByIds(array $crmIds): array\n {\n $fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);\n\n $allDeals = [];\n foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {\n $deals = $this->client->getOpportunitiesByIds($chunk, $fields);\n foreach ($deals as $deal) {\n $allDeals[] = $deal;\n }\n }\n\n // IDs not returned by HubSpot are likely deleted or inaccessible deals.\n // These are not failures — retrying won't bring them back.\n $fetchedIds = array_map('strval', array_column($allDeals, 'id'));\n $notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));\n\n if (! empty($notFoundIds)) {\n $this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [\n 'teamId' => $this->team->getId(),\n 'notFoundCount' => \\count($notFoundIds),\n 'notFoundIds' => $notFoundIds,\n 'requestedCount' => \\count($crmIds),\n 'fetchedCount' => \\count($allDeals),\n ]);\n }\n\n if (empty($allDeals)) {\n return ['success' => [], 'failed_ids' => []];\n }\n\n return $this->importOpportunityBatch($allDeals);\n }\n\n private function getClosedDealStages(): array\n {\n if ($this->cachedClosedDealStages !== null) {\n return $this->cachedClosedDealStages;\n }\n\n $stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);\n $data = [\n 'lost' => [],\n 'won' => [],\n ];\n\n foreach ($stages as $stage) {\n if ($stage->probability == 0.00) {\n $data['lost'][] = $stage->crm_provider_id;\n }\n if ($stage->probability == 100.00) {\n $data['won'][] = $stage->crm_provider_id;\n }\n }\n\n $this->cachedClosedDealStages = $data;\n\n return $data;\n }\n\n /**\n * Import deals into the database with pre-fetched associations.\n *\n * API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT\n * caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()\n * where Laravel retries the whole job with backoff. After all retries exhausted,\n * failed() requeues all IDs to Redis.\n *\n * The per-deal loop catches exceptions individually. A deal can end up in three states:\n * - success: imported/updated successfully\n * - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)\n * These are permanent issues — retrying won't fix them.\n * - skipped (null): missing dependencies (no account, unknown pipeline/stage).\n * This is acceptable — the deal cannot be imported until those exist.\n */\n private function importOpportunityBatch(array $deals): array\n {\n $syncedOpportunities = [\n 'success' => [],\n 'failed_ids' => [],\n ];\n $dealIds = array_column($deals, 'id');\n\n // Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the\n // queue job retries the whole batch and eventually requeues all deal IDs back to Redis.\n try {\n $companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');\n $contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');\n\n $associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);\n\n $existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(\n $this->config,\n array_map('strval', $dealIds)\n );\n $existingCrmIdSet = array_flip($existingCrmIds);\n } catch (\\Throwable $e) {\n $this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [\n 'teamId' => $this->team->getId(),\n 'dealCount' => count($dealIds),\n 'error' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n foreach ($deals as $deal) {\n try {\n $deal['associations'] = $this->prepareAssociationsForOpportunity(\n $deal['id'],\n $companyAssociations,\n $contactAssociations,\n $associationsData\n );\n\n $syncedOpportunity = $this->importOrUpdateOpportunity(\n $deal,\n isset($existingCrmIdSet[(string) $deal['id']])\n );\n if ($syncedOpportunity) {\n $syncedOpportunities['success'][] = $syncedOpportunity;\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [\n 'teamId' => $this->team->getId(),\n 'crmId' => $deal['id'],\n 'error' => $e->getMessage(),\n ]);\n $syncedOpportunities['failed_ids'][] = $deal['id'];\n $syncedOpportunities['errors'][$deal['id']] = $e->getMessage();\n }\n }\n\n return $syncedOpportunities;\n }\n\n /**\n * Prepare associated entities for opportunities with optimized batch processing\n * Returns structured data with CRM ID to DB ID mappings for each opportunity\n */\n private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array\n {\n // Step 1: Collect all unique company and contact IDs from associations\n $allCompanyIds = $this->flattenAssociationIds($companyAssociations);\n $allContactIds = $this->flattenAssociationIds($contactAssociations);\n\n // Step 2: Batch sync missing entities and get CRM ID to DB ID mappings\n $companyIdMappings = [];\n $contactIdMappings = [];\n\n if (! empty($allCompanyIds)) {\n $companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);\n }\n\n if (! empty($allContactIds)) {\n $contactIdMappings = $this->prepareAssociatedContacts($allContactIds);\n }\n\n return [\n 'company_id_mappings' => $companyIdMappings,\n 'contact_id_mappings' => $contactIdMappings,\n ];\n }\n\n /**\n * Flatten association data to get unique IDs\n */\n private function flattenAssociationIds(array $associations): array\n {\n $ids = [];\n foreach ($associations as $dealAssociations) {\n if (is_array($dealAssociations)) {\n foreach ($dealAssociations as $id) {\n $ids[$id] = true;\n }\n }\n }\n\n return array_keys($ids);\n }\n\n /**\n * Batch sync missing accounts\n */\n private function prepareAssociatedAccounts(array $companyIds): array\n {\n // Find which accounts already exist\n $existingAccounts = $this->crmEntityRepository\n ->findAccountsByExternalIds($this->config, $companyIds);\n\n $existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();\n\n $existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {\n return [$account->getCrmProviderId() => $account->getId()];\n })->toArray();\n\n $missingCompanyIds = array_diff($companyIds, $existingCompanyIds);\n\n if (empty($missingCompanyIds)) {\n return $existingAccountsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [\n 'teamId' => $this->team->getUuid(),\n 'total_companies' => count($companyIds),\n 'existing_companies' => count($existingCompanyIds),\n 'missing_companies' => count($missingCompanyIds),\n ]);\n\n // we already have limit on opportunity ids count\n // Initialize variable before try block\n $syncedAccountsData = [];\n\n try {\n $syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [\n 'size' => count($missingCompanyIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedAccountsData = [];\n }\n\n return $existingAccountsData + $syncedAccountsData;\n }\n\n /**\n * Prepare associated contacts - find existing and sync missing ones\n * Returns mapping of CRM ID to DB ID\n */\n private function prepareAssociatedContacts(array $contactIds): array\n {\n // Find which contacts already exist\n $existingContacts = $this->crmEntityRepository\n ->findContactsByExternalIds($this->config, $contactIds);\n\n $existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();\n\n // Create mapping for existing contacts\n $existingContactsData = $existingContacts->mapWithKeys(function ($contact) {\n return [$contact->getCrmProviderId() => $contact->getId()];\n })->toArray();\n\n $missingContactIds = array_diff($contactIds, $existingContactIds);\n\n if (empty($missingContactIds)) {\n return $existingContactsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [\n 'teamId' => $this->team->getUuid(),\n 'total_contacts' => count($contactIds),\n 'existing_contacts' => count($existingContactIds),\n 'missing_contacts' => count($missingContactIds),\n ]);\n\n // Sync missing contacts using batch API\n try {\n $syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [\n 'size' => count($missingContactIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedContactsData = [];\n }\n\n return $existingContactsData + $syncedContactsData;\n }\n\n private function batchSyncCrmObjects(string $objectType, array $crmIds): array\n {\n $syncObjects = [];\n $crmObjectIds = array_values($crmIds);\n\n foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {\n try {\n $objects = $objectType === 'companies' ?\n $this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :\n $this->client->getContactsByIds($chunk, $this->getContactFields());\n\n foreach ($objects as $objectId => $objectData) {\n $this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [\n 'requested_count' => count($chunk),\n 'synced_count' => count($objects),\n ]);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [\n 'ids' => $chunk,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n return $syncObjects;\n }\n\n private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void\n {\n try {\n $object = $objectType === 'companies' ?\n $this->importAccount($objectData) :\n $this->importContact($objectData);\n\n if ($object) {\n $syncObjects[$object->getCrmProviderId()] = $object->getId();\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [\n 'id' => $objectId,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n /**\n * Prepare associations for a single opportunity\n *\n * The return value is an array with the following structure:\n * [\n * 'companies' => [\n * $companyCrmId => $companyId,\n * ...\n * ],\n * 'contacts' => [\n * $contactCrmId => $contactId,\n * ...\n * ],\n * 'account_id' => $accountId,\n * ]\n */\n private function prepareAssociationsForOpportunity(\n string $oppCrmId,\n array $companyAssociations,\n array $contactAssociations,\n array $associationsData\n ): array {\n $associations = [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n\n $oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];\n foreach ($oppCompanyIds as $companyCrmId) {\n if (isset($associationsData['company_id_mappings'][$companyCrmId])) {\n $associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];\n\n // Set primary account (first company becomes primary account)\n if ($associations['account_id'] === null) {\n $associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];\n }\n }\n }\n\n $oppContactIds = $contactAssociations[$oppCrmId] ?? [];\n foreach ($oppContactIds as $contactCrmId) {\n if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {\n $associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];\n }\n }\n\n return $associations;\n }\n\n /**\n * Update only associations for an opportunity\n */\n private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void\n {\n // Update contact associations\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n // Update company (account) associations\n $this->updateOpportunityAccount($opportunity, $associations['account_id']);\n }\n\n /**\n * Remove all contact associations from an opportunity\n */\n private function removeAllOpportunityContacts(Opportunity $opportunity): void\n {\n $currentCount = (int) $opportunity->contacts()->count();\n\n if ($currentCount > 0) {\n $opportunity->contacts()->detach();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_count' => $currentCount,\n ]);\n }\n }\n\n private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void\n {\n if ($accountId === null) {\n // No account ID provided - keep current account\n return;\n }\n\n $currentAccountId = $opportunity->getAccountId();\n\n // Only update if account has changed\n if ($currentAccountId !== $accountId) {\n $opportunity->account_id = $accountId;\n $opportunity->save();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [\n 'opportunity_id' => $opportunity->getId(),\n 'old_account_id' => $currentAccountId,\n 'new_account_id' => $accountId,\n ]);\n }\n }\n\n /**\n * Find existing opportunities by external IDs (OPTIMIZED VERSION)\n * Uses batch query for better performance\n */\n private function findExistingOpportunities(array $crmIds): Collection\n {\n return $this->crmEntityRepository\n ->findOpportunitiesByExternalIds($this->config, $crmIds);\n }\n\n private function processOpportunityBatch(array $opportunities): int\n {\n $syncedOpportunities = $this->importOpportunityBatch($opportunities);\n\n return count($syncedOpportunities['success'] ?? []);\n }\n\n /**\n * Convert single deal associations from HubSpot format to internal format\n * Handles both HubSpot SDK objects and array formats\n *\n * @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed\n *\n * @return array Processed associations with DB IDs\n */\n private function convertDealAssociations(array $opportunityAssociations): array\n {\n $associations = $this->initializeAssociationsStructure();\n\n if (empty($opportunityAssociations)) {\n return $associations;\n }\n\n $associationIds = $this->extractAssociationIds($opportunityAssociations);\n\n $this->processCompanyAssociations($associationIds, $associations);\n $this->processContactAssociations($associationIds, $associations);\n\n return $associations;\n }\n\n private function initializeAssociationsStructure(): array\n {\n return [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n }\n\n private function extractAssociationIds(array $opportunityAssociations): array\n {\n $associationIds = [];\n\n foreach ($opportunityAssociations as $type => $associationData) {\n if (! empty($associationData)) {\n $associationIds[$type] = $this->convertSingleDealAssociations($associationData);\n }\n }\n\n return $associationIds;\n }\n\n private function processCompanyAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['companies'])) {\n return;\n }\n\n $companyId = $associationIds['companies'][0];\n $account = $this->findOrSyncAccount($companyId);\n\n if ($account instanceof Account) {\n $associations['companies'][$companyId] = $account->getId();\n $associations['account_id'] = $account->getId();\n }\n }\n\n private function processContactAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['contacts'])) {\n return;\n }\n\n foreach ($associationIds['contacts'] as $contactId) {\n $contact = $this->findOrSyncContact($contactId);\n\n if ($contact instanceof Contact) {\n $associations['contacts'][$contactId] = $contact->getId();\n }\n }\n }\n\n private function findOrSyncAccount(string $companyId): ?Account\n {\n $account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);\n\n if (! $account instanceof Account) {\n $account = $this->syncAccount($companyId);\n }\n\n return $account;\n }\n\n private function findOrSyncContact(string $contactId): ?Contact\n {\n $contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);\n\n if (! $contact instanceof Contact) {\n $contact = $this->syncContact($contactId);\n }\n\n return $contact;\n }\n\n private function convertSingleDealAssociations($opportunityAssociations = null): array\n {\n $associationData = [];\n\n if ($opportunityAssociations === null) {\n return $associationData;\n }\n\n // Handle array input (from extractAssociationIds)\n if (is_array($opportunityAssociations)) {\n return $opportunityAssociations;\n }\n\n // Handle CollectionResponseAssociatedId object\n if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {\n foreach ($opportunityAssociations->getResults() as $association) {\n $associationData[] = $association->getId();\n }\n }\n\n return $associationData;\n }\n\n private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity\n {\n if (empty($crmData['properties'])) {\n return null;\n }\n\n $crmId = (string) $crmData['id'];\n $properties = $crmData['properties'];\n $associations = $crmData['associations'] ?? [];\n\n $opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(\n $this->config,\n $crmId\n );\n\n if ($opportunityExists) {\n return $this->updateOpportunity($crmId, $properties, $associations);\n } else {\n return $this->createOpportunity($crmId, $properties, $associations);\n }\n }\n\n /**\n * Create new opportunity\n */\n private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n if (! $accountId) {\n return null;\n }\n\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n if (! $businessProcess) {\n return null;\n }\n\n $stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);\n if (! $stage) {\n return null;\n }\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n if ($opportunity->wasRecentlyCreated) {\n MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());\n }\n\n return $opportunity;\n }\n\n /**\n * Update existing opportunity\n */\n private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n $stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->updateOpportunityAssociations($opportunity, $associations);\n\n return $opportunity;\n }\n\n private function resolveAccountId(array $associations): ?int\n {\n if (! empty($associations['accountId'])) {\n return $associations['accountId'];\n }\n\n if (empty($associations)) {\n return null;\n }\n\n // we can't resolve multiple account ids (currently SDK returns one company)\n foreach ($associations['companies'] as $accountId) {\n return $accountId;\n }\n\n return null;\n }\n\n private function buildOpportunityData(\n array $properties,\n ?int $accountId,\n ?BusinessProcess $businessProcess,\n ?Stage $stage\n ): array {\n $ownerId = null;\n $profile = null;\n if (! empty($properties['hubspot_owner_id'])) {\n $ownerId = $properties['hubspot_owner_id'];\n $profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);\n }\n\n $name = 'Unknown';\n if (isset($properties['dealname'])) {\n $name = mb_strimwidth($properties['dealname'], 0, 128);\n }\n\n $amount = $this->resolveAmount($properties);\n $currency = $properties['deal_currency_code'] ?? null;\n\n $closeDate = null;\n if (! empty($properties['closedate'])) {\n $closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');\n }\n\n $remotelyCreatedAt = null;\n if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {\n $date = $this->parseCleanDatetime($properties['createdate']);\n $remotelyCreatedAt = $date?->format('Y-m-d H:i:s');\n }\n\n $closedStages = $this->getClosedDealStages();\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $data = [\n 'team_id' => $this->team->getId(),\n 'user_id' => $profile ? $profile->user_id : null,\n 'owner_id' => $ownerId,\n 'name' => $name,\n 'value' => ! empty($amount) ? $amount : null,\n 'currency_code' => CurrencyFormatter::formatCode($currency),\n 'close_date' => $closeDate,\n 'is_closed' => $isWon || $isLost,\n 'is_won' => $isWon,\n 'remotely_created_at' => $remotelyCreatedAt,\n 'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),\n 'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),\n ];\n\n if ($accountId) {\n $data['account_id'] = $accountId;\n }\n\n if ($stage) {\n $data['stage_id'] = $stage->id;\n }\n\n if ($businessProcess) {\n $recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);\n if ($recordType) {\n $data['record_type_id'] = $recordType->id;\n }\n }\n\n return $data;\n }\n\n private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess\n {\n if ($pipelineId === null) {\n return null;\n }\n\n if (isset($this->cachedBusinessProcesses[$pipelineId])) {\n return $this->cachedBusinessProcesses[$pipelineId];\n }\n\n $businessProcess = $this->getBusinessProcess($pipelineId);\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->importStages();\n $businessProcess = $this->getBusinessProcess($pipelineId);\n }\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->logger->info(\n '[HubSpot] Deal is not attached to a pipeline',\n [\n 'pipeline' => $pipelineId]\n );\n }\n\n $this->cachedBusinessProcesses[$pipelineId] = $businessProcess;\n\n return $businessProcess;\n }\n\n private function getBusinessProcess(string $pipelineId): ?BusinessProcess\n {\n return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);\n }\n\n private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage\n {\n if (empty($stageId)) {\n return null;\n }\n\n $cacheKey = $businessProcess->getId() . ':' . $stageId;\n if (isset($this->cachedStages[$cacheKey])) {\n return $this->cachedStages[$cacheKey];\n }\n\n $stage = $this->crmEntityRepository->getPipelineStageByConditions(\n $businessProcess,\n [\n 'crm_provider_id' => $stageId,\n 'type' => Stage::TYPE_OPPORTUNITY,\n ]\n );\n\n if ($stage === null) {\n $this->importStages(null, $stageId);\n }\n\n if ($stage === null) {\n $this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);\n }\n\n $this->cachedStages[$cacheKey] = $stage;\n\n return $stage;\n }\n\n private function resolveAmount(array $properties): ?string\n {\n $amount = null;\n if (! empty($properties['amount'])) {\n $amount = str_replace(',', '', $properties['amount']);\n }\n\n if ($this->config->hasDefaultCurrencyFieldSet()) {\n $valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();\n $amount = $properties[$valueFieldName] ?? $amount;\n }\n\n return $amount;\n }\n\n private function parseCleanDatetime(string $datetime): ?Carbon\n {\n // Treat pre-1980 values as invalid\n $minValidDate = Carbon::parse('1980-01-01 00:00:00');\n\n try {\n $date = Carbon::parse($datetime);\n\n if ($minValidDate->gt($date)) {\n return null;\n }\n\n return $date;\n } catch (Exception) {\n return null; // On parse error, treat as null\n }\n }\n\n private function resolveDealProbability(?string $stageProbability): int\n {\n if ($stageProbability === null) {\n return 0;\n }\n\n $probability = (float) $stageProbability;\n\n return $probability > 1 ? 0 : (int) ($probability * 100);\n }\n\n private function resolveForecastCategory(?string $forecastCategory): string\n {\n if (! $forecastCategory) {\n return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;\n }\n\n $forecastCategory = str_replace('_', ' ', $forecastCategory);\n\n return ucwords(strtolower($forecastCategory));\n }\n\n private function importExternalFieldData(array $properties, int $opportunityId): void\n {\n $crmFields = $this->getOpportunitySyncableFields();\n $this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);\n }\n\n private function importOpportunityContacts(Opportunity $opportunity, array $associations): void\n {\n // Handle empty or missing contact associations\n if (empty($associations)) {\n // Remove all existing contact associations if none provided\n $this->removeAllOpportunityContacts($opportunity);\n\n return;\n }\n\n // Use differential sync approach for better performance and accuracy\n $this->syncOpportunityContactsDifferential($opportunity, $associations);\n }\n\n /**\n * Sync opportunity contacts using differential approach\n * This compares current vs new associations and only makes necessary changes\n */\n private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void\n {\n $currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);\n $contactAssociationIds = array_keys($contactAssociations);\n\n $contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);\n $contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);\n\n if (empty($contactsToAdd) && empty($contactsToRemove)) {\n return;\n }\n\n $this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);\n\n $this->removeContactAssociations($opportunity, $contactsToRemove);\n $this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);\n }\n\n private function getCurrentContactCrmIds(Opportunity $opportunity): array\n {\n return $opportunity->contacts()\n ->pluck('contacts.crm_provider_id')\n ->toArray();\n }\n\n private function logContactAssociationChanges(\n Opportunity $opportunity,\n array $currentContactCrmIds,\n array $contactAssociations,\n array $contactsToAdd,\n array $contactsToRemove\n ): void {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [\n 'opportunity_id' => $opportunity->getId(),\n 'current_contacts' => $currentContactCrmIds,\n 'new_contacts' => $contactAssociations,\n 'contacts_to_add' => $contactsToAdd,\n 'contacts_to_remove' => $contactsToRemove,\n ]);\n }\n\n private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void\n {\n if (empty($contactsToRemove)) {\n return;\n }\n\n $contactsToDetach = $opportunity->contacts()\n ->whereIn('contacts.crm_provider_id', $contactsToRemove)\n ->pluck('contacts.id')\n ->toArray();\n\n if (! empty($contactsToDetach)) {\n $opportunity->contacts()->detach($contactsToDetach);\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_contact_crm_ids' => $contactsToRemove,\n 'removed_contact_count' => count($contactsToDetach),\n ]);\n }\n }\n\n private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void\n {\n if (empty($contactsToAdd)) {\n return;\n }\n\n $contactsAdded = [];\n foreach ($contactsToAdd as $crmId) {\n $id = $contactAssociations[$crmId];\n\n if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {\n $contactsAdded[] = $crmId;\n }\n }\n\n $this->logAddedContacts($opportunity, $contactsAdded);\n }\n\n private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool\n {\n try {\n $contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);\n\n if (! $contact) {\n return false;\n }\n\n return $this->performContactAttachment($opportunity, $contact, $crmId);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [\n 'opportunity_id' => $opportunity->getId(),\n 'contact_crm_id' => $crmId,\n 'error' => $e->getMessage(),\n ]);\n\n return false;\n }\n }\n\n private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool\n {\n try {\n $opportunity->contacts()->attach($contact->getId(), [\n 'crm_provider_id' => $crmId,\n ]);\n\n return true;\n } catch (\\Illuminate\\Database\\QueryException $e) {\n if (str_contains($e->getMessage(), 'Duplicate entry')) {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [\n 'contact_id' => $contact->getId(),\n 'contact_crm_id' => $crmId,\n 'opportunity_id' => $opportunity->getId(),\n ]);\n\n return false;\n }\n\n throw $e;\n }\n }\n\n private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void\n {\n if (! empty($contactsAdded)) {\n $this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'contacts_to_add_count' => count($contactsAdded),\n 'added_contact_crm_ids' => $contactsAdded,\n 'added_contacts_count' => count($contactsAdded),\n ]);\n }\n }\n}","depth":4,"value":"<?php\n\ndeclare(strict_types=1);\n\nnamespace Jiminny\\Services\\Crm\\Hubspot\\ServiceTraits;\n\nuse Carbon\\Carbon;\nuse HubSpot\\Client\\Crm\\Deals\\Model\\CollectionResponseAssociatedId;\nuse Jiminny\\Exceptions\\InvalidArgumentException;\nuse Jiminny\\Models\\Account;\nuse Exception;\nuse Jiminny\\Component\\DealInsights\\Forecast\\Forecast;\nuse Jiminny\\Jobs\\Crm\\MatchActivitiesToNewOpportunity;\nuse Jiminny\\Models\\Contact;\nuse Jiminny\\Models\\Crm\\BusinessProcess;\nuse Jiminny\\Exceptions\\CrmException;\nuse Jiminny\\Models\\Opportunity;\nuse Illuminate\\Support\\Collection;\nuse Jiminny\\Models\\Stage;\nuse Jiminny\\Repositories\\Crm\\CrmEntityRepository;\nuse Jiminny\\Services\\Crm\\Hubspot\\DealFieldsService;\nuse Jiminny\\Services\\Crm\\Hubspot\\OpportunitySyncStrategy\\HubspotSingleSyncStrategy;\nuse Jiminny\\Services\\Crm\\Hubspot\\WebhookSyncBatchProcessor;\nuse Jiminny\\Services\\Crm\\OpportunitySyncStrategyResolver;\nuse Jiminny\\Utils\\CurrencyFormatter;\n\n/**\n * Optimized sync methods for better performance\n * These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains\n */\ntrait OpportunitySyncTrait\n{\n private const int BATCH_SIZE = 100;\n private const int BATCH_PROCESS_SIZE = 800;\n\n protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;\n protected CrmEntityRepository $crmEntityRepository;\n protected DealFieldsService $dealFieldsService;\n\n private ?array $cachedClosedDealStages = null;\n private array $cachedBusinessProcesses = [];\n private array $cachedStages = [];\n\n public function syncOpportunities(array $parameters, ?string $strategy = null): int\n {\n $strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);\n $parameters['config'] = $this->config;\n $syncCount = 0;\n $reportedTotal = 0;\n $lastSyncedId = [];\n\n try {\n foreach ($strategies as $strategyName => $syncStrategy) {\n $this->logger->info(\n '[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .\n $strategyName\n );\n\n $total = 0;\n $lastId = null;\n $buffer = [];\n\n // HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies\n foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {\n $buffer[] = $hsOpportunity;\n\n // process every 800 rows (fits < 1 000 association limit)\n if (\\count($buffer) >= self::BATCH_PROCESS_SIZE) {\n $syncCount += $this->processOpportunityBatch($buffer);\n $buffer = [];\n }\n }\n\n // leftovers\n if ($buffer) {\n $syncCount += $this->processOpportunityBatch($buffer);\n }\n\n $reportedTotal += $total;\n $lastSyncedId = $lastId;\n }\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException | CrmException $e) {\n $this->handleSyncException($e, $parameters);\n }\n\n $this->logger->info(\n '[HubSpot] Synced opportunities',\n [\n 'team' => $this->team->getId(),\n 'sync_count' => $syncCount,\n 'total' => $reportedTotal,\n 'last_synced_id' => $lastSyncedId,\n ]\n );\n\n return $reportedTotal;\n }\n\n private function handleSyncException(\\Throwable $e, array $parameters): void\n {\n if (($parameters['since'] ?? null) instanceof Carbon) {\n $parameters['since'] = $parameters['since']->toDateTimeString();\n }\n $parameters['config'] = $this->config->getId();\n\n $this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [\n 'teamId' => $this->team->getUuid(),\n 'parameters' => $parameters,\n 'reason' => $e->getMessage(),\n ]);\n }\n\n /**\n * @inheritdoc\n */\n public function syncOpportunity(string $crmId): ?Opportunity\n {\n $strategy = $this->opportunitySyncStrategyResolver->resolve(\n $this->config,\n OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,\n );\n\n $parameters = [\n 'config' => $this->config,\n 'crm_id' => $crmId,\n ];\n\n try {\n if (! $strategy instanceof HubspotSingleSyncStrategy) {\n throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');\n }\n\n $hsOpportunity = $strategy->fetchOpportunity($parameters);\n } catch (\\HubSpot\\Client\\Crm\\Deals\\ApiException $e) {\n $this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [\n 'teamId' => $this->team->getUuid(),\n 'crmId' => $crmId,\n 'reason' => $e->getMessage(),\n ]);\n\n return null;\n }\n\n $hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);\n\n return $this->importOrUpdateOpportunity($hsOpportunity);\n }\n\n /**\n * Process webhook-collected opportunity batches.\n *\n * Drains Redis sets containing company CRM IDs collected from webhook events\n * and dispatches ImportOpportunityBatch jobs for batch processing.\n *\n * @return int Number of opportunity IDs dispatched to jobs\n */\n public function batchSyncOpportunities(): int\n {\n $configId = $this->team->getCrmConfiguration()->getId();\n\n return $this->batchProcessor->processBatchesForObjectType(\n WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,\n $configId\n );\n }\n\n /**\n * Import a batch of opportunities by their CRM IDs.\n * Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().\n *\n * @param array<string> $crmIds HubSpot deal CRM IDs\n *\n * @return array{success: array, failed_ids: array, errors?: array<string, string>}\n */\n public function importOpportunityBatchByIds(array $crmIds): array\n {\n $fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);\n\n $allDeals = [];\n foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {\n $deals = $this->client->getOpportunitiesByIds($chunk, $fields);\n foreach ($deals as $deal) {\n $allDeals[] = $deal;\n }\n }\n\n // IDs not returned by HubSpot are likely deleted or inaccessible deals.\n // These are not failures — retrying won't bring them back.\n $fetchedIds = array_map('strval', array_column($allDeals, 'id'));\n $notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));\n\n if (! empty($notFoundIds)) {\n $this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [\n 'teamId' => $this->team->getId(),\n 'notFoundCount' => \\count($notFoundIds),\n 'notFoundIds' => $notFoundIds,\n 'requestedCount' => \\count($crmIds),\n 'fetchedCount' => \\count($allDeals),\n ]);\n }\n\n if (empty($allDeals)) {\n return ['success' => [], 'failed_ids' => []];\n }\n\n return $this->importOpportunityBatch($allDeals);\n }\n\n private function getClosedDealStages(): array\n {\n if ($this->cachedClosedDealStages !== null) {\n return $this->cachedClosedDealStages;\n }\n\n $stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);\n $data = [\n 'lost' => [],\n 'won' => [],\n ];\n\n foreach ($stages as $stage) {\n if ($stage->probability == 0.00) {\n $data['lost'][] = $stage->crm_provider_id;\n }\n if ($stage->probability == 100.00) {\n $data['won'][] = $stage->crm_provider_id;\n }\n }\n\n $this->cachedClosedDealStages = $data;\n\n return $data;\n }\n\n /**\n * Import deals into the database with pre-fetched associations.\n *\n * API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT\n * caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()\n * where Laravel retries the whole job with backoff. After all retries exhausted,\n * failed() requeues all IDs to Redis.\n *\n * The per-deal loop catches exceptions individually. A deal can end up in three states:\n * - success: imported/updated successfully\n * - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)\n * These are permanent issues — retrying won't fix them.\n * - skipped (null): missing dependencies (no account, unknown pipeline/stage).\n * This is acceptable — the deal cannot be imported until those exist.\n */\n private function importOpportunityBatch(array $deals): array\n {\n $syncedOpportunities = [\n 'success' => [],\n 'failed_ids' => [],\n ];\n $dealIds = array_column($deals, 'id');\n\n // Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the\n // queue job retries the whole batch and eventually requeues all deal IDs back to Redis.\n try {\n $companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');\n $contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');\n\n $associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);\n\n $existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(\n $this->config,\n array_map('strval', $dealIds)\n );\n $existingCrmIdSet = array_flip($existingCrmIds);\n } catch (\\Throwable $e) {\n $this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [\n 'teamId' => $this->team->getId(),\n 'dealCount' => count($dealIds),\n 'error' => $e->getMessage(),\n ]);\n\n throw $e;\n }\n\n foreach ($deals as $deal) {\n try {\n $deal['associations'] = $this->prepareAssociationsForOpportunity(\n $deal['id'],\n $companyAssociations,\n $contactAssociations,\n $associationsData\n );\n\n $syncedOpportunity = $this->importOrUpdateOpportunity(\n $deal,\n isset($existingCrmIdSet[(string) $deal['id']])\n );\n if ($syncedOpportunity) {\n $syncedOpportunities['success'][] = $syncedOpportunity;\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [\n 'teamId' => $this->team->getId(),\n 'crmId' => $deal['id'],\n 'error' => $e->getMessage(),\n ]);\n $syncedOpportunities['failed_ids'][] = $deal['id'];\n $syncedOpportunities['errors'][$deal['id']] = $e->getMessage();\n }\n }\n\n return $syncedOpportunities;\n }\n\n /**\n * Prepare associated entities for opportunities with optimized batch processing\n * Returns structured data with CRM ID to DB ID mappings for each opportunity\n */\n private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array\n {\n // Step 1: Collect all unique company and contact IDs from associations\n $allCompanyIds = $this->flattenAssociationIds($companyAssociations);\n $allContactIds = $this->flattenAssociationIds($contactAssociations);\n\n // Step 2: Batch sync missing entities and get CRM ID to DB ID mappings\n $companyIdMappings = [];\n $contactIdMappings = [];\n\n if (! empty($allCompanyIds)) {\n $companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);\n }\n\n if (! empty($allContactIds)) {\n $contactIdMappings = $this->prepareAssociatedContacts($allContactIds);\n }\n\n return [\n 'company_id_mappings' => $companyIdMappings,\n 'contact_id_mappings' => $contactIdMappings,\n ];\n }\n\n /**\n * Flatten association data to get unique IDs\n */\n private function flattenAssociationIds(array $associations): array\n {\n $ids = [];\n foreach ($associations as $dealAssociations) {\n if (is_array($dealAssociations)) {\n foreach ($dealAssociations as $id) {\n $ids[$id] = true;\n }\n }\n }\n\n return array_keys($ids);\n }\n\n /**\n * Batch sync missing accounts\n */\n private function prepareAssociatedAccounts(array $companyIds): array\n {\n // Find which accounts already exist\n $existingAccounts = $this->crmEntityRepository\n ->findAccountsByExternalIds($this->config, $companyIds);\n\n $existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();\n\n $existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {\n return [$account->getCrmProviderId() => $account->getId()];\n })->toArray();\n\n $missingCompanyIds = array_diff($companyIds, $existingCompanyIds);\n\n if (empty($missingCompanyIds)) {\n return $existingAccountsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [\n 'teamId' => $this->team->getUuid(),\n 'total_companies' => count($companyIds),\n 'existing_companies' => count($existingCompanyIds),\n 'missing_companies' => count($missingCompanyIds),\n ]);\n\n // we already have limit on opportunity ids count\n // Initialize variable before try block\n $syncedAccountsData = [];\n\n try {\n $syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [\n 'size' => count($missingCompanyIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedAccountsData = [];\n }\n\n return $existingAccountsData + $syncedAccountsData;\n }\n\n /**\n * Prepare associated contacts - find existing and sync missing ones\n * Returns mapping of CRM ID to DB ID\n */\n private function prepareAssociatedContacts(array $contactIds): array\n {\n // Find which contacts already exist\n $existingContacts = $this->crmEntityRepository\n ->findContactsByExternalIds($this->config, $contactIds);\n\n $existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();\n\n // Create mapping for existing contacts\n $existingContactsData = $existingContacts->mapWithKeys(function ($contact) {\n return [$contact->getCrmProviderId() => $contact->getId()];\n })->toArray();\n\n $missingContactIds = array_diff($contactIds, $existingContactIds);\n\n if (empty($missingContactIds)) {\n return $existingContactsData;\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [\n 'teamId' => $this->team->getUuid(),\n 'total_contacts' => count($contactIds),\n 'existing_contacts' => count($existingContactIds),\n 'missing_contacts' => count($missingContactIds),\n ]);\n\n // Sync missing contacts using batch API\n try {\n $syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [\n 'size' => count($missingContactIds),\n 'error' => $e->getMessage(),\n ]);\n $syncedContactsData = [];\n }\n\n return $existingContactsData + $syncedContactsData;\n }\n\n private function batchSyncCrmObjects(string $objectType, array $crmIds): array\n {\n $syncObjects = [];\n $crmObjectIds = array_values($crmIds);\n\n foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {\n try {\n $objects = $objectType === 'companies' ?\n $this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :\n $this->client->getContactsByIds($chunk, $this->getContactFields());\n\n foreach ($objects as $objectId => $objectData) {\n $this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);\n }\n\n $this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [\n 'requested_count' => count($chunk),\n 'synced_count' => count($objects),\n ]);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [\n 'ids' => $chunk,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n return $syncObjects;\n }\n\n private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void\n {\n try {\n $object = $objectType === 'companies' ?\n $this->importAccount($objectData) :\n $this->importContact($objectData);\n\n if ($object) {\n $syncObjects[$object->getCrmProviderId()] = $object->getId();\n }\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [\n 'id' => $objectId,\n 'error' => $e->getMessage(),\n ]);\n }\n }\n\n /**\n * Prepare associations for a single opportunity\n *\n * The return value is an array with the following structure:\n * [\n * 'companies' => [\n * $companyCrmId => $companyId,\n * ...\n * ],\n * 'contacts' => [\n * $contactCrmId => $contactId,\n * ...\n * ],\n * 'account_id' => $accountId,\n * ]\n */\n private function prepareAssociationsForOpportunity(\n string $oppCrmId,\n array $companyAssociations,\n array $contactAssociations,\n array $associationsData\n ): array {\n $associations = [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n\n $oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];\n foreach ($oppCompanyIds as $companyCrmId) {\n if (isset($associationsData['company_id_mappings'][$companyCrmId])) {\n $associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];\n\n // Set primary account (first company becomes primary account)\n if ($associations['account_id'] === null) {\n $associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];\n }\n }\n }\n\n $oppContactIds = $contactAssociations[$oppCrmId] ?? [];\n foreach ($oppContactIds as $contactCrmId) {\n if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {\n $associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];\n }\n }\n\n return $associations;\n }\n\n /**\n * Update only associations for an opportunity\n */\n private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void\n {\n // Update contact associations\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n // Update company (account) associations\n $this->updateOpportunityAccount($opportunity, $associations['account_id']);\n }\n\n /**\n * Remove all contact associations from an opportunity\n */\n private function removeAllOpportunityContacts(Opportunity $opportunity): void\n {\n $currentCount = (int) $opportunity->contacts()->count();\n\n if ($currentCount > 0) {\n $opportunity->contacts()->detach();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_count' => $currentCount,\n ]);\n }\n }\n\n private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void\n {\n if ($accountId === null) {\n // No account ID provided - keep current account\n return;\n }\n\n $currentAccountId = $opportunity->getAccountId();\n\n // Only update if account has changed\n if ($currentAccountId !== $accountId) {\n $opportunity->account_id = $accountId;\n $opportunity->save();\n\n $this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [\n 'opportunity_id' => $opportunity->getId(),\n 'old_account_id' => $currentAccountId,\n 'new_account_id' => $accountId,\n ]);\n }\n }\n\n /**\n * Find existing opportunities by external IDs (OPTIMIZED VERSION)\n * Uses batch query for better performance\n */\n private function findExistingOpportunities(array $crmIds): Collection\n {\n return $this->crmEntityRepository\n ->findOpportunitiesByExternalIds($this->config, $crmIds);\n }\n\n private function processOpportunityBatch(array $opportunities): int\n {\n $syncedOpportunities = $this->importOpportunityBatch($opportunities);\n\n return count($syncedOpportunities['success'] ?? []);\n }\n\n /**\n * Convert single deal associations from HubSpot format to internal format\n * Handles both HubSpot SDK objects and array formats\n *\n * @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed\n *\n * @return array Processed associations with DB IDs\n */\n private function convertDealAssociations(array $opportunityAssociations): array\n {\n $associations = $this->initializeAssociationsStructure();\n\n if (empty($opportunityAssociations)) {\n return $associations;\n }\n\n $associationIds = $this->extractAssociationIds($opportunityAssociations);\n\n $this->processCompanyAssociations($associationIds, $associations);\n $this->processContactAssociations($associationIds, $associations);\n\n return $associations;\n }\n\n private function initializeAssociationsStructure(): array\n {\n return [\n 'companies' => [],\n 'contacts' => [],\n 'account_id' => null, // Primary account for opportunity\n ];\n }\n\n private function extractAssociationIds(array $opportunityAssociations): array\n {\n $associationIds = [];\n\n foreach ($opportunityAssociations as $type => $associationData) {\n if (! empty($associationData)) {\n $associationIds[$type] = $this->convertSingleDealAssociations($associationData);\n }\n }\n\n return $associationIds;\n }\n\n private function processCompanyAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['companies'])) {\n return;\n }\n\n $companyId = $associationIds['companies'][0];\n $account = $this->findOrSyncAccount($companyId);\n\n if ($account instanceof Account) {\n $associations['companies'][$companyId] = $account->getId();\n $associations['account_id'] = $account->getId();\n }\n }\n\n private function processContactAssociations(array $associationIds, array &$associations): void\n {\n if (empty($associationIds['contacts'])) {\n return;\n }\n\n foreach ($associationIds['contacts'] as $contactId) {\n $contact = $this->findOrSyncContact($contactId);\n\n if ($contact instanceof Contact) {\n $associations['contacts'][$contactId] = $contact->getId();\n }\n }\n }\n\n private function findOrSyncAccount(string $companyId): ?Account\n {\n $account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);\n\n if (! $account instanceof Account) {\n $account = $this->syncAccount($companyId);\n }\n\n return $account;\n }\n\n private function findOrSyncContact(string $contactId): ?Contact\n {\n $contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);\n\n if (! $contact instanceof Contact) {\n $contact = $this->syncContact($contactId);\n }\n\n return $contact;\n }\n\n private function convertSingleDealAssociations($opportunityAssociations = null): array\n {\n $associationData = [];\n\n if ($opportunityAssociations === null) {\n return $associationData;\n }\n\n // Handle array input (from extractAssociationIds)\n if (is_array($opportunityAssociations)) {\n return $opportunityAssociations;\n }\n\n // Handle CollectionResponseAssociatedId object\n if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {\n foreach ($opportunityAssociations->getResults() as $association) {\n $associationData[] = $association->getId();\n }\n }\n\n return $associationData;\n }\n\n private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity\n {\n if (empty($crmData['properties'])) {\n return null;\n }\n\n $crmId = (string) $crmData['id'];\n $properties = $crmData['properties'];\n $associations = $crmData['associations'] ?? [];\n\n $opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(\n $this->config,\n $crmId\n );\n\n if ($opportunityExists) {\n return $this->updateOpportunity($crmId, $properties, $associations);\n } else {\n return $this->createOpportunity($crmId, $properties, $associations);\n }\n }\n\n /**\n * Create new opportunity\n */\n private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n if (! $accountId) {\n return null;\n }\n\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n if (! $businessProcess) {\n return null;\n }\n\n $stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);\n if (! $stage) {\n return null;\n }\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->importOpportunityContacts($opportunity, $associations['contacts']);\n\n if ($opportunity->wasRecentlyCreated) {\n MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());\n }\n\n return $opportunity;\n }\n\n /**\n * Update existing opportunity\n */\n private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity\n {\n $accountId = $this->resolveAccountId($associations);\n $businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);\n $stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;\n\n $data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);\n\n $attributes = [\n 'crm_configuration_id' => $this->config->getId(),\n 'crm_provider_id' => $crmId,\n ];\n\n $values = array_merge($attributes, $data);\n $opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);\n\n $this->importExternalFieldData($properties, $opportunity->getId());\n $this->updateOpportunityAssociations($opportunity, $associations);\n\n return $opportunity;\n }\n\n private function resolveAccountId(array $associations): ?int\n {\n if (! empty($associations['accountId'])) {\n return $associations['accountId'];\n }\n\n if (empty($associations)) {\n return null;\n }\n\n // we can't resolve multiple account ids (currently SDK returns one company)\n foreach ($associations['companies'] as $accountId) {\n return $accountId;\n }\n\n return null;\n }\n\n private function buildOpportunityData(\n array $properties,\n ?int $accountId,\n ?BusinessProcess $businessProcess,\n ?Stage $stage\n ): array {\n $ownerId = null;\n $profile = null;\n if (! empty($properties['hubspot_owner_id'])) {\n $ownerId = $properties['hubspot_owner_id'];\n $profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);\n }\n\n $name = 'Unknown';\n if (isset($properties['dealname'])) {\n $name = mb_strimwidth($properties['dealname'], 0, 128);\n }\n\n $amount = $this->resolveAmount($properties);\n $currency = $properties['deal_currency_code'] ?? null;\n\n $closeDate = null;\n if (! empty($properties['closedate'])) {\n $closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');\n }\n\n $remotelyCreatedAt = null;\n if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {\n $date = $this->parseCleanDatetime($properties['createdate']);\n $remotelyCreatedAt = $date?->format('Y-m-d H:i:s');\n }\n\n $closedStages = $this->getClosedDealStages();\n $isWon = in_array($properties['dealstage'], $closedStages['won']);\n $isLost = in_array($properties['dealstage'], $closedStages['lost']);\n\n $data = [\n 'team_id' => $this->team->getId(),\n 'user_id' => $profile ? $profile->user_id : null,\n 'owner_id' => $ownerId,\n 'name' => $name,\n 'value' => ! empty($amount) ? $amount : null,\n 'currency_code' => CurrencyFormatter::formatCode($currency),\n 'close_date' => $closeDate,\n 'is_closed' => $isWon || $isLost,\n 'is_won' => $isWon,\n 'remotely_created_at' => $remotelyCreatedAt,\n 'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),\n 'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),\n ];\n\n if ($accountId) {\n $data['account_id'] = $accountId;\n }\n\n if ($stage) {\n $data['stage_id'] = $stage->id;\n }\n\n if ($businessProcess) {\n $recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);\n if ($recordType) {\n $data['record_type_id'] = $recordType->id;\n }\n }\n\n return $data;\n }\n\n private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess\n {\n if ($pipelineId === null) {\n return null;\n }\n\n if (isset($this->cachedBusinessProcesses[$pipelineId])) {\n return $this->cachedBusinessProcesses[$pipelineId];\n }\n\n $businessProcess = $this->getBusinessProcess($pipelineId);\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->importStages();\n $businessProcess = $this->getBusinessProcess($pipelineId);\n }\n\n if (! $businessProcess instanceof BusinessProcess) {\n $this->logger->info(\n '[HubSpot] Deal is not attached to a pipeline',\n [\n 'pipeline' => $pipelineId]\n );\n }\n\n $this->cachedBusinessProcesses[$pipelineId] = $businessProcess;\n\n return $businessProcess;\n }\n\n private function getBusinessProcess(string $pipelineId): ?BusinessProcess\n {\n return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);\n }\n\n private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage\n {\n if (empty($stageId)) {\n return null;\n }\n\n $cacheKey = $businessProcess->getId() . ':' . $stageId;\n if (isset($this->cachedStages[$cacheKey])) {\n return $this->cachedStages[$cacheKey];\n }\n\n $stage = $this->crmEntityRepository->getPipelineStageByConditions(\n $businessProcess,\n [\n 'crm_provider_id' => $stageId,\n 'type' => Stage::TYPE_OPPORTUNITY,\n ]\n );\n\n if ($stage === null) {\n $this->importStages(null, $stageId);\n }\n\n if ($stage === null) {\n $this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);\n }\n\n $this->cachedStages[$cacheKey] = $stage;\n\n return $stage;\n }\n\n private function resolveAmount(array $properties): ?string\n {\n $amount = null;\n if (! empty($properties['amount'])) {\n $amount = str_replace(',', '', $properties['amount']);\n }\n\n if ($this->config->hasDefaultCurrencyFieldSet()) {\n $valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();\n $amount = $properties[$valueFieldName] ?? $amount;\n }\n\n return $amount;\n }\n\n private function parseCleanDatetime(string $datetime): ?Carbon\n {\n // Treat pre-1980 values as invalid\n $minValidDate = Carbon::parse('1980-01-01 00:00:00');\n\n try {\n $date = Carbon::parse($datetime);\n\n if ($minValidDate->gt($date)) {\n return null;\n }\n\n return $date;\n } catch (Exception) {\n return null; // On parse error, treat as null\n }\n }\n\n private function resolveDealProbability(?string $stageProbability): int\n {\n if ($stageProbability === null) {\n return 0;\n }\n\n $probability = (float) $stageProbability;\n\n return $probability > 1 ? 0 : (int) ($probability * 100);\n }\n\n private function resolveForecastCategory(?string $forecastCategory): string\n {\n if (! $forecastCategory) {\n return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;\n }\n\n $forecastCategory = str_replace('_', ' ', $forecastCategory);\n\n return ucwords(strtolower($forecastCategory));\n }\n\n private function importExternalFieldData(array $properties, int $opportunityId): void\n {\n $crmFields = $this->getOpportunitySyncableFields();\n $this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);\n }\n\n private function importOpportunityContacts(Opportunity $opportunity, array $associations): void\n {\n // Handle empty or missing contact associations\n if (empty($associations)) {\n // Remove all existing contact associations if none provided\n $this->removeAllOpportunityContacts($opportunity);\n\n return;\n }\n\n // Use differential sync approach for better performance and accuracy\n $this->syncOpportunityContactsDifferential($opportunity, $associations);\n }\n\n /**\n * Sync opportunity contacts using differential approach\n * This compares current vs new associations and only makes necessary changes\n */\n private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void\n {\n $currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);\n $contactAssociationIds = array_keys($contactAssociations);\n\n $contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);\n $contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);\n\n if (empty($contactsToAdd) && empty($contactsToRemove)) {\n return;\n }\n\n $this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);\n\n $this->removeContactAssociations($opportunity, $contactsToRemove);\n $this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);\n }\n\n private function getCurrentContactCrmIds(Opportunity $opportunity): array\n {\n return $opportunity->contacts()\n ->pluck('contacts.crm_provider_id')\n ->toArray();\n }\n\n private function logContactAssociationChanges(\n Opportunity $opportunity,\n array $currentContactCrmIds,\n array $contactAssociations,\n array $contactsToAdd,\n array $contactsToRemove\n ): void {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [\n 'opportunity_id' => $opportunity->getId(),\n 'current_contacts' => $currentContactCrmIds,\n 'new_contacts' => $contactAssociations,\n 'contacts_to_add' => $contactsToAdd,\n 'contacts_to_remove' => $contactsToRemove,\n ]);\n }\n\n private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void\n {\n if (empty($contactsToRemove)) {\n return;\n }\n\n $contactsToDetach = $opportunity->contacts()\n ->whereIn('contacts.crm_provider_id', $contactsToRemove)\n ->pluck('contacts.id')\n ->toArray();\n\n if (! empty($contactsToDetach)) {\n $opportunity->contacts()->detach($contactsToDetach);\n\n $this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'removed_contact_crm_ids' => $contactsToRemove,\n 'removed_contact_count' => count($contactsToDetach),\n ]);\n }\n }\n\n private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void\n {\n if (empty($contactsToAdd)) {\n return;\n }\n\n $contactsAdded = [];\n foreach ($contactsToAdd as $crmId) {\n $id = $contactAssociations[$crmId];\n\n if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {\n $contactsAdded[] = $crmId;\n }\n }\n\n $this->logAddedContacts($opportunity, $contactsAdded);\n }\n\n private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool\n {\n try {\n $contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);\n\n if (! $contact) {\n return false;\n }\n\n return $this->performContactAttachment($opportunity, $contact, $crmId);\n } catch (\\Throwable $e) {\n $this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [\n 'opportunity_id' => $opportunity->getId(),\n 'contact_crm_id' => $crmId,\n 'error' => $e->getMessage(),\n ]);\n\n return false;\n }\n }\n\n private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool\n {\n try {\n $opportunity->contacts()->attach($contact->getId(), [\n 'crm_provider_id' => $crmId,\n ]);\n\n return true;\n } catch (\\Illuminate\\Database\\QueryException $e) {\n if (str_contains($e->getMessage(), 'Duplicate entry')) {\n $this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [\n 'contact_id' => $contact->getId(),\n 'contact_crm_id' => $crmId,\n 'opportunity_id' => $opportunity->getId(),\n ]);\n\n return false;\n }\n\n throw $e;\n }\n }\n\n private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void\n {\n if (! empty($contactsAdded)) {\n $this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [\n 'opportunity_id' => $opportunity->getId(),\n 'contacts_to_add_count' => count($contactsAdded),\n 'added_contact_crm_ids' => $contactsAdded,\n 'added_contacts_count' => count($contactsAdded),\n ]);\n }\n }\n}","role_description":"text entry area","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Sync Changes","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide This Notification","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":false,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Code changed:","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.049609374,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"1","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"role_description":"text"},{"role":"AXButton","text":"Previous Highlighted Error","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.00859375,"height":0.0},"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.23320313,"top":1.0,"width":0.008203125,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextArea","text":"<template>\n <WelcomeLayout\n title=\"Account disconnected\"\n textPosition=\"center\"\n :icon=\"faUnlink\"\n :class=\"$style.layout\"\n >\n <div :class=\"$style.container\" v-if=\"providersLoaded\">\n <p>\n <strong>\n It looks like your {{ localProvider.displayName }} account has become\n disconnected\n </strong>\n </p>\n <p :class=\"$style.small\">Please re-connect to continue</p>\n <p v-if=\"isInIframe\">\n We'll open the {{ localProvider.displayName }} authentication in a new\n tab. Please return here and refresh the page once complete\n </p>\n\n <GoogleLikeButton\n v-if=\"localProvider.viaIntegrationApp && crmTokenLoaded\"\n as=\"a\"\n :key=\"localProvider.name\"\n :brand-logo=\"localProvider.name\"\n :class=\"$style.connectButton\"\n @click=\"integrationAppOnClick\"\n >\n Sign in with {{ localProvider.displayName }}\n </GoogleLikeButton>\n <GoogleLikeButton\n v-if=\"!localProvider.viaIntegrationApp\"\n as=\"a\"\n :key=\"localProvider.name\"\n :href=\"`/auth/redirect/${localProvider.name}`\"\n :target=\"target\"\n :brand-logo=\"localProvider.name\"\n :class=\"$style.connectButton\"\n >\n Sign in with {{ localProvider.displayName }}\n </GoogleLikeButton>\n </div>\n <BuildInfo />\n\n <KioskBanner />\n </WelcomeLayout>\n</template>\n\n<script>\nimport window from \"window\";\nimport axios from \"axios\";\nimport { faUnlink } from \"@fortawesome/pro-regular-svg-icons\";\nimport isInIframe from \"@/utils/isInIframe\";\nimport BuildInfo from \"@/components/layout/BuildInfo/BuildInfo.vue\";\nimport KioskBanner from \"@/components/shared/KioskBanner/KioskBanner.vue\";\nimport WelcomeLayout from \"@/components/layout/WelcomeLayout/WelcomeLayout.vue\";\nimport GoogleLikeButton from \"@/components/shared/Buttons/GoogleLikeButton.vue\";\nimport { showSnackbarError, normalizeError } from \"@/utils/index\";\nimport { IntegrationAppClient } from \"@integration-app/sdk\";\n\nexport default {\n name: \"ConnectPage\",\n components: {\n BuildInfo,\n KioskBanner,\n WelcomeLayout,\n GoogleLikeButton,\n },\n data() {\n return {\n ...window.connectData,\n crmToken: null,\n faUnlink,\n isInIframe,\n providers: [],\n providersLoaded: false,\n crmTokenLoaded: false,\n };\n },\n computed: {\n localProvider() {\n return this.providers.find((e) => e.name === this.provider);\n },\n target() {\n return this.isInIframe ? \"_blank\" : null;\n },\n },\n created() {\n this.getProviders();\n },\n mounted() {\n this.showErrors();\n },\n watch: {\n providersLoaded() {\n if (this.providersLoaded) {\n this.prepareIntegrationAppConnection();\n }\n },\n },\n methods: {\n showErrors() {\n if (!this.error) return;\n\n showSnackbarError(this.error, undefined, undefined, false);\n },\n unwrapEntityResponse({ data }) {\n return data.map(({ icon, name, displayName, viaIntegrationApp }) => {\n return { icon, name, displayName, viaIntegrationApp };\n });\n },\n async getProviders() {\n try {\n const response = await axios.get(\"/api/v1/connect-providers\");\n this.providers = this.unwrapEntityResponse(response);\n this.providersLoaded = true;\n } catch {\n showSnackbarError(\n \"An error occurred, while loading form data (connect providers).\",\n );\n }\n },\n async prepareIntegrationAppConnection() {\n if (this.localProvider.viaIntegrationApp) {\n try {\n const response = await axios.get(\"/api/v1/integration-app-token\");\n this.crmToken = response.data.token;\n this.crmTokenLoaded = true;\n } catch (error) {\n console.log(error);\n showSnackbarError(\n `An error occurred while preparing the page.\n Try refreshing, if the error persists get in touch with the Jiminny team.`,\n );\n }\n }\n },\n async integrationAppOnClick() {\n const integrationApp = new IntegrationAppClient({\n token: this.crmToken,\n });\n\n const connection = await integrationApp\n .integration(this.localProvider.name)\n .openNewConnection({\n showPoweredBy: false,\n allowMultipleConnections: false,\n });\n\n console.log('[IntegrationApp] openNewConnection resolved:', JSON.stringify(connection));\n\n // [IntegrationApp] openNewConnection resolved: {\n // \"id\":\"69e0b41a67d0068c2ca0b48e\",\n // \"name\":\"Zoho CRM\",\n // \"userId\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\n // \"tenantId\":\"69e0b3faef3e7b6248189289\",\n // \"isTest\":false,\n // \"connected\":true,\n // \"state\":\"READY\",\n // \"errors\":[],\n // \"integrationId\":\"66fe6c913202f3a165e3c14d\",\n // \"externalAppId\":\"6671653e7e2d642e4e41b0fa\",\n // \"authOptionKey\":\"\",\n // \"createdAt\":\"2026-04-16T10:04:10.420Z\",\n // \"updatedAt\":\"2026-04-16T10:04:10.575Z\",\n // \"retryAttempts\":0,\n // \"isDeactivated\":false\n // }\n\n if (connection && connection.disconnected !== true && connection.connected !== false) {\n console.log('[IntegrationApp] connection condition matched');\n try {\n const saveRequest = await axios.post(\n \"/api/v1/integration-app-connect\",\n );\n if (saveRequest.data && saveRequest.data.success === true) {\n /** If all is good refresh the page here */\n window.location = \"/dashboard\";\n return;\n }\n\n throw new Error(saveRequest.data.message);\n } catch (error) {\n console.log(error);\n showSnackbarError(normalizeError(error));\n }\n }\n },\n },\n};\n</script>\n\n<style module lang=\"less\" src=\"./connect.less\"></style>","depth":4,"value":"<template>\n <WelcomeLayout\n title=\"Account disconnected\"\n textPosition=\"center\"\n :icon=\"faUnlink\"\n :class=\"$style.layout\"\n >\n <div :class=\"$style.container\" v-if=\"providersLoaded\">\n <p>\n <strong>\n It looks like your {{ localProvider.displayName }} account has become\n disconnected\n </strong>\n </p>\n <p :class=\"$style.small\">Please re-connect to continue</p>\n <p v-if=\"isInIframe\">\n We'll open the {{ localProvider.displayName }} authentication in a new\n tab. Please return here and refresh the page once complete\n </p>\n\n <GoogleLikeButton\n v-if=\"localProvider.viaIntegrationApp && crmTokenLoaded\"\n as=\"a\"\n :key=\"localProvider.name\"\n :brand-logo=\"localProvider.name\"\n :class=\"$style.connectButton\"\n @click=\"integrationAppOnClick\"\n >\n Sign in with {{ localProvider.displayName }}\n </GoogleLikeButton>\n <GoogleLikeButton\n v-if=\"!localProvider.viaIntegrationApp\"\n as=\"a\"\n :key=\"localProvider.name\"\n :href=\"`/auth/redirect/${localProvider.name}`\"\n :target=\"target\"\n :brand-logo=\"localProvider.name\"\n :class=\"$style.connectButton\"\n >\n Sign in with {{ localProvider.displayName }}\n </GoogleLikeButton>\n </div>\n <BuildInfo />\n\n <KioskBanner />\n </WelcomeLayout>\n</template>\n\n<script>\nimport window from \"window\";\nimport axios from \"axios\";\nimport { faUnlink } from \"@fortawesome/pro-regular-svg-icons\";\nimport isInIframe from \"@/utils/isInIframe\";\nimport BuildInfo from \"@/components/layout/BuildInfo/BuildInfo.vue\";\nimport KioskBanner from \"@/components/shared/KioskBanner/KioskBanner.vue\";\nimport WelcomeLayout from \"@/components/layout/WelcomeLayout/WelcomeLayout.vue\";\nimport GoogleLikeButton from \"@/components/shared/Buttons/GoogleLikeButton.vue\";\nimport { showSnackbarError, normalizeError } from \"@/utils/index\";\nimport { IntegrationAppClient } from \"@integration-app/sdk\";\n\nexport default {\n name: \"ConnectPage\",\n components: {\n BuildInfo,\n KioskBanner,\n WelcomeLayout,\n GoogleLikeButton,\n },\n data() {\n return {\n ...window.connectData,\n crmToken: null,\n faUnlink,\n isInIframe,\n providers: [],\n providersLoaded: false,\n crmTokenLoaded: false,\n };\n },\n computed: {\n localProvider() {\n return this.providers.find((e) => e.name === this.provider);\n },\n target() {\n return this.isInIframe ? \"_blank\" : null;\n },\n },\n created() {\n this.getProviders();\n },\n mounted() {\n this.showErrors();\n },\n watch: {\n providersLoaded() {\n if (this.providersLoaded) {\n this.prepareIntegrationAppConnection();\n }\n },\n },\n methods: {\n showErrors() {\n if (!this.error) return;\n\n showSnackbarError(this.error, undefined, undefined, false);\n },\n unwrapEntityResponse({ data }) {\n return data.map(({ icon, name, displayName, viaIntegrationApp }) => {\n return { icon, name, displayName, viaIntegrationApp };\n });\n },\n async getProviders() {\n try {\n const response = await axios.get(\"/api/v1/connect-providers\");\n this.providers = this.unwrapEntityResponse(response);\n this.providersLoaded = true;\n } catch {\n showSnackbarError(\n \"An error occurred, while loading form data (connect providers).\",\n );\n }\n },\n async prepareIntegrationAppConnection() {\n if (this.localProvider.viaIntegrationApp) {\n try {\n const response = await axios.get(\"/api/v1/integration-app-token\");\n this.crmToken = response.data.token;\n this.crmTokenLoaded = true;\n } catch (error) {\n console.log(error);\n showSnackbarError(\n `An error occurred while preparing the page.\n Try refreshing, if the error persists get in touch with the Jiminny team.`,\n );\n }\n }\n },\n async integrationAppOnClick() {\n const integrationApp = new IntegrationAppClient({\n token: this.crmToken,\n });\n\n const connection = await integrationApp\n .integration(this.localProvider.name)\n .openNewConnection({\n showPoweredBy: false,\n allowMultipleConnections: false,\n });\n\n console.log('[IntegrationApp] openNewConnection resolved:', JSON.stringify(connection));\n\n // [IntegrationApp] openNewConnection resolved: {\n // \"id\":\"69e0b41a67d0068c2ca0b48e\",\n // \"name\":\"Zoho CRM\",\n // \"userId\":\"1ece66c8-feb1-4df1-b321-21607daf4623\",\n // \"tenantId\":\"69e0b3faef3e7b6248189289\",\n // \"isTest\":false,\n // \"connected\":true,\n // \"state\":\"READY\",\n // \"errors\":[],\n // \"integrationId\":\"66fe6c913202f3a165e3c14d\",\n // \"externalAppId\":\"6671653e7e2d642e4e41b0fa\",\n // \"authOptionKey\":\"\",\n // \"createdAt\":\"2026-04-16T10:04:10.420Z\",\n // \"updatedAt\":\"2026-04-16T10:04:10.575Z\",\n // \"retryAttempts\":0,\n // \"isDeactivated\":false\n // }\n\n if (connection && connection.disconnected !== true && connection.connected !== false) {\n console.log('[IntegrationApp] connection condition matched');\n try {\n const saveRequest = await axios.post(\n \"/api/v1/integration-app-connect\",\n );\n if (saveRequest.data && saveRequest.data.success === true) {\n /** If all is good refresh the page here */\n window.location = \"/dashboard\";\n return;\n }\n\n throw new Error(saveRequest.data.message);\n } catch (error) {\n console.log(error);\n showSnackbarError(normalizeError(error));\n }\n }\n },\n },\n};\n</script>\n\n<style module lang=\"less\" src=\"./connect.less\"></style>","role_description":"text entry area","is_enabled":true,"is_focused":true,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Project","depth":3,"role_description":"text"},{"role":"AXButton","text":"Project","depth":3,"bounds":{"left":0.0140625,"top":0.041666668,"width":0.028515626,"height":0.021527778},"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.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Expand Selected","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Collapse All","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Options","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Hide","depth":4,"bounds":{"left":0.23320313,"top":1.0,"width":0.01015625,"height":0.0},"role_description":"button","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false}]...
|
6089929419086115132
|
-8178086448081891036
|
idle
|
accessibility
|
NULL
|
Project: faVsco.js, menu
JY-20692-fix-integration- Project: faVsco.js, menu
JY-20692-fix-integration-app-[API_KEY], menu
Start Listening for PHP Debug Connections
AutomatedReportsCommandTest
Run 'AutomatedReportsCommandTest'
Debug 'AutomatedReportsCommandTest'
More Actions
JetBrains AI
Search Everywhere
IDE and Project Settings
Show Replace Field
Search History
cachedStages
New Line
Match Case
Words
Regex
Replace History
Replace
New Line
Preserve case
2/4
Previous Occurrence
Next Occurrence
Filter Search Results
Open in Window, Multiple Cursors
Click to highlight
Close
Code changed:
Hide
Sync Changes
Hide This Notification
33
2
19
Previous Highlighted Error
Next Highlighted Error
<?php
declare(strict_types=1);
namespace Jiminny\Services\Crm\Hubspot\ServiceTraits;
use Carbon\Carbon;
use HubSpot\Client\Crm\Deals\Model\CollectionResponseAssociatedId;
use Jiminny\Exceptions\InvalidArgumentException;
use Jiminny\Models\Account;
use Exception;
use Jiminny\Component\DealInsights\Forecast\Forecast;
use Jiminny\Jobs\Crm\MatchActivitiesToNewOpportunity;
use Jiminny\Models\Contact;
use Jiminny\Models\Crm\BusinessProcess;
use Jiminny\Exceptions\CrmException;
use Jiminny\Models\Opportunity;
use Illuminate\Support\Collection;
use Jiminny\Models\Stage;
use Jiminny\Repositories\Crm\CrmEntityRepository;
use Jiminny\Services\Crm\Hubspot\DealFieldsService;
use Jiminny\Services\Crm\Hubspot\OpportunitySyncStrategy\HubspotSingleSyncStrategy;
use Jiminny\Services\Crm\Hubspot\WebhookSyncBatchProcessor;
use Jiminny\Services\Crm\OpportunitySyncStrategyResolver;
use Jiminny\Utils\CurrencyFormatter;
/**
* Optimized sync methods for better performance
* These methods can be integrated into SyncCrmEntitiesTrait for significant performance gains
*/
trait OpportunitySyncTrait
{
private const int BATCH_SIZE = 100;
private const int BATCH_PROCESS_SIZE = 800;
protected OpportunitySyncStrategyResolver $opportunitySyncStrategyResolver;
protected CrmEntityRepository $crmEntityRepository;
protected DealFieldsService $dealFieldsService;
private ?array $cachedClosedDealStages = null;
private array $cachedBusinessProcesses = [];
private array $cachedStages = [];
public function syncOpportunities(array $parameters, ?string $strategy = null): int
{
$strategies = $this->opportunitySyncStrategyResolver->getStrategies($this->config, $strategy);
$parameters['config'] = $this->config;
$syncCount = 0;
$reportedTotal = 0;
$lastSyncedId = [];
try {
foreach ($strategies as $strategyName => $syncStrategy) {
$this->logger->info(
'[' . $this->getDisplayName() . '] Syncing opportunities using strategy: ' .
$strategyName
);
$total = 0;
$lastId = null;
$buffer = [];
// HubspotWebhookBatchSyncStrategy returns empty generator, this is for other strategies
foreach ($syncStrategy->fetchOpportunities($parameters, $total, $lastId) as $hsOpportunity) {
$buffer[] = $hsOpportunity;
// process every 800 rows (fits < 1 000 association limit)
if (\count($buffer) >= self::BATCH_PROCESS_SIZE) {
$syncCount += $this->processOpportunityBatch($buffer);
$buffer = [];
}
}
// leftovers
if ($buffer) {
$syncCount += $this->processOpportunityBatch($buffer);
}
$reportedTotal += $total;
$lastSyncedId = $lastId;
}
} catch (\HubSpot\Client\Crm\Deals\ApiException | CrmException $e) {
$this->handleSyncException($e, $parameters);
}
$this->logger->info(
'[HubSpot] Synced opportunities',
[
'team' => $this->team->getId(),
'sync_count' => $syncCount,
'total' => $reportedTotal,
'last_synced_id' => $lastSyncedId,
]
);
return $reportedTotal;
}
private function handleSyncException(\Throwable $e, array $parameters): void
{
if (($parameters['since'] ?? null) instanceof Carbon) {
$parameters['since'] = $parameters['since']->toDateTimeString();
}
$parameters['config'] = $this->config->getId();
$this->logger->warning('[' . $this->getDisplayName() . '] Sync opportunities failed', [
'teamId' => $this->team->getUuid(),
'parameters' => $parameters,
'reason' => $e->getMessage(),
]);
}
/**
* @inheritdoc
*/
public function syncOpportunity(string $crmId): ?Opportunity
{
$strategy = $this->opportunitySyncStrategyResolver->resolve(
$this->config,
OpportunitySyncStrategyResolver::SINGLE_SYNC_OPPORTUNITY_STRATEGY,
);
$parameters = [
'config' => $this->config,
'crm_id' => $crmId,
];
try {
if (! $strategy instanceof HubspotSingleSyncStrategy) {
throw new InvalidArgumentException('Strategy must by HubspotSingleSyncStrategy');
}
$hsOpportunity = $strategy->fetchOpportunity($parameters);
} catch (\HubSpot\Client\Crm\Deals\ApiException $e) {
$this->logger->info('[' . $this->getDisplayName() . '] Opportunity not found', [
'teamId' => $this->team->getUuid(),
'crmId' => $crmId,
'reason' => $e->getMessage(),
]);
return null;
}
$hsOpportunity['associations'] = $this->convertDealAssociations($hsOpportunity['associations'] ?? []);
return $this->importOrUpdateOpportunity($hsOpportunity);
}
/**
* Process webhook-collected opportunity batches.
*
* Drains Redis sets containing company CRM IDs collected from webhook events
* and dispatches ImportOpportunityBatch jobs for batch processing.
*
* @return int Number of opportunity IDs dispatched to jobs
*/
public function batchSyncOpportunities(): int
{
$configId = $this->team->getCrmConfiguration()->getId();
return $this->batchProcessor->processBatchesForObjectType(
WebhookSyncBatchProcessor::OBJECT_TYPE_DEAL,
$configId
);
}
/**
* Import a batch of opportunities by their CRM IDs.
* Fetches opportunity data from HubSpot API and delegates to importOpportunityBatch().
*
* @param array<string> $crmIds HubSpot deal CRM IDs
*
* @return array{success: array, failed_ids: array, errors?: array<string, string>}
*/
public function importOpportunityBatchByIds(array $crmIds): array
{
$fields = $this->dealFieldsService->getFieldsForConfiguration($this->config);
$allDeals = [];
foreach (array_chunk($crmIds, self::BATCH_SIZE) as $chunk) {
$deals = $this->client->getOpportunitiesByIds($chunk, $fields);
foreach ($deals as $deal) {
$allDeals[] = $deal;
}
}
// IDs not returned by HubSpot are likely deleted or inaccessible deals.
// These are not failures — retrying won't bring them back.
$fetchedIds = array_map('strval', array_column($allDeals, 'id'));
$notFoundIds = array_values(array_diff(array_map('strval', $crmIds), $fetchedIds));
if (! empty($notFoundIds)) {
$this->logger->info('[' . $this->getDisplayName() . '] CRM IDs not found in HubSpot (likely deleted)', [
'teamId' => $this->team->getId(),
'notFoundCount' => \count($notFoundIds),
'notFoundIds' => $notFoundIds,
'requestedCount' => \count($crmIds),
'fetchedCount' => \count($allDeals),
]);
}
if (empty($allDeals)) {
return ['success' => [], 'failed_ids' => []];
}
return $this->importOpportunityBatch($allDeals);
}
private function getClosedDealStages(): array
{
if ($this->cachedClosedDealStages !== null) {
return $this->cachedClosedDealStages;
}
$stages = $this->crmEntityRepository->getOpportunityClosedStages($this->config);
$data = [
'lost' => [],
'won' => [],
];
foreach ($stages as $stage) {
if ($stage->probability == 0.00) {
$data['lost'][] = $stage->crm_provider_id;
}
if ($stage->probability == 100.00) {
$data['won'][] = $stage->crm_provider_id;
}
}
$this->cachedClosedDealStages = $data;
return $data;
}
/**
* Import deals into the database with pre-fetched associations.
*
* API calls here (getAssociationsData, getExistingOpportunityCrmIds) are NOT
* caught — if they throw, the exception propagates to ImportOpportunityBatch::handle()
* where Laravel retries the whole job with backoff. After all retries exhausted,
* failed() requeues all IDs to Redis.
*
* The per-deal loop catches exceptions individually. A deal can end up in three states:
* - success: imported/updated successfully
* - failed_ids: exception thrown (DB constraint violation, corrupt data, etc.)
* These are permanent issues — retrying won't fix them.
* - skipped (null): missing dependencies (no account, unknown pipeline/stage).
* This is acceptable — the deal cannot be imported until those exist.
*/
private function importOpportunityBatch(array $deals): array
{
$syncedOpportunities = [
'success' => [],
'failed_ids' => [],
];
$dealIds = array_column($deals, 'id');
// Shared association/existing-ID preparation is batch-level state. If it fails, rethrow so the
// queue job retries the whole batch and eventually requeues all deal IDs back to Redis.
try {
$companyAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'companies');
$contactAssociations = $this->client->getAssociationsData($dealIds, 'deals', 'contacts');
$associationsData = $this->prepareAssociatedEntities($companyAssociations, $contactAssociations);
$existingCrmIds = $this->crmEntityRepository->getExistingOpportunityCrmIds(
$this->config,
array_map('strval', $dealIds)
);
$existingCrmIdSet = array_flip($existingCrmIds);
} catch (\Throwable $e) {
$this->logger->error('[' . $this->getDisplayName() . '] Failed to fetch associations or existing IDs', [
'teamId' => $this->team->getId(),
'dealCount' => count($dealIds),
'error' => $e->getMessage(),
]);
throw $e;
}
foreach ($deals as $deal) {
try {
$deal['associations'] = $this->prepareAssociationsForOpportunity(
$deal['id'],
$companyAssociations,
$contactAssociations,
$associationsData
);
$syncedOpportunity = $this->importOrUpdateOpportunity(
$deal,
isset($existingCrmIdSet[(string) $deal['id']])
);
if ($syncedOpportunity) {
$syncedOpportunities['success'][] = $syncedOpportunity;
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import opportunity', [
'teamId' => $this->team->getId(),
'crmId' => $deal['id'],
'error' => $e->getMessage(),
]);
$syncedOpportunities['failed_ids'][] = $deal['id'];
$syncedOpportunities['errors'][$deal['id']] = $e->getMessage();
}
}
return $syncedOpportunities;
}
/**
* Prepare associated entities for opportunities with optimized batch processing
* Returns structured data with CRM ID to DB ID mappings for each opportunity
*/
private function prepareAssociatedEntities(array $companyAssociations, array $contactAssociations): array
{
// Step 1: Collect all unique company and contact IDs from associations
$allCompanyIds = $this->flattenAssociationIds($companyAssociations);
$allContactIds = $this->flattenAssociationIds($contactAssociations);
// Step 2: Batch sync missing entities and get CRM ID to DB ID mappings
$companyIdMappings = [];
$contactIdMappings = [];
if (! empty($allCompanyIds)) {
$companyIdMappings = $this->prepareAssociatedAccounts($allCompanyIds);
}
if (! empty($allContactIds)) {
$contactIdMappings = $this->prepareAssociatedContacts($allContactIds);
}
return [
'company_id_mappings' => $companyIdMappings,
'contact_id_mappings' => $contactIdMappings,
];
}
/**
* Flatten association data to get unique IDs
*/
private function flattenAssociationIds(array $associations): array
{
$ids = [];
foreach ($associations as $dealAssociations) {
if (is_array($dealAssociations)) {
foreach ($dealAssociations as $id) {
$ids[$id] = true;
}
}
}
return array_keys($ids);
}
/**
* Batch sync missing accounts
*/
private function prepareAssociatedAccounts(array $companyIds): array
{
// Find which accounts already exist
$existingAccounts = $this->crmEntityRepository
->findAccountsByExternalIds($this->config, $companyIds);
$existingCompanyIds = $existingAccounts->pluck('crm_provider_id')->toArray();
$existingAccountsData = $existingAccounts->mapWithKeys(function ($account) {
return [$account->getCrmProviderId() => $account->getId()];
})->toArray();
$missingCompanyIds = array_diff($companyIds, $existingCompanyIds);
if (empty($missingCompanyIds)) {
return $existingAccountsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing accounts', [
'teamId' => $this->team->getUuid(),
'total_companies' => count($companyIds),
'existing_companies' => count($existingCompanyIds),
'missing_companies' => count($missingCompanyIds),
]);
// we already have limit on opportunity ids count
// Initialize variable before try block
$syncedAccountsData = [];
try {
$syncedAccountsData = $this->batchSyncCrmObjects('companies', $missingCompanyIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing accounts', [
'size' => count($missingCompanyIds),
'error' => $e->getMessage(),
]);
$syncedAccountsData = [];
}
return $existingAccountsData + $syncedAccountsData;
}
/**
* Prepare associated contacts - find existing and sync missing ones
* Returns mapping of CRM ID to DB ID
*/
private function prepareAssociatedContacts(array $contactIds): array
{
// Find which contacts already exist
$existingContacts = $this->crmEntityRepository
->findContactsByExternalIds($this->config, $contactIds);
$existingContactIds = $existingContacts->pluck('crm_provider_id')->toArray();
// Create mapping for existing contacts
$existingContactsData = $existingContacts->mapWithKeys(function ($contact) {
return [$contact->getCrmProviderId() => $contact->getId()];
})->toArray();
$missingContactIds = array_diff($contactIds, $existingContactIds);
if (empty($missingContactIds)) {
return $existingContactsData;
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch syncing missing contacts', [
'teamId' => $this->team->getUuid(),
'total_contacts' => count($contactIds),
'existing_contacts' => count($existingContactIds),
'missing_contacts' => count($missingContactIds),
]);
// Sync missing contacts using batch API
try {
$syncedContactsData = $this->batchSyncCrmObjects('contacts', $missingContactIds);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to sync missing contacts', [
'size' => count($missingContactIds),
'error' => $e->getMessage(),
]);
$syncedContactsData = [];
}
return $existingContactsData + $syncedContactsData;
}
private function batchSyncCrmObjects(string $objectType, array $crmIds): array
{
$syncObjects = [];
$crmObjectIds = array_values($crmIds);
foreach (array_chunk($crmObjectIds, self::BATCH_SIZE) as $chunk) {
try {
$objects = $objectType === 'companies' ?
$this->client->getCompaniesByIds($chunk, $this->getCompanyFields()) :
$this->client->getContactsByIds($chunk, $this->getContactFields());
foreach ($objects as $objectId => $objectData) {
$this->importCrmObject($objectType, (string) $objectId, $objectData, $syncObjects);
}
$this->logger->info('[' . $this->getDisplayName() . '] Batch synced ' . $objectType, [
'requested_count' => count($chunk),
'synced_count' => count($objects),
]);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Batch ' . $objectType . ' sync failed', [
'ids' => $chunk,
'error' => $e->getMessage(),
]);
}
}
return $syncObjects;
}
private function importCrmObject(string $objectType, string $objectId, mixed $objectData, array &$syncObjects): void
{
try {
$object = $objectType === 'companies' ?
$this->importAccount($objectData) :
$this->importContact($objectData);
if ($object) {
$syncObjects[$object->getCrmProviderId()] = $object->getId();
}
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to import batch ' . $objectType, [
'id' => $objectId,
'error' => $e->getMessage(),
]);
}
}
/**
* Prepare associations for a single opportunity
*
* The return value is an array with the following structure:
* [
* 'companies' => [
* $companyCrmId => $companyId,
* ...
* ],
* 'contacts' => [
* $contactCrmId => $contactId,
* ...
* ],
* 'account_id' => $accountId,
* ]
*/
private function prepareAssociationsForOpportunity(
string $oppCrmId,
array $companyAssociations,
array $contactAssociations,
array $associationsData
): array {
$associations = [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
$oppCompanyIds = $companyAssociations[$oppCrmId] ?? [];
foreach ($oppCompanyIds as $companyCrmId) {
if (isset($associationsData['company_id_mappings'][$companyCrmId])) {
$associations['companies'][$companyCrmId] = $associationsData['company_id_mappings'][$companyCrmId];
// Set primary account (first company becomes primary account)
if ($associations['account_id'] === null) {
$associations['account_id'] = $associationsData['company_id_mappings'][$companyCrmId];
}
}
}
$oppContactIds = $contactAssociations[$oppCrmId] ?? [];
foreach ($oppContactIds as $contactCrmId) {
if (isset($associationsData['contact_id_mappings'][$contactCrmId])) {
$associations['contacts'][$contactCrmId] = $associationsData['contact_id_mappings'][$contactCrmId];
}
}
return $associations;
}
/**
* Update only associations for an opportunity
*/
private function updateOpportunityAssociations(Opportunity $opportunity, array $associations): void
{
// Update contact associations
$this->importOpportunityContacts($opportunity, $associations['contacts']);
// Update company (account) associations
$this->updateOpportunityAccount($opportunity, $associations['account_id']);
}
/**
* Remove all contact associations from an opportunity
*/
private function removeAllOpportunityContacts(Opportunity $opportunity): void
{
$currentCount = (int) $opportunity->contacts()->count();
if ($currentCount > 0) {
$opportunity->contacts()->detach();
$this->logger->info('[' . $this->getDisplayName() . '] Removed all contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_count' => $currentCount,
]);
}
}
private function updateOpportunityAccount(Opportunity $opportunity, ?int $accountId): void
{
if ($accountId === null) {
// No account ID provided - keep current account
return;
}
$currentAccountId = $opportunity->getAccountId();
// Only update if account has changed
if ($currentAccountId !== $accountId) {
$opportunity->account_id = $accountId;
$opportunity->save();
$this->logger->info('[' . $this->getDisplayName() . '] Updated opportunity account association', [
'opportunity_id' => $opportunity->getId(),
'old_account_id' => $currentAccountId,
'new_account_id' => $accountId,
]);
}
}
/**
* Find existing opportunities by external IDs (OPTIMIZED VERSION)
* Uses batch query for better performance
*/
private function findExistingOpportunities(array $crmIds): Collection
{
return $this->crmEntityRepository
->findOpportunitiesByExternalIds($this->config, $crmIds);
}
private function processOpportunityBatch(array $opportunities): int
{
$syncedOpportunities = $this->importOpportunityBatch($opportunities);
return count($syncedOpportunities['success'] ?? []);
}
/**
* Convert single deal associations from HubSpot format to internal format
* Handles both HubSpot SDK objects and array formats
*
* @param array $opportunityAssociations Raw associations from HubSpot API or pre-processed
*
* @return array Processed associations with DB IDs
*/
private function convertDealAssociations(array $opportunityAssociations): array
{
$associations = $this->initializeAssociationsStructure();
if (empty($opportunityAssociations)) {
return $associations;
}
$associationIds = $this->extractAssociationIds($opportunityAssociations);
$this->processCompanyAssociations($associationIds, $associations);
$this->processContactAssociations($associationIds, $associations);
return $associations;
}
private function initializeAssociationsStructure(): array
{
return [
'companies' => [],
'contacts' => [],
'account_id' => null, // Primary account for opportunity
];
}
private function extractAssociationIds(array $opportunityAssociations): array
{
$associationIds = [];
foreach ($opportunityAssociations as $type => $associationData) {
if (! empty($associationData)) {
$associationIds[$type] = $this->convertSingleDealAssociations($associationData);
}
}
return $associationIds;
}
private function processCompanyAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['companies'])) {
return;
}
$companyId = $associationIds['companies'][0];
$account = $this->findOrSyncAccount($companyId);
if ($account instanceof Account) {
$associations['companies'][$companyId] = $account->getId();
$associations['account_id'] = $account->getId();
}
}
private function processContactAssociations(array $associationIds, array &$associations): void
{
if (empty($associationIds['contacts'])) {
return;
}
foreach ($associationIds['contacts'] as $contactId) {
$contact = $this->findOrSyncContact($contactId);
if ($contact instanceof Contact) {
$associations['contacts'][$contactId] = $contact->getId();
}
}
}
private function findOrSyncAccount(string $companyId): ?Account
{
$account = $this->crmEntityRepository->findAccountByExternalId($this->config, $companyId);
if (! $account instanceof Account) {
$account = $this->syncAccount($companyId);
}
return $account;
}
private function findOrSyncContact(string $contactId): ?Contact
{
$contact = $this->crmEntityRepository->findContactByExternalId($this->config, $contactId);
if (! $contact instanceof Contact) {
$contact = $this->syncContact($contactId);
}
return $contact;
}
private function convertSingleDealAssociations($opportunityAssociations = null): array
{
$associationData = [];
if ($opportunityAssociations === null) {
return $associationData;
}
// Handle array input (from extractAssociationIds)
if (is_array($opportunityAssociations)) {
return $opportunityAssociations;
}
// Handle CollectionResponseAssociatedId object
if ($opportunityAssociations instanceof CollectionResponseAssociatedId) {
foreach ($opportunityAssociations->getResults() as $association) {
$associationData[] = $association->getId();
}
}
return $associationData;
}
private function importOrUpdateOpportunity($crmData, ?bool $exists = null): ?Opportunity
{
if (empty($crmData['properties'])) {
return null;
}
$crmId = (string) $crmData['id'];
$properties = $crmData['properties'];
$associations = $crmData['associations'] ?? [];
$opportunityExists = $exists ?? (bool) $this->crmEntityRepository->findOpportunityByExternalId(
$this->config,
$crmId
);
if ($opportunityExists) {
return $this->updateOpportunity($crmId, $properties, $associations);
} else {
return $this->createOpportunity($crmId, $properties, $associations);
}
}
/**
* Create new opportunity
*/
private function createOpportunity(string $crmId, array $properties, array $associations): ?Opportunity
{
$accountId = $this->resolveAccountId($associations);
if (! $accountId) {
return null;
}
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
if (! $businessProcess) {
return null;
}
$stage = $this->resolveStage($businessProcess, $properties['dealstage'] ?? null);
if (! $stage) {
return null;
}
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->importOpportunityContacts($opportunity, $associations['contacts']);
if ($opportunity->wasRecentlyCreated) {
MatchActivitiesToNewOpportunity::dispatch($opportunity->getId());
}
return $opportunity;
}
/**
* Update existing opportunity
*/
private function updateOpportunity(string $crmId, array $properties, array $associations): Opportunity
{
$accountId = $this->resolveAccountId($associations);
$businessProcess = $this->resolveBusinessProcess($properties['pipeline'] ?? null);
$stage = $businessProcess ? $this->resolveStage($businessProcess, $properties['dealstage'] ?? null) : null;
$data = $this->buildOpportunityData($properties, $accountId, $businessProcess, $stage);
$attributes = [
'crm_configuration_id' => $this->config->getId(),
'crm_provider_id' => $crmId,
];
$values = array_merge($attributes, $data);
$opportunity = $this->crmEntityRepository->upsertOpportunity($attributes, $values);
$this->importExternalFieldData($properties, $opportunity->getId());
$this->updateOpportunityAssociations($opportunity, $associations);
return $opportunity;
}
private function resolveAccountId(array $associations): ?int
{
if (! empty($associations['accountId'])) {
return $associations['accountId'];
}
if (empty($associations)) {
return null;
}
// we can't resolve multiple account ids (currently SDK returns one company)
foreach ($associations['companies'] as $accountId) {
return $accountId;
}
return null;
}
private function buildOpportunityData(
array $properties,
?int $accountId,
?BusinessProcess $businessProcess,
?Stage $stage
): array {
$ownerId = null;
$profile = null;
if (! empty($properties['hubspot_owner_id'])) {
$ownerId = $properties['hubspot_owner_id'];
$profile = $this->crmEntityRepository->findProfileByExternalId($this->config, (string) $ownerId);
}
$name = 'Unknown';
if (isset($properties['dealname'])) {
$name = mb_strimwidth($properties['dealname'], 0, 128);
}
$amount = $this->resolveAmount($properties);
$currency = $properties['deal_currency_code'] ?? null;
$closeDate = null;
if (! empty($properties['closedate'])) {
$closeDate = Carbon::parse($properties['closedate'])->format('Y-m-d');
}
$remotelyCreatedAt = null;
if (! empty($properties['createdate']) && strtotime($properties['createdate'])) {
$date = $this->parseCleanDatetime($properties['createdate']);
$remotelyCreatedAt = $date?->format('Y-m-d H:i:s');
}
$closedStages = $this->getClosedDealStages();
$isWon = in_array($properties['dealstage'], $closedStages['won']);
$isLost = in_array($properties['dealstage'], $closedStages['lost']);
$data = [
'team_id' => $this->team->getId(),
'user_id' => $profile ? $profile->user_id : null,
'owner_id' => $ownerId,
'name' => $name,
'value' => ! empty($amount) ? $amount : null,
'currency_code' => CurrencyFormatter::formatCode($currency),
'close_date' => $closeDate,
'is_closed' => $isWon || $isLost,
'is_won' => $isWon,
'remotely_created_at' => $remotelyCreatedAt,
'probability' => $this->resolveDealProbability($properties['hs_deal_stage_probability']),
'forecast_category' => $this->resolveForecastCategory($properties['hs_manual_forecast_category']),
];
if ($accountId) {
$data['account_id'] = $accountId;
}
if ($stage) {
$data['stage_id'] = $stage->id;
}
if ($businessProcess) {
$recordType = $this->crmEntityRepository->getBusinessProcessRecordType($businessProcess);
if ($recordType) {
$data['record_type_id'] = $recordType->id;
}
}
return $data;
}
private function resolveBusinessProcess(?string $pipelineId): ?BusinessProcess
{
if ($pipelineId === null) {
return null;
}
if (isset($this->cachedBusinessProcesses[$pipelineId])) {
return $this->cachedBusinessProcesses[$pipelineId];
}
$businessProcess = $this->getBusinessProcess($pipelineId);
if (! $businessProcess instanceof BusinessProcess) {
$this->importStages();
$businessProcess = $this->getBusinessProcess($pipelineId);
}
if (! $businessProcess instanceof BusinessProcess) {
$this->logger->info(
'[HubSpot] Deal is not attached to a pipeline',
[
'pipeline' => $pipelineId]
);
}
$this->cachedBusinessProcesses[$pipelineId] = $businessProcess;
return $businessProcess;
}
private function getBusinessProcess(string $pipelineId): ?BusinessProcess
{
return $this->crmEntityRepository->findBusinessProcessesByExternalId($this->config, $pipelineId);
}
private function resolveStage(BusinessProcess $businessProcess, ?string $stageId): ?Stage
{
if (empty($stageId)) {
return null;
}
$cacheKey = $businessProcess->getId() . ':' . $stageId;
if (isset($this->cachedStages[$cacheKey])) {
return $this->cachedStages[$cacheKey];
}
$stage = $this->crmEntityRepository->getPipelineStageByConditions(
$businessProcess,
[
'crm_provider_id' => $stageId,
'type' => Stage::TYPE_OPPORTUNITY,
]
);
if ($stage === null) {
$this->importStages(null, $stageId);
}
if ($stage === null) {
$this->logger->info('[HubSpot] Stage does not exist => ' . $stageId);
}
$this->cachedStages[$cacheKey] = $stage;
return $stage;
}
private function resolveAmount(array $properties): ?string
{
$amount = null;
if (! empty($properties['amount'])) {
$amount = str_replace(',', '', $properties['amount']);
}
if ($this->config->hasDefaultCurrencyFieldSet()) {
$valueFieldName = $this->config->getDefaultCurrencyField()->getCrmProviderId();
$amount = $properties[$valueFieldName] ?? $amount;
}
return $amount;
}
private function parseCleanDatetime(string $datetime): ?Carbon
{
// Treat pre-1980 values as invalid
$minValidDate = Carbon::parse('1980-01-01 00:00:00');
try {
$date = Carbon::parse($datetime);
if ($minValidDate->gt($date)) {
return null;
}
return $date;
} catch (Exception) {
return null; // On parse error, treat as null
}
}
private function resolveDealProbability(?string $stageProbability): int
{
if ($stageProbability === null) {
return 0;
}
$probability = (float) $stageProbability;
return $probability > 1 ? 0 : (int) ($probability * 100);
}
private function resolveForecastCategory(?string $forecastCategory): string
{
if (! $forecastCategory) {
return Forecast::FORECAST_CATEGORY_UNCATEGORIZED;
}
$forecastCategory = str_replace('_', ' ', $forecastCategory);
return ucwords(strtolower($forecastCategory));
}
private function importExternalFieldData(array $properties, int $opportunityId): void
{
$crmFields = $this->getOpportunitySyncableFields();
$this->importOpportunityCrmFieldData($properties, $crmFields, $opportunityId);
}
private function importOpportunityContacts(Opportunity $opportunity, array $associations): void
{
// Handle empty or missing contact associations
if (empty($associations)) {
// Remove all existing contact associations if none provided
$this->removeAllOpportunityContacts($opportunity);
return;
}
// Use differential sync approach for better performance and accuracy
$this->syncOpportunityContactsDifferential($opportunity, $associations);
}
/**
* Sync opportunity contacts using differential approach
* This compares current vs new associations and only makes necessary changes
*/
private function syncOpportunityContactsDifferential(Opportunity $opportunity, array $contactAssociations): void
{
$currentContactCrmIds = $this->getCurrentContactCrmIds($opportunity);
$contactAssociationIds = array_keys($contactAssociations);
$contactsToAdd = array_diff($contactAssociationIds, $currentContactCrmIds);
$contactsToRemove = array_diff($currentContactCrmIds, $contactAssociationIds);
if (empty($contactsToAdd) && empty($contactsToRemove)) {
return;
}
$this->logContactAssociationChanges($opportunity, $currentContactCrmIds, $contactAssociations, $contactsToAdd, $contactsToRemove);
$this->removeContactAssociations($opportunity, $contactsToRemove);
$this->addContactAssociations($opportunity, $contactsToAdd, $contactAssociations);
}
private function getCurrentContactCrmIds(Opportunity $opportunity): array
{
return $opportunity->contacts()
->pluck('contacts.crm_provider_id')
->toArray();
}
private function logContactAssociationChanges(
Opportunity $opportunity,
array $currentContactCrmIds,
array $contactAssociations,
array $contactsToAdd,
array $contactsToRemove
): void {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association changes', [
'opportunity_id' => $opportunity->getId(),
'current_contacts' => $currentContactCrmIds,
'new_contacts' => $contactAssociations,
'contacts_to_add' => $contactsToAdd,
'contacts_to_remove' => $contactsToRemove,
]);
}
private function removeContactAssociations(Opportunity $opportunity, array $contactsToRemove): void
{
if (empty($contactsToRemove)) {
return;
}
$contactsToDetach = $opportunity->contacts()
->whereIn('contacts.crm_provider_id', $contactsToRemove)
->pluck('contacts.id')
->toArray();
if (! empty($contactsToDetach)) {
$opportunity->contacts()->detach($contactsToDetach);
$this->logger->info('[' . $this->getDisplayName() . '] Removed contact associations', [
'opportunity_id' => $opportunity->getId(),
'removed_contact_crm_ids' => $contactsToRemove,
'removed_contact_count' => count($contactsToDetach),
]);
}
}
private function addContactAssociations(Opportunity $opportunity, array $contactsToAdd, array $contactAssociations): void
{
if (empty($contactsToAdd)) {
return;
}
$contactsAdded = [];
foreach ($contactsToAdd as $crmId) {
$id = $contactAssociations[$crmId];
if ($this->attachSingleContact($opportunity, (string) $crmId, $id)) {
$contactsAdded[] = $crmId;
}
}
$this->logAddedContacts($opportunity, $contactsAdded);
}
private function attachSingleContact(Opportunity $opportunity, string $crmId, int $id): bool
{
try {
$contact = $this->crmEntityRepository->findContactByConfigurationAndId($this->config, $id);
if (! $contact) {
return false;
}
return $this->performContactAttachment($opportunity, $contact, $crmId);
} catch (\Throwable $e) {
$this->logger->warning('[' . $this->getDisplayName() . '] Failed to add contact association', [
'opportunity_id' => $opportunity->getId(),
'contact_crm_id' => $crmId,
'error' => $e->getMessage(),
]);
return false;
}
}
private function performContactAttachment(Opportunity $opportunity, Contact $contact, string $crmId): bool
{
try {
$opportunity->contacts()->attach($contact->getId(), [
'crm_provider_id' => $crmId,
]);
return true;
} catch (\Illuminate\Database\QueryException $e) {
if (str_contains($e->getMessage(), 'Duplicate entry')) {
$this->logger->info('[' . $this->getDisplayName() . '] Contact association already exists', [
'contact_id' => $contact->getId(),
'contact_crm_id' => $crmId,
'opportunity_id' => $opportunity->getId(),
]);
return false;
}
throw $e;
}
}
private function logAddedContacts(Opportunity $opportunity, array $contactsAdded): void
{
if (! empty($contactsAdded)) {
$this->logger->info('[' . $this->getDisplayName() . '] Added contact associations', [
'opportunity_id' => $opportunity->getId(),
'contacts_to_add_count' => count($contactsAdded),
'added_contact_crm_ids' => $contactsAdded,
'added_contacts_count' => count($contactsAdded),
]);
}
}
}
Sync Changes
Hide This Notification
Code changed:
Hide
1
Previous Highlighted Error
Next Highlighted Error
<template>
<WelcomeLayout
title="Account disconnected"
textPosition="center"
:icon="faUnlink"
:class="$style.layout"
>
<div :class="$style.container" v-if="providersLoaded">
<p>
<strong>
It looks like your {{ localProvider.displayName }} account has become
disconnected
</strong>
</p>
<p :class="$style.small">Please re-connect to continue</p>
<p v-if="isInIframe">
We'll open the {{ localProvider.displayName }} authentication in a new
tab. Please return here and refresh the page once complete
</p>
<GoogleLikeButton
v-if="localProvider.viaIntegrationApp && crmTokenLoaded"
as="a"
:key="localProvider.name"
:brand-logo="localProvider.name"
:class="$style.connectButton"
@click="integrationAppOnClick"
>
Sign in with {{ localProvider.displayName }}
</GoogleLikeButton>
<GoogleLikeButton
v-if="!localProvider.viaIntegrationApp"
as="a"
:key="localProvider.name"
:href="`/auth/redirect/${localProvider.name}`"
:target="target"
:brand-logo="localProvider.name"
:class="$style.connectButton"
>
Sign in with {{ localProvider.displayName }}
</GoogleLikeButton>
</div>
<BuildInfo />
<KioskBanner />
</WelcomeLayout>
</template>
<script>
import window from "window";
import axios from "axios";
import { faUnlink } from "@fortawesome/pro-regular-svg-icons";
import isInIframe from "@/utils/isInIframe";
import BuildInfo from "@/components/layout/BuildInfo/BuildInfo.vue";
import KioskBanner from "@/components/shared/KioskBanner/KioskBanner.vue";
import WelcomeLayout from "@/components/layout/WelcomeLayout/WelcomeLayout.vue";
import GoogleLikeButton from "@/components/shared/Buttons/GoogleLikeButton.vue";
import { showSnackbarError, normalizeError } from "@/utils/index";
import { IntegrationAppClient } from "@integration-app/sdk";
export default {
name: "ConnectPage",
components: {
BuildInfo,
KioskBanner,
WelcomeLayout,
GoogleLikeButton,
},
data() {
return {
...window.connectData,
crmToken: null,
faUnlink,
isInIframe,
providers: [],
providersLoaded: false,
crmTokenLoaded: false,
};
},
computed: {
localProvider() {
return this.providers.find((e) => e.name === this.provider);
},
target() {
return this.isInIframe ? "_blank" : null;
},
},
created() {
this.getProviders();
},
mounted() {
this.showErrors();
},
watch: {
providersLoaded() {
if (this.providersLoaded) {
this.prepareIntegrationAppConnection();
}
},
},
methods: {
showErrors() {
if (!this.error) return;
showSnackbarError(this.error, undefined, undefined, false);
},
unwrapEntityResponse({ data }) {
return data.map(({ icon, name, displayName, viaIntegrationApp }) => {
return { icon, name, displayName, viaIntegrationApp };
});
},
async getProviders() {
try {
const response = await axios.get("/api/v1/connect-providers");
this.providers = this.unwrapEntityResponse(response);
this.providersLoaded = true;
} catch {
showSnackbarError(
"An error occurred, while loading form data (connect providers).",
);
}
},
async prepareIntegrationAppConnection() {
if (this.localProvider.viaIntegrationApp) {
try {
const response = await axios.get("/api/v1/integration-app-token");
this.crmToken = response.data.token;
this.crmTokenLoaded = true;
} catch (error) {
console.log(error);
showSnackbarError(
`An error occurred while preparing the page.
Try refreshing, if the error persists get in touch with the Jiminny team.`,
);
}
}
},
async integrationAppOnClick() {
const integrationApp = new IntegrationAppClient({
token: this.crmToken,
});
const connection = await integrationApp
.integration(this.localProvider.name)
.openNewConnection({
showPoweredBy: false,
allowMultipleConnections: false,
});
console.log('[IntegrationApp] openNewConnection resolved:', JSON.stringify(connection));
// [IntegrationApp] openNewConnection resolved: {
// "id":"69e0b41a67d0068c2ca0b48e",
// "name":"Zoho CRM",
// "userId":"1ece66c8-feb1-4df1-b321-21607daf4623",
// "tenantId":"69e0b3faef3e7b6248189289",
// "isTest":false,
// "connected":true,
// "state":"READY",
// "errors":[],
// "integrationId":"66fe6c913202f3a165e3c14d",
// "externalAppId":"6671653e7e2d642e4e41b0fa",
// "authOptionKey":"",
// "createdAt":"2026-04-16T10:04:10.420Z",
// "updatedAt":"2026-04-16T10:04:10.575Z",
// "retryAttempts":0,
// "isDeactivated":false
// }
if (connection && connection.disconnected !== true && connection.connected !== false) {
console.log('[IntegrationApp] connection condition matched');
try {
const saveRequest = await axios.post(
"/api/v1/integration-app-connect",
);
if (saveRequest.data && saveRequest.data.success === true) {
/** If all is good refresh the page here */
window.location = "/dashboard";
return;
}
throw new Error(saveRequest.data.message);
} catch (error) {
console.log(error);
showSnackbarError(normalizeError(error));
}
}
},
},
};
</script>
<style module lang="less" src="./connect.less"></style>
Project
Project
New File or Directory…
Expand Selected
Collapse All
Options
Hide...
|
46361
|
|
46755
|
984
|
84
|
2026-04-17T10:47:09.002968+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776422829002_m2.jpg...
|
Firefox
|
Zoho Accounts — Work
|
1
|
accounts.zoho.eu/oauth/v2/auth?client_id=1000.8MPY accounts.zoho.eu/oauth/v2/auth?client_id=1000.8MPYKPXSQA9GR3T7R7UDI2J2SFFIAW&redirect_uri=https%3A%2F%2Fapi.integration.app%2Foauth-callback&response_type=code&access_type=offline&scope=ZohoCRM.modules.ALL+ZohoCRM.users.ALL+ZohoCRM.settings.ALL+ZohoCRM.org.READ+ZohoCRM.notifications.ALL+ZohoCRM.settings.pipeline.READ+ZohoCRM.settings.profiles.READ+ZohoCRM.settings.global_picklist.ALL&prompt=consent&state=498ff810-61fe-4052-bc78-660017b02fbb&code_challenge=ZTbmoIpGnSSQW0noRR51RpUDL9zuFyuxHoZa8S3NPZY&code_challenge_method=S256...
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Jiminny Integration
Jiminny Integration
[EMAIL]
Us Jiminny Integration
Jiminny Integration
[EMAIL]
User ID :
20103090944
Sign Out
Sign Out
Your account is in the Europe data center.
Jiminny
Jiminny would like to access the following information.
CRM
Jiminny Inc
Perform CRUD operations on the modules
Full access to Read, Create, Update and Delete user data in your organization
Group scope to perform CRUD operations on metadata
get org data
Full access to ZohoCRM notifications
To get the pipeline along with associated stages
get profiles
To read, create, update and delete global picklist
I allow Jiminny to access the above data from my Zoho account.
I allow Jiminny to access the above data from my Zoho account.
Accept
Reject
© 2026,
Zoho Corporation Pvt. Ltd.
Zoho Corporation Pvt. Ltd.
All Rights Reserved....
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"Jiminny Integration","depth":9,"bounds":{"left":0.7066406,"top":1.0,"width":0.04863281,"height":-0.09791672},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny Integration","depth":9,"bounds":{"left":0.6736328,"top":1.0,"width":0.056640625,"height":-0.09340274},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"integration-account@jiminny.com","depth":9,"bounds":{"left":0.7792969,"top":1.0,"width":0.004296875,"height":-0.093055606},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"User ID :","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20103090944","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sign Out","depth":8,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sign Out","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Your account is in the Europe data center.","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny would like to access the following information.","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CRM","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jiminny Inc","depth":12,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Perform CRUD operations on the modules","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Full access to Read, Create, Update and Delete user data in your organization","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Group scope to perform CRUD operations on metadata","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"get org data","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Full access to ZohoCRM notifications","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"To get the pipeline along with associated stages","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"get profiles","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"To read, create, update and delete global picklist","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"I allow Jiminny to access the above data from my Zoho account.","depth":10,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"I allow Jiminny to access the above data from my Zoho account.","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Accept","depth":10,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Reject","depth":10,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"© 2026,","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Zoho Corporation Pvt. Ltd.","depth":9,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Zoho Corporation Pvt. Ltd.","depth":10,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"All Rights Reserved.","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
8632488258017461693
|
-4742763862164111572
|
visual_change
|
accessibility
|
NULL
|
Jiminny Integration
Jiminny Integration
[EMAIL]
Us Jiminny Integration
Jiminny Integration
[EMAIL]
User ID :
20103090944
Sign Out
Sign Out
Your account is in the Europe data center.
Jiminny
Jiminny would like to access the following information.
CRM
Jiminny Inc
Perform CRUD operations on the modules
Full access to Read, Create, Update and Delete user data in your organization
Group scope to perform CRUD operations on metadata
get org data
Full access to ZohoCRM notifications
To get the pipeline along with associated stages
get profiles
To read, create, update and delete global picklist
I allow Jiminny to access the above data from my Zoho account.
I allow Jiminny to access the above data from my Zoho account.
Accept
Reject
© 2026,
Zoho Corporation Pvt. Ltd.
Zoho Corporation Pvt. Ltd.
All Rights Reserved....
|
46752
|
|
46916
|
986
|
84
|
2026-04-17T10:51:55.920791+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776423115920_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
( Firefox File Edit•.•D<→ cViewHistoryBookmarks ( Firefox File Edit•.•D<→ cViewHistoryBookmarks Profiles Tools Window Help• - app.dev.jiminny.com/connect/zohocrm3 Developers | HubSpotM'inbox (1,576) - lukas.kovalik@jiminM° 120216 is your HubSpot Log in CocFa CloudWatch | eu-west-1New Tabz Configure SSH access to multiple. fix-cache-for-business-processes4 [JY-20692] Issue with reconnectirg Jiminny+ New TabZ Zoho CRMLinking your Zoho CRM accountPlease select one of authentication options:Connecting@ A popup window should open, please proceed there"Uictedint has become• s0 lhlSuooort Dailv . in 1h 9mA Performance: MemoryStoragei Accessibility8: Application100% CFri 17 Aor 13:51155© 24Inspectorfilter Outout• ConsoleD DebuggerN Network{) Style EditorErrors Warnings Info LogsDebugRequestsError in parsing value for "stroke-linecap".Declaration dropped.A Error in parsing value for 'stroke-dashoffset'. Declaration dropped.A Error in parsing value for 'stroke-dasharray'. Declaration dropped.Zohocrm:1:1zohocrm:1:1A Error in parsing value for 'stroke-linecap'.veclaracion aropped,A Error in parsing value for 'stroke-dashoffset'. Declaration dropped.zohocrm: 1:1& Error in parsing value for "stroke-dasharray".Declaration dropped.bclnttos:app.dev.1m1nny.com1mc/zono-wich-backoround.sva• GET [URL_WITH_CREDENTIALS] GET https://ui.integration.app/assets/index-D02tmldS.cssTнtтp/3 1209 Amsi•cellhttos:ul.1ntecratzon.aop/assers/1ndex-DLouJW.1SJHITPYS 1269A Error in parsing value for 'backdrop-filter'.veclaration aropped.connect: 24:31® None of theNoxpr/5Pife NX30/10 3nsbgz t0xJtkkUn5rPcit/ ruMENKTCNgtqu CVsN*0rcontent of the subresource at "https://fonts.googleapis.com/css2Rfamily=IBM+Plex+Serif&display=swap". The computed hash isconnectA Error in parsing value for 'webkit-text-size-adiust'.Declaration dropped.index-D02tm1dS.css: 1:7005A • Error in parsing value for 'color'.Declaration dropped.index-DQ2tmldS.css:1:151274Error in varsino value for "transition'.Declaration dropped.1ndex-D02tmilds.css:1:256/47A • Error in parsing value for '-webkit-text-size-adjust'. Declaration dropped.index-DQ2tm1dS.css:1:376666A • Error in parsing value for "background'. Declaration dropped.index-DQ2tm1dS.css:1:487697A• Error an parsing value tor aspect-ratio• Declaration dropped.1ndex-D02tmlds.css:1:560449AP Error in parsing value for 'left'.veclaracion aropped.index-DQ2tm1dS.css:1:519653A • Unknown property '-moz-column-gap'. Declaration dropped.connect:7:19XHR GEl https:ap1.qetmembrane.com/selt-auth-context[HTTP/2_(200 86mslXHR OPTIONS https://api.getmembrane.com/self-auth-contextIHTTP/2.(204 79ms]A Source map error: Error: requestfailed withStack in the worker:networkRequestaresource:/devtools/client/shared/source-map-loader/utils/network-request.1s:43:9euree Map URL eo /t-Umni M.C. )5 a leaen sore;assets/assets/connect-UmWs0NcC.jsGET https://ui.integration.app/assets/RefreshConnectionPopup-P6RvdGCd.isbel nucos.ul, incedracion.app assecs/1ndex-DrKrhoLo. s• GET https://ui.integration.app/assets/index-7Ka1N6pQ.is• GET https://ui.integration.app/assets/Routes-CDWw4D3f.isGET https://ui.integration.app/assets/RefreshConnectionPopup-TEQhDXU.cssGET https://ui.integration.app/assets/IntegrationConnectionGuard-CgFvoH9G.iskeihttos:ul.intecration.aop/assers/Resetbutton-ssvGansh.1s• GET https://ui.integration.app/assets/index-Dg8y0bmF.is• GET https://ui.integration.app/assets/Routes-DHLymKVa.CssGEl https://u1.integratzon.app/assets/tlow-1nstance-context-(r_sbBl.1sGET https://ui.integration.app/assets/index-BhMG5VAy.cssA • Unknown property '-moz-column-gap'. Declaration dropped.gEl https:ap1.qetmembrane.com/1nteqrationszohocrmihkorllos ntcos:ap1.cecmembrane.com anceorations zonochmbtl nucos:/staulc.1ncecration.app/connectors/zono-chm/loco.ongOPTIONS https://api.getmembrane.com/connection-optionsPOST https://api.getmembrane.com/connection-optionsGET https://static.integration.app/connectors/zoho=crm/logo-pngGET https://static.integration.app/files/d8bde402-9a7b-4627-bf08-ab2cfcdc4a43.png[HTTP/3 (200) 0ms1[HTTP/3 (200 0ms][HTTP/3 200 0mslJHITPYS 1269IHTTP/3200[HTTP/3_200 0mslJHITPYS 1269[HTTP/3 200 0ms]JHIIP SD00THTIP/S260IHTTP/3 200 0ms]RefreshConnect ionPopup- TE0hDXU.css: 1:2624HTTPS 206821ms]MIUF2204369ms]IHTTP/2 200[НTTP/3 204)[HTTP/3 (200HITP/1.11200 Ok Oms[HTTP/3_(200) 0ms]A MouseEvent.mozInputSource is deprecated. Use PointerEvent-pointerType instead.GET https://api.getmembrane.com/integrations/66fe6c913202f3a165e3c14dTHITPS120695msOPTIONS httos://api.aetmembrane.com/inteqrations/66fe6c913202f3a165e3c14dJHITPS129447mslpost https:ap1.getmembrane.com/connect1on=opt1onsHTTPS 206409mslXHR OPTIONS https://api.getmembrane.com/connection=options[НTTP/3.204373ms]XHR GET https://api.getmembrane.com/sse/connection-events/009dw7xzwm702nk9xdibi1?token=eyJ0eXAi0iJKV10iLCJhbGci0iJIUzI1NiJ9.ey]pZCI6IjFlY2U2NmM4LWZLY¡EtNGRmMS1іMzIxLTIxNjA3ZGFm…IHTTP/3.200nullmslA Storage access automatically granted for origin "https://ui.integration.app" on "https://app.dev.jiminny.com".Top#...
|
NULL
|
-3657873022189715089
|
NULL
|
click
|
ocr
|
NULL
|
( Firefox File Edit•.•D<→ cViewHistoryBookmarks ( Firefox File Edit•.•D<→ cViewHistoryBookmarks Profiles Tools Window Help• - app.dev.jiminny.com/connect/zohocrm3 Developers | HubSpotM'inbox (1,576) - lukas.kovalik@jiminM° 120216 is your HubSpot Log in CocFa CloudWatch | eu-west-1New Tabz Configure SSH access to multiple. fix-cache-for-business-processes4 [JY-20692] Issue with reconnectirg Jiminny+ New TabZ Zoho CRMLinking your Zoho CRM accountPlease select one of authentication options:Connecting@ A popup window should open, please proceed there"Uictedint has become• s0 lhlSuooort Dailv . in 1h 9mA Performance: MemoryStoragei Accessibility8: Application100% CFri 17 Aor 13:51155© 24Inspectorfilter Outout• ConsoleD DebuggerN Network{) Style EditorErrors Warnings Info LogsDebugRequestsError in parsing value for "stroke-linecap".Declaration dropped.A Error in parsing value for 'stroke-dashoffset'. Declaration dropped.A Error in parsing value for 'stroke-dasharray'. Declaration dropped.Zohocrm:1:1zohocrm:1:1A Error in parsing value for 'stroke-linecap'.veclaracion aropped,A Error in parsing value for 'stroke-dashoffset'. Declaration dropped.zohocrm: 1:1& Error in parsing value for "stroke-dasharray".Declaration dropped.bclnttos:app.dev.1m1nny.com1mc/zono-wich-backoround.sva• GET [URL_WITH_CREDENTIALS] GET https://ui.integration.app/assets/index-D02tmldS.cssTнtтp/3 1209 Amsi•cellhttos:ul.1ntecratzon.aop/assers/1ndex-DLouJW.1SJHITPYS 1269A Error in parsing value for 'backdrop-filter'.veclaration aropped.connect: 24:31® None of theNoxpr/5Pife NX30/10 3nsbgz t0xJtkkUn5rPcit/ ruMENKTCNgtqu CVsN*0rcontent of the subresource at "https://fonts.googleapis.com/css2Rfamily=IBM+Plex+Serif&display=swap". The computed hash isconnectA Error in parsing value for 'webkit-text-size-adiust'.Declaration dropped.index-D02tm1dS.css: 1:7005A • Error in parsing value for 'color'.Declaration dropped.index-DQ2tmldS.css:1:151274Error in varsino value for "transition'.Declaration dropped.1ndex-D02tmilds.css:1:256/47A • Error in parsing value for '-webkit-text-size-adjust'. Declaration dropped.index-DQ2tm1dS.css:1:376666A • Error in parsing value for "background'. Declaration dropped.index-DQ2tm1dS.css:1:487697A• Error an parsing value tor aspect-ratio• Declaration dropped.1ndex-D02tmlds.css:1:560449AP Error in parsing value for 'left'.veclaracion aropped.index-DQ2tm1dS.css:1:519653A • Unknown property '-moz-column-gap'. Declaration dropped.connect:7:19XHR GEl https:ap1.qetmembrane.com/selt-auth-context[HTTP/2_(200 86mslXHR OPTIONS https://api.getmembrane.com/self-auth-contextIHTTP/2.(204 79ms]A Source map error: Error: requestfailed withStack in the worker:networkRequestaresource:/devtools/client/shared/source-map-loader/utils/network-request.1s:43:9euree Map URL eo /t-Umni M.C. )5 a leaen sore;assets/assets/connect-UmWs0NcC.jsGET https://ui.integration.app/assets/RefreshConnectionPopup-P6RvdGCd.isbel nucos.ul, incedracion.app assecs/1ndex-DrKrhoLo. s• GET https://ui.integration.app/assets/index-7Ka1N6pQ.is• GET https://ui.integration.app/assets/Routes-CDWw4D3f.isGET https://ui.integration.app/assets/RefreshConnectionPopup-TEQhDXU.cssGET https://ui.integration.app/assets/IntegrationConnectionGuard-CgFvoH9G.iskeihttos:ul.intecration.aop/assers/Resetbutton-ssvGansh.1s• GET https://ui.integration.app/assets/index-Dg8y0bmF.is• GET https://ui.integration.app/assets/Routes-DHLymKVa.CssGEl https://u1.integratzon.app/assets/tlow-1nstance-context-(r_sbBl.1sGET https://ui.integration.app/assets/index-BhMG5VAy.cssA • Unknown property '-moz-column-gap'. Declaration dropped.gEl https:ap1.qetmembrane.com/1nteqrationszohocrmihkorllos ntcos:ap1.cecmembrane.com anceorations zonochmbtl nucos:/staulc.1ncecration.app/connectors/zono-chm/loco.ongOPTIONS https://api.getmembrane.com/connection-optionsPOST https://api.getmembrane.com/connection-optionsGET https://static.integration.app/connectors/zoho=crm/logo-pngGET https://static.integration.app/files/d8bde402-9a7b-4627-bf08-ab2cfcdc4a43.png[HTTP/3 (200) 0ms1[HTTP/3 (200 0ms][HTTP/3 200 0mslJHITPYS 1269IHTTP/3200[HTTP/3_200 0mslJHITPYS 1269[HTTP/3 200 0ms]JHIIP SD00THTIP/S260IHTTP/3 200 0ms]RefreshConnect ionPopup- TE0hDXU.css: 1:2624HTTPS 206821ms]MIUF2204369ms]IHTTP/2 200[НTTP/3 204)[HTTP/3 (200HITP/1.11200 Ok Oms[HTTP/3_(200) 0ms]A MouseEvent.mozInputSource is deprecated. Use PointerEvent-pointerType instead.GET https://api.getmembrane.com/integrations/66fe6c913202f3a165e3c14dTHITPS120695msOPTIONS httos://api.aetmembrane.com/inteqrations/66fe6c913202f3a165e3c14dJHITPS129447mslpost https:ap1.getmembrane.com/connect1on=opt1onsHTTPS 206409mslXHR OPTIONS https://api.getmembrane.com/connection=options[НTTP/3.204373ms]XHR GET https://api.getmembrane.com/sse/connection-events/009dw7xzwm702nk9xdibi1?token=eyJ0eXAi0iJKV10iLCJhbGci0iJIUzI1NiJ9.ey]pZCI6IjFlY2U2NmM4LWZLY¡EtNGRmMS1іMzIxLTIxNjA3ZGFm…IHTTP/3.200nullmslA Storage access automatically granted for origin "https://ui.integration.app" on "https://app.dev.jiminny.com".Top#...
|
NULL
|
|
49034
|
1040
|
84
|
2026-04-17T13:13:05.297183+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776431585297_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileDevelopers | HubSpotM'inbox (1,576) FirefoxFileDevelopers | HubSpotM'inbox (1,576) - lukas.kovalik@jiminM 120216 is your HubSpot Log In CodCa CloudWatch | eu-west-1New TabZ Configure SSH access to multiple. fix-cache-for-business-processes• Dashboard • Jiminny • MembraneEoitViewHistory BookmarksProfilesTools• -° app.jiminny.eu/kiosk|KioskorganizationsSetup AccountUsersActivities10Automated KedortsMobile versionWindow HelpActiveNAMEApp "4oho CRM" • Jiminny • MembJY-20692 change confirmation parJY-20543 add AJ reports User pile• Jiminny7 Jiminnya) Jiminny\Exceptions|HttpBadReque• Jiminny+ New Tabapp.jiminny.eu/kiosk/usersOWNER #C< 40 ll • Tech Day Review • in 47mA100% C/2 8 Fri 17 Apr 16:13:05TIERCRM #USERS -CREATED -...
|
NULL
|
-8421645464883662029
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFileDevelopers | HubSpotM'inbox (1,576) FirefoxFileDevelopers | HubSpotM'inbox (1,576) - lukas.kovalik@jiminM 120216 is your HubSpot Log In CodCa CloudWatch | eu-west-1New TabZ Configure SSH access to multiple. fix-cache-for-business-processes• Dashboard • Jiminny • MembraneEoitViewHistory BookmarksProfilesTools• -° app.jiminny.eu/kiosk|KioskorganizationsSetup AccountUsersActivities10Automated KedortsMobile versionWindow HelpActiveNAMEApp "4oho CRM" • Jiminny • MembJY-20692 change confirmation parJY-20543 add AJ reports User pile• Jiminny7 Jiminnya) Jiminny\Exceptions|HttpBadReque• Jiminny+ New Tabapp.jiminny.eu/kiosk/usersOWNER #C< 40 ll • Tech Day Review • in 47mA100% C/2 8 Fri 17 Apr 16:13:05TIERCRM #USERS -CREATED -...
|
NULL
|
|
49636
|
1059
|
84
|
2026-04-17T14:00:01.462627+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776434401462_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpjiminny.atlassian.net/ira/software/c/projects/JY/boards/37?selectedlssue=JY-2067988O JIMINNYQ SearchDevelopers | HubSpotM'inbox (1,576) - lukas.kovalik@jiminM° 120216 is your HubSpot Log in CocCa CloudWatch | eu-west-1New TabZ Configure SSH access to multipleg For you• Recentw Starred04 Apps0, SpacesRecent2) Jiminny (New)1 D Platform TeamSpaces / Jiminny (New)Platform Team 88[ JY-18909 / & JY-20679• Summary& TimelineB BaQ Search boardeO0[BEl Add dash symbol between name and period in the titleREADY FOR DEV 7T ***DescriptionEdit description. fix-cache-for-business-processeslu s= KanbanDashboard • Jiminny • MembraneApp "4oho CRM" • Jiminny • MemtID Capture TeamC Enterprise Stability I...II Processing TeamY Service-DeskRework Nudges - Phase 2 -cnidilue nuaces lo use teindexed_at periodCOST-EFFECTIVE AND FASTER NUDGESBacklogQ JY-20489oveee=Linked work itemsAdd linked work itemActivityJY-20692 change confirmation parCommentsHistoryWork logJY-20698 handle talled field synca Jiminny@ Jiminny= More spaces= FiltersCB DashboardsC OperationsInvestigate and fix why exceedFontawesome package limitsMAINTENANCEReady for Dev© JY-20564188 •..=8Add a comment...Can I get more info..? Status update…Thanks...Pro tip: press (M to comment) Jiminny\Exceptions|HttpBadReque@ Jiminny2 Confluence:: Teams@ Jiminny== Customise sidebar+ New TabAI Reports > Empty pagedesign and promotionAJ REPORTSBacklogQ JY-2037216 .000 =8Send email notification whenthe report is not generatedAJ REPORTSваскlодA JY-201572 .000=€Notify a user before the AJReport expiresAJ REPORTSBacklogQ JY-205081 0000 =€Sync opportunities without alocal owner luser.les nuiPLATFORM STABILITYBacklog• JY-203524 [PASSWORD_DOTS]=(Upgrade BE libraries - AprMAINTENANCEBacklog• JY-19957Ready for Dev• DetailsAssigneeReporterDevelopmentComponentsSub-ProductLabelsStory pointestimateOrganisationsPriorityFix versionsSprintDaysNeed QAParentCanny Links+ Create1* Improve sub-taskLukas KovalikNikolav yankov@ Open with VS Code? Create branch{ Create commitAdd componentsAdd optionsNoneNoneNone= MediumNonePlatform Sprint 2 Q2 +1NoneAdd optionà JY-18909 [Part2] Automated |Open Canny Links> More fields Original estimate, Time tracking› Automation 4 Rule executions> featureOS § OpenfeatureOS> Sentry al! Linked IssuesCreated 2 days agoUpdated 2 days agoConfigure40 lilfTech Day Review - in 1mA100% CS•8 Fri 17 Apr 17:00:01Ask RovoDeploymentsE Archived work itemsMore 4Complete sprintGroup: QueriesDEPLOY 4Prepare fallback with email forSSO for persistentname_id_formatREDUCE CHURNClosed[ JY-206321?•=AJ Panorama> Don't showInternal errors to customersASK ANYTHING ON ANYTHINGDeployedProphet7X JY-2027810•=0Upgrade Python and llbrarles -AprMAINTENANCEDeployedE JY-199671 0= 2CLONE - [Team insights] Filtergets reset automaticallySUPPORT TICKETSDeployed+* JY-206810.5 12 • 8...
|
NULL
|
1628077728210302449
|
NULL
|
click
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Helpjiminny.atlassian.net/ira/software/c/projects/JY/boards/37?selectedlssue=JY-2067988O JIMINNYQ SearchDevelopers | HubSpotM'inbox (1,576) - lukas.kovalik@jiminM° 120216 is your HubSpot Log in CocCa CloudWatch | eu-west-1New TabZ Configure SSH access to multipleg For you• Recentw Starred04 Apps0, SpacesRecent2) Jiminny (New)1 D Platform TeamSpaces / Jiminny (New)Platform Team 88[ JY-18909 / & JY-20679• Summary& TimelineB BaQ Search boardeO0[BEl Add dash symbol between name and period in the titleREADY FOR DEV 7T ***DescriptionEdit description. fix-cache-for-business-processeslu s= KanbanDashboard • Jiminny • MembraneApp "4oho CRM" • Jiminny • MemtID Capture TeamC Enterprise Stability I...II Processing TeamY Service-DeskRework Nudges - Phase 2 -cnidilue nuaces lo use teindexed_at periodCOST-EFFECTIVE AND FASTER NUDGESBacklogQ JY-20489oveee=Linked work itemsAdd linked work itemActivityJY-20692 change confirmation parCommentsHistoryWork logJY-20698 handle talled field synca Jiminny@ Jiminny= More spaces= FiltersCB DashboardsC OperationsInvestigate and fix why exceedFontawesome package limitsMAINTENANCEReady for Dev© JY-20564188 •..=8Add a comment...Can I get more info..? Status update…Thanks...Pro tip: press (M to comment) Jiminny\Exceptions|HttpBadReque@ Jiminny2 Confluence:: Teams@ Jiminny== Customise sidebar+ New TabAI Reports > Empty pagedesign and promotionAJ REPORTSBacklogQ JY-2037216 .000 =8Send email notification whenthe report is not generatedAJ REPORTSваскlодA JY-201572 .000=€Notify a user before the AJReport expiresAJ REPORTSBacklogQ JY-205081 0000 =€Sync opportunities without alocal owner luser.les nuiPLATFORM STABILITYBacklog• JY-203524 [PASSWORD_DOTS]=(Upgrade BE libraries - AprMAINTENANCEBacklog• JY-19957Ready for Dev• DetailsAssigneeReporterDevelopmentComponentsSub-ProductLabelsStory pointestimateOrganisationsPriorityFix versionsSprintDaysNeed QAParentCanny Links+ Create1* Improve sub-taskLukas KovalikNikolav yankov@ Open with VS Code? Create branch{ Create commitAdd componentsAdd optionsNoneNoneNone= MediumNonePlatform Sprint 2 Q2 +1NoneAdd optionà JY-18909 [Part2] Automated |Open Canny Links> More fields Original estimate, Time tracking› Automation 4 Rule executions> featureOS § OpenfeatureOS> Sentry al! Linked IssuesCreated 2 days agoUpdated 2 days agoConfigure40 lilfTech Day Review - in 1mA100% CS•8 Fri 17 Apr 17:00:01Ask RovoDeploymentsE Archived work itemsMore 4Complete sprintGroup: QueriesDEPLOY 4Prepare fallback with email forSSO for persistentname_id_formatREDUCE CHURNClosed[ JY-206321?•=AJ Panorama> Don't showInternal errors to customersASK ANYTHING ON ANYTHINGDeployedProphet7X JY-2027810•=0Upgrade Python and llbrarles -AprMAINTENANCEDeployedE JY-199671 0= 2CLONE - [Team insights] Filtergets reset automaticallySUPPORT TICKETSDeployed+* JY-206810.5 12 • 8...
|
NULL
|
|
49801
|
1061
|
84
|
2026-04-17T14:04:50.145342+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-17/1776 /Users/lukas/.screenpipe/data/data/2026-04-17/1776434690145_m2.jpg...
|
NULL
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Help=* app.staging.jiminny.com/ai-reports/manageAsk Jiminny Reports ®• Report namelPromptiT [JY-206941 Incorrect "expiration c8 JiminnyDevelopers | HubSpotM'inbox (1,576) - lukas.kovalik@jiminM°120216 is vour HubSpot Log In ColCa CloudWatch | eu-west-1New Tab(x) Configure SSH access to multiple( fix-cache-for-business-processes• Dashooard • Jiminny • MembraneApo "4oho CkM" • Jiminny • MemcJY-20692 change confirmation pa( JY-20698 handle failed field sync@ Jiminny8 Jiminny) Jiminny\Exceptions|HttpBadReque@ Jiminny+ New TabSaved search10NAMEATo Be Expired ReportAsk Jiminnyest RevortEastern SummaryHealthTuesday ReportAll statusesFREQUENCYDailyDailyWeeklyWeeklyDaily• @ Clear allSHAREDReport definition savedJY-18909-automated-reports-ask-jiminny • 872911B< 40 hil l Tech Day Review • now100% C#8 Fri 17 Apr 17:04:49CreateEXPIRING17/04/202730/04/2026A Expiring in 13 days14/04/2026A Expired30/04/2026A Expiring in 13 days30/04/2026A Expiring in 13 daysACTIONS...
|
NULL
|
-1964721699710421852
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEoitViewHistoryBookmarksProfilesToolsWi FirefoxFileEoitViewHistoryBookmarksProfilesToolsWindow Help=* app.staging.jiminny.com/ai-reports/manageAsk Jiminny Reports ®• Report namelPromptiT [JY-206941 Incorrect "expiration c8 JiminnyDevelopers | HubSpotM'inbox (1,576) - lukas.kovalik@jiminM°120216 is vour HubSpot Log In ColCa CloudWatch | eu-west-1New Tab(x) Configure SSH access to multiple( fix-cache-for-business-processes• Dashooard • Jiminny • MembraneApo "4oho CkM" • Jiminny • MemcJY-20692 change confirmation pa( JY-20698 handle failed field sync@ Jiminny8 Jiminny) Jiminny\Exceptions|HttpBadReque@ Jiminny+ New TabSaved search10NAMEATo Be Expired ReportAsk Jiminnyest RevortEastern SummaryHealthTuesday ReportAll statusesFREQUENCYDailyDailyWeeklyWeeklyDaily• @ Clear allSHAREDReport definition savedJY-18909-automated-reports-ask-jiminny • 872911B< 40 hil l Tech Day Review • now100% C#8 Fri 17 Apr 17:04:49CreateEXPIRING17/04/202730/04/2026A Expiring in 13 days14/04/2026A Expired30/04/2026A Expiring in 13 days30/04/2026A Expiring in 13 daysACTIONS...
|
NULL
|
|
51759
|
1119
|
84
|
2026-04-20T06:20:31.598666+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776666031598_m2.jpg...
|
Firefox
|
[JY-20543] AJ Reports > Tracking - Jira — Work
|
1
|
jiminny.atlassian.net/browse/JY-20543
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
JY-20692 change confirmation parameter by LakyLak JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app
github.com
[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app
JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app
JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app
JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app
Close tab
[JY-20543] AJ Reports > Tracking - Jira
[JY-20543] AJ Reports > Tracking - Jira
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
5 Notifications
5 Notifications
Help
Help
Settings
Settings
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-19240
JY-19240
/
Story - Change work type
JY-20543
JY-20543
Copy link
AJ Reports > Tracking- Summary, edit
AJ Reports > Tracking
AJ Reports > Tracking
Add or create work related to this Story
Add or create work related to this Story
View app actions
View app actions
Collapse Description Description
Collapse Description
Collapse Description
Description
Edit Description, edit
We want to be able to track the usage of the
AJ
reports. We will use this to keep track of the adoption but also to use Userpilot tooltips to push users who are not using it to use it.
track each generated reports in
DD
- include company name and frequency
for AJ reports - track each generated report in UserPilot as an event on the user - track it only for the user who has created the report
for Exec reports - track each generated report - set the tracking for each user in the non-jiminny participants list
note: for UP you can see how we currently track events such as Logged-activity, Held-conference
Subtasks
Subtasks
Add subtask
Add subtask
Linked work items
Linked work items
Add linked work item
Add linked work item
Collapse Activity Activity
Collapse Activity
Collapse Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Atlassian Intelligence Summarise
Summarise
Newest first Newest first
Newest first
Add a comment…
Suggest a reply...
Suggest a reply...
Status update...
Status update...
Thanks...
Thanks...
Pro tip:
press
M
to comment
More information about Nikolay Nikolov
More information about Nikolay Nikolov
Nikolay Nikolov
Copy link to comment
30 March 2026 at 14:41
BE: 1 d
Reply
Add thumbs up reaction
Add reaction
Edit
More actions
More information about Nikolay Nikolov
More information about Nikolay Nikolov
Nikolay Nikolov
Copy link to comment
30 March 2026 at 14:38
Where
public function pushToDatadog
- push to
UserPilot 1 entry for the creator
Reply
Add thumbs up reaction
Add reaction
Edit
More actions
Resize work item view side panel
Watch options: You are not watching this issue, 2 people watching
2
Share
Share
Actions
Actions
Closed - Change status
Closed
Automation
Automation
Improve Story
Improve Story
Details
Details
Details
Assignee
Assignee Pin to top. Only you can see pinned fields.
Lukas Kovalik- edit Assignee
More information about Lukas Kovalik
Lukas Kovalik
Reporter
Reporter Pin to top. Only you can see pinned fields.
Galya Dimitrova- edit Reporter
More information about Galya Dimitrova
Galya Dimitrova
Development
Development Pin to top. Only you can see pinned fields.
Open with VS Code Link to external website in new tab
Open with VS Code
Create branch Link to external website in new tab
Create branch
Create and checkout new branch
7 commits 5 days ago
7
commits
5 days ago
Create new commit
1 pull request MERGED
1
pull request
MERGED
Open pull request
1 build dev-panel-successful-build-icon
1
build
Open build
Components
Components Pin to top. Only you can see pinned fields.
Edit Components, edit
Platform
Platform
Sub-Product
Sub-Product Pin to top. Only you can see pinned fields.
Edit Sub-Product, Add options selected, edit
Add options
Labels
Labels Pin to top. Only you can see pinned fields.
Edit Labels
None
Story point estimate
More information about
Story point estimate Pin to top. Only you can see pinned fields.
Edit Story point estimate
None
Story Points
More information about
Story Points Pin to top. Only you can see pinned fields.
Edit Story Points
2
Organisations
More information about Organisations
Organisations Pin to top. Only you can see pinned fields.
Edit Organisations, None selected, edit
None
Priority
Priority Pin to top. Only you can see pinned fields.
Edit Priority
Medium
Fix versions
Fix versions Pin to top. Only you can see pinned fields.
Edit Fix versions, None selected, edit
None
Sprint
More information about
Sprint Pin to top. Only you can see pinned fields.
Edit Sprint
None
+1
+1
Days
Days Pin to top. Only you can see pinned fields.
Edit Days
1
Need QA
Need QA Pin to top. Only you can see pinned fields.
Edit Need QA
No
Parent
More information about
Parent Pin to top. Only you can see pinned fields.
Edit Parent
Click to visit JY-19240 AJ Reports
JY-19240 AJ Reports
Canny Links
Open
Canny Links
More fields
More fields
More fields
Automation
Automation
Automation
featureOS
featureOS
featureOS
Sentry
Sentry
Sentry
Created
27 March 2026 at 15:32
Updated
5 days ago
Configure
Configure
Open Rovo Chat
Open Rovo Chat
Development JY-20543
Development JY-20543
Give feedback
Give feedback
Close Modal
Close Modal
Branches
Branches
Commits
Commits
Pull requests
Pull requests
Builds
Builds
Deployments
Deployments
Feature flags
Feature flags
Other links
Other links
jiminny/app
jiminny/app
(
GitHub
)
Author
ID
Summary
Status
Reviewer
Updated
#11932
JY-20543 add AJ reports User pilot tracking
JY-20543 add AJ reports User pilot tracking
JY-20543-AJ-report-tracking
JY-20543-AJ-report-tracking
JY-18909-automated-reports-ask-jiminny
JY-18909-automated-reports-ask-jiminny
MERGED
5 days ago
More info
Author
ID
#11932
Summary
JY-20543 add AJ reports User pilot tracking
JY-20543 add AJ reports User pilot tracking
JY-20543-AJ-report-tracking
JY-20543-AJ-report-tracking
JY-18909-automated-reports-ask-jiminny
JY-18909-automated-reports-ask-jiminny
Status...
|
[{"role":"AXStaticText","text& [{"role":"AXStaticText","text":"JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app","depth":4,"bounds":{"left":0.08361037,"top":0.16759777,"width":0.08194814,"height":0.021548284},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"github.com","depth":4,"bounds":{"left":0.08361037,"top":0.18914606,"width":0.019614361,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira","depth":4,"bounds":{"left":0.0018284575,"top":0.0518755,"width":0.07596409,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0,"top":0.09497207,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.10614525,"width":0.10106383,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.12769353,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.13886672,"width":0.19963431,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.16041501,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.17158818,"width":0.15525267,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.16759777,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20543] AJ Reports > Tracking - Jira","depth":4,"bounds":{"left":0.0,"top":0.19313647,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"[JY-20543] AJ Reports > Tracking - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.20430966,"width":0.06981383,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.20031923,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.22745411,"width":0.07413564,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Skip to:","depth":9,"bounds":{"left":0.090259306,"top":0.07861133,"width":0.016954787,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Sidebar","depth":10,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sidebar","depth":11,"bounds":{"left":0.090259306,"top":0.097765364,"width":0.016954787,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Top Bar","depth":10,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Top Bar","depth":11,"bounds":{"left":0.090259306,"top":0.11691939,"width":0.016954787,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Main Content","depth":10,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Main Content","depth":11,"bounds":{"left":0.090259306,"top":0.13607343,"width":0.029421542,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse sidebar [","depth":9,"bounds":{"left":0.08361037,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse sidebar [","depth":11,"bounds":{"left":0.0887633,"top":0.06344773,"width":0.039727394,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Switch sites or apps","depth":10,"bounds":{"left":0.095578454,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Switch sites or apps","depth":12,"bounds":{"left":0.10073138,"top":0.06344773,"width":0.044215426,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Go to your Jira homepage","depth":9,"bounds":{"left":0.10887633,"top":0.057861134,"width":0.029421542,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Search, press enter to navigate to advanced search with your text query","depth":11,"bounds":{"left":0.40475398,"top":0.06264964,"width":0.24268617,"height":0.015961692},"help_text":"","placeholder":"Search","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Create","depth":10,"bounds":{"left":0.65575135,"top":0.057861134,"width":0.030086435,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create","depth":12,"bounds":{"left":0.66705453,"top":0.06384677,"width":0.014793883,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Rovo Ask Rovo","depth":12,"bounds":{"left":0.9109042,"top":0.057861134,"width":0.035904255,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Rovo","depth":14,"bounds":{"left":0.9222075,"top":0.06384677,"width":0.020611702,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"5 Notifications","depth":12,"bounds":{"left":0.9481383,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"5 Notifications","depth":14,"bounds":{"left":0.95329124,"top":0.06344773,"width":0.031914894,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Help","depth":12,"bounds":{"left":0.9601064,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Help","depth":14,"bounds":{"left":0.9652593,"top":0.06344773,"width":0.010139627,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Settings","depth":12,"bounds":{"left":0.97207445,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Settings","depth":14,"bounds":{"left":0.9772274,"top":0.06344773,"width":0.017952127,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"lukas.kovalik@jiminny.com","depth":12,"bounds":{"left":0.9847075,"top":0.057861134,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"For you","depth":12,"bounds":{"left":0.08361037,"top":0.09976058,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"For you","depth":15,"bounds":{"left":0.09424867,"top":0.10574621,"width":0.01662234,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Recent","depth":12,"bounds":{"left":0.08361037,"top":0.12529927,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Recent","depth":15,"bounds":{"left":0.09424867,"top":0.13128492,"width":0.015458777,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Starred","depth":12,"bounds":{"left":0.08361037,"top":0.15083799,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Starred","depth":15,"bounds":{"left":0.09424867,"top":0.15682362,"width":0.016456118,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Apps","depth":12,"bounds":{"left":0.08361037,"top":0.1763767,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Apps","depth":15,"bounds":{"left":0.09424867,"top":0.18236233,"width":0.011635638,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Apps","depth":13,"bounds":{"left":0.15309176,"top":0.17956904,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Apps","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Spaces","depth":12,"bounds":{"left":0.08361037,"top":0.2019154,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXStaticText","text":"Spaces","depth":15,"bounds":{"left":0.09424867,"top":0.20790103,"width":0.016456118,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create space","depth":13,"bounds":{"left":0.13646941,"top":0.20510775,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create space","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for spaces","depth":13,"bounds":{"left":0.14577793,"top":0.20510775,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for spaces","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recent","depth":16,"bounds":{"left":0.08959442,"top":0.23423783,"width":0.013464096,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New)","depth":17,"bounds":{"left":0.08759973,"top":0.2529928,"width":0.0674867,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":20,"bounds":{"left":0.09823803,"top":0.25897846,"width":0.032081116,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Jiminny (New)","depth":18,"bounds":{"left":0.08892952,"top":0.25618514,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXMenuButton","text":"Create board","depth":18,"bounds":{"left":0.13646941,"top":0.25618514,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create board","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Jiminny (New)","depth":18,"bounds":{"left":0.14577793,"top":0.25618514,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Jiminny (New)","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Platform Team","depth":19,"bounds":{"left":0.09158909,"top":0.27853152,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform Team","depth":22,"bounds":{"left":0.1022274,"top":0.28451717,"width":0.032247342,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.28172386,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"SE Kanban","depth":19,"bounds":{"left":0.09158909,"top":0.30407023,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SE Kanban","depth":22,"bounds":{"left":0.1022274,"top":0.31005585,"width":0.024102394,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.30726257,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Capture Team","depth":19,"bounds":{"left":0.09158909,"top":0.32960895,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Capture Team","depth":22,"bounds":{"left":0.1022274,"top":0.33559456,"width":0.03125,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.33280128,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Enterprise Stability Issues 🤕","depth":19,"bounds":{"left":0.09158909,"top":0.35514766,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enterprise Stability Issues 🤕","depth":22,"bounds":{"left":0.1022274,"top":0.36113328,"width":0.050531916,"height":0.030726258},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.35834,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Processing Team","depth":19,"bounds":{"left":0.09158909,"top":0.38068634,"width":0.06349734,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Processing Team","depth":22,"bounds":{"left":0.1022274,"top":0.386672,"width":0.038231384,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Board actions","depth":20,"bounds":{"left":0.15309176,"top":0.38387868,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Board actions","depth":22,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Service-Desk","depth":17,"bounds":{"left":0.08759973,"top":0.40622506,"width":0.0674867,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Service-Desk","depth":20,"bounds":{"left":0.09823803,"top":0.4122107,"width":0.03025266,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Service-Desk","depth":18,"bounds":{"left":0.15442154,"top":0.4094174,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Service-Desk","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More spaces","depth":17,"bounds":{"left":0.08759973,"top":0.43176377,"width":0.0674867,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More spaces","depth":20,"bounds":{"left":0.09823803,"top":0.43774942,"width":0.028756648,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Filters","depth":12,"bounds":{"left":0.08361037,"top":0.45730248,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Filters","depth":15,"bounds":{"left":0.09424867,"top":0.4632881,"width":0.013796543,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Filters","depth":13,"bounds":{"left":0.15309176,"top":0.46049482,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Filters","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Dashboards","depth":12,"bounds":{"left":0.08361037,"top":0.4828412,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Dashboards","depth":15,"bounds":{"left":0.09424867,"top":0.4888268,"width":0.026761968,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Create dashboard","depth":13,"bounds":{"left":0.15508644,"top":0.48603353,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Create dashboard","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Dashboards","depth":13,"bounds":{"left":0.16240026,"top":0.48603353,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Dashboards","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Operations","depth":12,"bounds":{"left":0.08361037,"top":0.5083799,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Operations","depth":15,"bounds":{"left":0.09424867,"top":0.5143655,"width":0.02443484,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More actions for Operations","depth":13,"bounds":{"left":0.15309176,"top":0.51157224,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"More actions for Operations","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Confluence , (opens new window)","depth":13,"bounds":{"left":0.08361037,"top":0.5434956,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Confluence","depth":17,"bounds":{"left":0.09424867,"top":0.5494813,"width":0.025764627,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.08361037,"top":0.55706304,"width":0.04837101,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Teams , (opens new window)","depth":13,"bounds":{"left":0.08361037,"top":0.56903434,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Teams","depth":17,"bounds":{"left":0.09424867,"top":0.57501996,"width":0.014793883,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":", (opens new window)","depth":15,"bounds":{"left":0.08361037,"top":0.5826017,"width":0.04837101,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"open menu","depth":14,"bounds":{"left":0.14378324,"top":0.57222664,"width":0.0039893617,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"open menu","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Customise sidebar","depth":12,"bounds":{"left":0.08361037,"top":0.60415006,"width":0.071476065,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Customise sidebar","depth":15,"bounds":{"left":0.09424867,"top":0.6101357,"width":0.04155585,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Resize side navigation panel","depth":13,"bounds":{"left":0.2109375,"top":0.0981644,"width":0.062333778,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Spaces","depth":15,"bounds":{"left":0.27260637,"top":0.10933759,"width":0.013962766,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Spaces","depth":17,"bounds":{"left":0.27260637,"top":0.11292897,"width":0.013962766,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.2883976,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Jiminny (New) Jiminny (New)","depth":15,"bounds":{"left":0.29388297,"top":0.10933759,"width":0.034408245,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny (New)","depth":17,"bounds":{"left":0.3011968,"top":0.11292897,"width":0.027094414,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.33011967,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Epic - Change parent","depth":15,"bounds":{"left":0.3336104,"top":0.10933759,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-19240","depth":15,"bounds":{"left":0.3415891,"top":0.10933759,"width":0.018118352,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-19240","depth":17,"bounds":{"left":0.3415891,"top":0.11292897,"width":0.018118352,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/","depth":15,"bounds":{"left":0.3615359,"top":0.11173184,"width":0.0016622341,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Story - Change work type","depth":15,"bounds":{"left":0.3650266,"top":0.10933759,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"JY-20543","depth":15,"bounds":{"left":0.37300533,"top":0.10933759,"width":0.01861702,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543","depth":17,"bounds":{"left":0.37300533,"top":0.11292897,"width":0.01861702,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link","depth":16,"bounds":{"left":0.39029256,"top":0.11213089,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"AJ Reports > Tracking- Summary, edit","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"AJ Reports > Tracking","depth":11,"bounds":{"left":0.27260637,"top":0.1396648,"width":0.0831117,"height":0.022346368},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AJ Reports > Tracking","depth":12,"bounds":{"left":0.27260637,"top":0.13926576,"width":0.0831117,"height":0.023543496},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Add or create work related to this Story","depth":12,"bounds":{"left":0.27260637,"top":0.17158818,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Add or create work related to this Story","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"View app actions","depth":12,"bounds":{"left":0.28590426,"top":0.17158818,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"View app actions","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Collapse Description Description","depth":11,"bounds":{"left":0.26462767,"top":0.20989625,"width":0.38314494,"height":0.025538707},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Description","depth":13,"bounds":{"left":0.2632979,"top":0.21308859,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse Description","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Description","depth":14,"bounds":{"left":0.27260637,"top":0.2150838,"width":0.029587766,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit Description, edit","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"We want to be able to track the usage of the","depth":14,"bounds":{"left":0.27327126,"top":0.23982441,"width":0.09840426,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AJ","depth":15,"bounds":{"left":0.37167552,"top":0.23982441,"width":0.005984043,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"reports. We will use this to keep track of the adoption but also to use Userpilot tooltips to push users who are not using it to use it.","depth":14,"bounds":{"left":0.27327126,"top":0.23982441,"width":0.37184176,"height":0.03312051},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"track each generated reports in","depth":16,"bounds":{"left":0.28125,"top":0.2877095,"width":0.07047872,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DD","depth":17,"bounds":{"left":0.35172874,"top":0.2877095,"width":0.0066489363,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"- include company name and frequency","depth":16,"bounds":{"left":0.35837767,"top":0.2877095,"width":0.08909574,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for AJ reports - track each generated report in UserPilot as an event on the user - track it only for the user who has created the report","depth":16,"bounds":{"left":0.28125,"top":0.31005585,"width":0.29371676,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"for Exec reports - track each generated report - set the tracking for each user in the non-jiminny participants list","depth":16,"bounds":{"left":0.28125,"top":0.33240223,"width":0.24634309,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"note: for UP you can see how we currently track events such as Logged-activity, Held-conference","depth":14,"bounds":{"left":0.27327126,"top":0.36113328,"width":0.21575798,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Subtasks","depth":11,"bounds":{"left":0.27260637,"top":0.41899443,"width":0.023936171,"height":0.015961692},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Subtasks","depth":12,"bounds":{"left":0.27260637,"top":0.41939345,"width":0.023936171,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add subtask","depth":12,"bounds":{"left":0.26861703,"top":0.43974462,"width":0.035405584,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add subtask","depth":14,"bounds":{"left":0.27260637,"top":0.44573024,"width":0.027426861,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Linked work items","depth":11,"bounds":{"left":0.27260637,"top":0.48443735,"width":0.04654255,"height":0.015961692},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Linked work items","depth":12,"bounds":{"left":0.27260637,"top":0.4848364,"width":0.04654255,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add linked work item","depth":12,"bounds":{"left":0.26861703,"top":0.50359136,"width":0.054022606,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add linked work item","depth":14,"bounds":{"left":0.27260637,"top":0.50957704,"width":0.046043884,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Collapse Activity Activity","depth":12,"bounds":{"left":0.26462767,"top":0.5482841,"width":0.38314494,"height":0.025538707},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXButton","text":"Collapse Activity","depth":14,"bounds":{"left":0.2632979,"top":0.5514765,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Collapse Activity","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":15,"bounds":{"left":0.27260637,"top":0.5534717,"width":0.019780586,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"All","depth":14,"bounds":{"left":0.27360374,"top":0.5794094,"width":0.013962766,"height":0.0207502},"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"All","depth":16,"bounds":{"left":0.27792552,"top":0.5830008,"width":0.005319149,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Comments","depth":14,"bounds":{"left":0.28823137,"top":0.5794094,"width":0.032413565,"height":0.0207502},"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Comments","depth":16,"bounds":{"left":0.2925532,"top":0.5830008,"width":0.023769947,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"History","depth":14,"bounds":{"left":0.32130983,"top":0.5794094,"width":0.02443484,"height":0.0207502},"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"History","depth":16,"bounds":{"left":0.32563165,"top":0.5830008,"width":0.015791224,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Work log","depth":14,"bounds":{"left":0.3464096,"top":0.5794094,"width":0.02825798,"height":0.0207502},"help_text":"","role_description":"radio button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Work log","depth":16,"bounds":{"left":0.35073137,"top":0.5830008,"width":0.019614361,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Atlassian Intelligence Summarise","depth":14,"bounds":{"left":0.6291556,"top":0.58339983,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Summarise","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Newest first Newest first","depth":13,"bounds":{"left":0.6397939,"top":0.58339983,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Newest first","depth":15,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add a comment…","depth":15,"bounds":{"left":0.28656915,"top":0.62330407,"width":0.36053857,"height":0.07182761},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Suggest a reply...","depth":17,"bounds":{"left":0.2925532,"top":0.66161215,"width":0.046708778,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Suggest a reply...","depth":19,"bounds":{"left":0.29654256,"top":0.6644054,"width":0.03873005,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Status update...","depth":17,"bounds":{"left":0.34059176,"top":0.66161215,"width":0.04305186,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status update...","depth":19,"bounds":{"left":0.34458113,"top":0.6644054,"width":0.03507314,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Thanks...","depth":17,"bounds":{"left":0.3849734,"top":0.66161215,"width":0.028590426,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Thanks...","depth":19,"bounds":{"left":0.38896278,"top":0.6644054,"width":0.020611702,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pro tip:","depth":16,"bounds":{"left":0.28590426,"top":0.7035116,"width":0.013796543,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"press","depth":15,"bounds":{"left":0.2997008,"top":0.7035116,"width":0.012632979,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"M","depth":17,"bounds":{"left":0.31366357,"top":0.70430964,"width":0.0033244682,"height":0.011173184},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"to comment","depth":15,"bounds":{"left":0.31831783,"top":0.7035116,"width":0.023603724,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"More information about Nikolay Nikolov","depth":18,"bounds":{"left":0.2912234,"top":0.745012,"width":0.034906916,"height":0.01915403},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about Nikolay Nikolov","depth":20,"bounds":{"left":0.2912234,"top":0.745012,"width":0.034906916,"height":0.019553073},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":21,"bounds":{"left":0.2912234,"top":0.74940145,"width":0.034906916,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link to comment","depth":18,"bounds":{"left":0.3274601,"top":0.74780524,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"30 March 2026 at 14:41","depth":19,"bounds":{"left":0.2912234,"top":0.76456505,"width":0.044215426,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"BE: 1 d","depth":19,"bounds":{"left":0.2912234,"top":0.7893057,"width":0.014461436,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Reply","depth":17,"bounds":{"left":0.2912234,"top":0.8152434,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Add thumbs up reaction","depth":17,"bounds":{"left":0.3018617,"top":0.8152434,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Add reaction","depth":17,"bounds":{"left":0.3125,"top":0.8152434,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":17,"bounds":{"left":0.3231383,"top":0.8152434,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More actions","depth":17,"bounds":{"left":0.3337766,"top":0.8152434,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"More information about Nikolay Nikolov","depth":18,"bounds":{"left":0.2912234,"top":0.8567438,"width":0.034906916,"height":0.01915403},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about Nikolay Nikolov","depth":20,"bounds":{"left":0.2912234,"top":0.8567438,"width":0.034906916,"height":0.019553073},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Nikolay Nikolov","depth":21,"bounds":{"left":0.2912234,"top":0.8611333,"width":0.034906916,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Copy link to comment","depth":18,"bounds":{"left":0.3274601,"top":0.8595371,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"30 March 2026 at 14:38","depth":19,"bounds":{"left":0.2912234,"top":0.8762969,"width":0.04504654,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Where","depth":19,"bounds":{"left":0.2912234,"top":0.9010375,"width":0.015625,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"public function pushToDatadog","depth":20,"bounds":{"left":0.3081782,"top":0.9022346,"width":0.07081117,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"- push to","depth":19,"bounds":{"left":0.3801529,"top":0.9010375,"width":0.02244016,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"UserPilot 1 entry for the creator","depth":21,"bounds":{"left":0.2992021,"top":0.9233839,"width":0.06865027,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Reply","depth":17,"bounds":{"left":0.2912234,"top":0.9493216,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Add thumbs up reaction","depth":17,"bounds":{"left":0.3018617,"top":0.9493216,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Add reaction","depth":17,"bounds":{"left":0.3125,"top":0.9493216,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Edit","depth":17,"bounds":{"left":0.3231383,"top":0.9493216,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More actions","depth":17,"bounds":{"left":0.3337766,"top":0.9493216,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Resize work item view side panel","depth":12,"bounds":{"left":0.7077792,"top":0.0981644,"width":0.07280585,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Watch options: You are not watching this issue, 2 people watching","depth":13,"bounds":{"left":0.84607714,"top":0.10694334,"width":0.018284574,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"2","depth":17,"bounds":{"left":0.85738033,"top":0.11292897,"width":0.0029920214,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Share","depth":14,"bounds":{"left":0.86702126,"top":0.10694334,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Share","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Actions","depth":14,"bounds":{"left":0.8803192,"top":0.10694334,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Actions","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Closed - Change status","depth":11,"bounds":{"left":0.66240025,"top":0.14365523,"width":0.029587766,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Closed","depth":13,"bounds":{"left":0.66638964,"top":0.14964086,"width":0.015625,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Automation","depth":11,"bounds":{"left":0.6946476,"top":0.14365523,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Automation","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Improve Story","depth":11,"bounds":{"left":0.70794547,"top":0.14365523,"width":0.045212764,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Improve Story","depth":13,"bounds":{"left":0.717254,"top":0.14964086,"width":0.031914894,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Details","depth":14,"bounds":{"left":0.6653923,"top":0.18914606,"width":0.21725398,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXHeading","text":"Details","depth":17,"bounds":{"left":0.6747008,"top":0.19074222,"width":0.01861702,"height":0.015961692},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Details","depth":18,"bounds":{"left":0.6747008,"top":0.19114126,"width":0.017287234,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Assignee","depth":12,"bounds":{"left":0.6690492,"top":0.23024741,"width":0.020611702,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Assignee Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.69232047,"top":0.23064645,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Lukas Kovalik- edit Assignee","depth":12,"bounds":{"left":0.75615025,"top":0.23663208,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about Lukas Kovalik","depth":13,"bounds":{"left":0.75615025,"top":0.22745411,"width":0.04055851,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Lukas Kovalik","depth":15,"bounds":{"left":0.76678854,"top":0.23024741,"width":0.029920213,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Reporter","depth":12,"bounds":{"left":0.6690492,"top":0.26536313,"width":0.019281914,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Reporter Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.6909907,"top":0.26576218,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Galya Dimitrova- edit Reporter","depth":12,"bounds":{"left":0.75615025,"top":0.2717478,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXMenuButton","text":"More information about Galya Dimitrova","depth":13,"bounds":{"left":0.75615025,"top":0.26256984,"width":0.045212764,"height":0.01915403},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Galya Dimitrova","depth":15,"bounds":{"left":0.76678854,"top":0.26536313,"width":0.034574468,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Development","depth":12,"bounds":{"left":0.6690492,"top":0.35155627,"width":0.029421542,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Development Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.70113033,"top":0.3507582,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Open with VS Code Link to external website in new tab","depth":12,"bounds":{"left":0.7534907,"top":0.29449323,"width":0.13048537,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Open with VS Code","depth":15,"bounds":{"left":0.7621343,"top":0.30047885,"width":0.043218084,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Create branch Link to external website in new tab","depth":12,"bounds":{"left":0.7534907,"top":0.3200319,"width":0.12250665,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Create branch","depth":15,"bounds":{"left":0.7621343,"top":0.32601756,"width":0.03158245,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Create and checkout new branch","depth":12,"bounds":{"left":0.87599736,"top":0.3200319,"width":0.007978723,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"7 commits 5 days ago","depth":13,"bounds":{"left":0.7534907,"top":0.34557062,"width":0.13048537,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"7","depth":16,"bounds":{"left":0.75681514,"top":0.35155627,"width":0.0026595744,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"commits","depth":16,"bounds":{"left":0.75947475,"top":0.35155627,"width":0.019946808,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5 days ago","depth":17,"bounds":{"left":0.86053854,"top":0.35235435,"width":0.020777926,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"Create new commit","depth":13,"bounds":{"left":0.87599736,"top":0.34557062,"width":0.007978723,"height":0.025538707},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXLink","text":"1 pull request MERGED","depth":13,"bounds":{"left":0.7534907,"top":0.37110934,"width":0.13048537,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":16,"bounds":{"left":0.75681514,"top":0.37709498,"width":0.0018284575,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"pull request","depth":16,"bounds":{"left":0.7586436,"top":0.37709498,"width":0.027260639,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MERGED","depth":18,"bounds":{"left":0.86386305,"top":0.3794892,"width":0.016123671,"height":0.011173184},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open pull request","depth":13,"bounds":{"left":0.87599736,"top":0.37110934,"width":0.007978723,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"1 build dev-panel-successful-build-icon","depth":13,"bounds":{"left":0.7534907,"top":0.39664805,"width":0.13048537,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":16,"bounds":{"left":0.75681514,"top":0.40263367,"width":0.0018284575,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"build","depth":16,"bounds":{"left":0.7586436,"top":0.40263367,"width":0.011968086,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Open build","depth":13,"bounds":{"left":0.87599736,"top":0.39664805,"width":0.007978723,"height":0.025538707},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Components","depth":12,"bounds":{"left":0.6690492,"top":0.43774942,"width":0.028424202,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Components Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.70013297,"top":0.43814844,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Components, edit","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Platform","depth":12,"bounds":{"left":0.7578125,"top":0.43575418,"width":0.018284574,"height":0.017557861},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Platform","depth":13,"bounds":{"left":0.7578125,"top":0.4385475,"width":0.018284574,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sub-Product","depth":12,"bounds":{"left":0.6690492,"top":0.47286513,"width":0.02825798,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Sub-Product Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.6999667,"top":0.47326416,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Sub-Product, Add options selected, edit","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Add options","depth":12,"bounds":{"left":0.75615025,"top":0.47286513,"width":0.02642952,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Labels","depth":12,"bounds":{"left":0.6690492,"top":0.5079808,"width":0.01462766,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Labels Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.68633646,"top":0.5083799,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Labels","depth":12,"bounds":{"left":0.75615025,"top":0.5143655,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None","depth":13,"bounds":{"left":0.75615025,"top":0.5079808,"width":0.011635638,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Story point estimate","depth":12,"bounds":{"left":0.6690492,"top":0.54309654,"width":0.044714097,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"bounds":{"left":0.71775264,"top":0.5434956,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Story point estimate Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.7257314,"top":0.5434956,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Story point estimate","depth":12,"bounds":{"left":0.75615025,"top":0.5494813,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None","depth":14,"bounds":{"left":0.75615025,"top":0.54309654,"width":0.011635638,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Story Points","depth":12,"bounds":{"left":0.6690492,"top":0.57821226,"width":0.026928192,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"bounds":{"left":0.6999667,"top":0.5786113,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Story Points Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.70794547,"top":0.5786113,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Story Points","depth":12,"bounds":{"left":0.75615025,"top":0.584597,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"2","depth":15,"bounds":{"left":0.75947475,"top":0.5798085,"width":0.002493351,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Organisations","depth":12,"bounds":{"left":0.6690492,"top":0.61332804,"width":0.030751329,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about Organisations","depth":11,"bounds":{"left":0.7037899,"top":0.61452514,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Organisations Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.7117686,"top":0.61372703,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Organisations, None selected, edit","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None","depth":12,"bounds":{"left":0.75615025,"top":0.61332804,"width":0.011635638,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Priority","depth":12,"bounds":{"left":0.6690492,"top":0.64844376,"width":0.016289894,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Priority Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.68799865,"top":0.64884275,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Priority","depth":12,"bounds":{"left":0.75615025,"top":0.6548284,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Medium","depth":13,"bounds":{"left":0.764129,"top":0.64844376,"width":0.01761968,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Fix versions","depth":12,"bounds":{"left":0.6690492,"top":0.6835595,"width":0.026761968,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Fix versions Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.6984708,"top":0.6839585,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Fix versions, None selected, edit","depth":11,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None","depth":12,"bounds":{"left":0.75615025,"top":0.6835595,"width":0.011635638,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sprint","depth":12,"bounds":{"left":0.6690492,"top":0.7186752,"width":0.013297873,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"bounds":{"left":0.68633646,"top":0.71907425,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Sprint Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.69431514,"top":0.71907425,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Sprint","depth":12,"bounds":{"left":0.75615025,"top":0.72505987,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"None","depth":13,"bounds":{"left":0.75615025,"top":0.7186752,"width":0.011635638,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"+1","depth":14,"bounds":{"left":0.77044547,"top":0.71747804,"width":0.0076462766,"height":0.015961692},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"+1","depth":16,"bounds":{"left":0.77177525,"top":0.7186752,"width":0.004986702,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Days","depth":12,"bounds":{"left":0.6690492,"top":0.7537909,"width":0.011136968,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Days Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.6828458,"top":0.75418997,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Days","depth":12,"bounds":{"left":0.75615025,"top":0.7601756,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1","depth":13,"bounds":{"left":0.75615025,"top":0.7537909,"width":0.0018284575,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Need QA","depth":12,"bounds":{"left":0.6690492,"top":0.78890663,"width":0.019780586,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Need QA Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.69148934,"top":0.7893057,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Need QA","depth":12,"bounds":{"left":0.75615025,"top":0.7952913,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"No","depth":15,"bounds":{"left":0.7578125,"top":0.78890663,"width":0.006150266,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Parent","depth":12,"bounds":{"left":0.6690492,"top":0.82402235,"width":0.014461436,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXMenuButton","text":"More information about","depth":11,"bounds":{"left":0.6875,"top":0.8244214,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"menu button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"Parent Pin to top. Only you can see pinned fields.","depth":11,"bounds":{"left":0.69547874,"top":0.8244214,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Edit Parent","depth":12,"bounds":{"left":0.75615025,"top":0.830407,"width":0.0003324468,"height":0.0007980846},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Click to visit JY-19240 AJ Reports","depth":13,"bounds":{"left":0.764129,"top":0.8228252,"width":0.04920213,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-19240 AJ Reports","depth":14,"bounds":{"left":0.76545876,"top":0.82402235,"width":0.04654255,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Canny Links","depth":12,"bounds":{"left":0.6690492,"top":0.8591381,"width":0.027260639,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Open","depth":13,"bounds":{"left":0.75615025,"top":0.8591381,"width":0.013131649,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Canny Links","depth":13,"bounds":{"left":0.7692819,"top":0.8591381,"width":0.027759308,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More fields","depth":14,"bounds":{"left":0.6653923,"top":0.9122107,"width":0.22257313,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"More fields","depth":17,"bounds":{"left":0.6747008,"top":0.91380686,"width":0.029587766,"height":0.015961692},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"More fields","depth":18,"bounds":{"left":0.6747008,"top":0.9142059,"width":0.02825798,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Automation","depth":14,"bounds":{"left":0.6653923,"top":0.9557063,"width":0.22124335,"height":0.024740623},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Automation","depth":17,"bounds":{"left":0.6747008,"top":0.96009576,"width":0.030418882,"height":0.015961692},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Automation","depth":18,"bounds":{"left":0.6747008,"top":0.9604948,"width":0.029089095,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"featureOS","depth":15,"bounds":{"left":0.6653923,"top":0.9940144,"width":0.22124335,"height":0.0059856176},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"featureOS","depth":18,"bounds":{"left":0.6747008,"top":0.99840385,"width":0.026928192,"height":0.0015961528},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"featureOS","depth":19,"bounds":{"left":0.6747008,"top":0.9988029,"width":0.025598405,"height":0.0011970997},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Sentry","depth":14,"bounds":{"left":0.6653923,"top":1.0,"width":0.22124335,"height":-0.032322407},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXHeading","text":"Sentry","depth":17,"bounds":{"left":0.6747008,"top":1.0,"width":0.017952127,"height":-0.03671193},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sentry","depth":18,"bounds":{"left":0.6747008,"top":1.0,"width":0.01662234,"height":-0.037110925},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Created","depth":12,"bounds":{"left":0.66705453,"top":1.0,"width":0.014960106,"height":-0.07302475},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"27 March 2026 at 15:32","depth":13,"bounds":{"left":0.6831782,"top":1.0,"width":0.04454787,"height":-0.07302475},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated","depth":12,"bounds":{"left":0.66705453,"top":1.0,"width":0.016123671,"height":-0.09058261},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"5 days ago","depth":12,"bounds":{"left":0.6843417,"top":1.0,"width":0.020611702,"height":-0.09058261},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"Configure","depth":12,"bounds":{"left":0.85355717,"top":1.0,"width":0.037400264,"height":-0.06783724},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Configure","depth":14,"bounds":{"left":0.86486036,"top":1.0,"width":0.022107713,"height":-0.073822856},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Open Rovo Chat","depth":9,"bounds":{"left":0.97606385,"top":0.9425379,"width":0.015957447,"height":0.03830806},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Open Rovo Chat","depth":11,"bounds":{"left":0.98387635,"top":0.9612929,"width":0.016123652,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"Development JY-20543","depth":11,"bounds":{"left":0.38696808,"top":0.12051077,"width":0.24767287,"height":0.022346368},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Development JY-20543","depth":12,"bounds":{"left":0.38696808,"top":0.12011173,"width":0.08992686,"height":0.023543496},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Give feedback","depth":11,"bounds":{"left":0.63464093,"top":0.118914604,"width":0.047539894,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Give feedback","depth":13,"bounds":{"left":0.6459442,"top":0.12490024,"width":0.032247342,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close Modal","depth":12,"bounds":{"left":0.6821808,"top":0.118914604,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Close Modal","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Branches","depth":12,"bounds":{"left":0.38430852,"top":0.17318435,"width":0.026263298,"height":0.025538707},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Branches","depth":14,"bounds":{"left":0.38696808,"top":0.17917,"width":0.020944148,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Commits","depth":12,"bounds":{"left":0.4105718,"top":0.17318435,"width":0.024933511,"height":0.025538707},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Commits","depth":14,"bounds":{"left":0.41323137,"top":0.17917,"width":0.019614361,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pull requests","depth":12,"bounds":{"left":0.43550533,"top":0.17318435,"width":0.034242023,"height":0.025538707},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Pull requests","depth":14,"bounds":{"left":0.4381649,"top":0.17917,"width":0.028922873,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Builds","depth":12,"bounds":{"left":0.46974733,"top":0.17318435,"width":0.018783245,"height":0.025538707},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Builds","depth":14,"bounds":{"left":0.47240692,"top":0.17917,"width":0.013464096,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Deployments","depth":12,"bounds":{"left":0.48853058,"top":0.17318435,"width":0.034574468,"height":0.025538707},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deployments","depth":14,"bounds":{"left":0.49119017,"top":0.17917,"width":0.02925532,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feature flags","depth":12,"bounds":{"left":0.523105,"top":0.17318435,"width":0.034408245,"height":0.025538707},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feature flags","depth":14,"bounds":{"left":0.52576464,"top":0.17917,"width":0.029089095,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Other links","depth":12,"bounds":{"left":0.5575133,"top":0.17318435,"width":0.02925532,"height":0.025538707},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Other links","depth":14,"bounds":{"left":0.56017286,"top":0.17917,"width":0.023936171,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"jiminny/app","depth":16,"bounds":{"left":0.40425533,"top":0.22426178,"width":0.029089095,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"jiminny/app","depth":18,"bounds":{"left":0.40425533,"top":0.22625698,"width":0.029089095,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(","depth":15,"bounds":{"left":0.43600398,"top":0.22625698,"width":0.0018284575,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GitHub","depth":15,"bounds":{"left":0.43783244,"top":0.22625698,"width":0.017287234,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":")","depth":15,"bounds":{"left":0.45511967,"top":0.22625698,"width":0.0018284575,"height":0.01556265},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Author","depth":15,"bounds":{"left":0.38696808,"top":0.25977653,"width":0.013297873,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ID","depth":15,"bounds":{"left":0.40757978,"top":0.25977653,"width":0.004654255,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Summary","depth":15,"bounds":{"left":0.43733376,"top":0.25977653,"width":0.01861702,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Status","depth":15,"bounds":{"left":0.5689827,"top":0.25977653,"width":0.012466756,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Reviewer","depth":15,"bounds":{"left":0.6140292,"top":0.25977653,"width":0.017952127,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Updated","depth":15,"bounds":{"left":0.6499335,"top":0.25977653,"width":0.016456118,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#11932","depth":16,"bounds":{"left":0.40757978,"top":0.29409418,"width":0.015292553,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20543 add AJ reports User pilot tracking","depth":16,"bounds":{"left":0.43733376,"top":0.28132483,"width":0.097240694,"height":0.01396648},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking","depth":17,"bounds":{"left":0.43733376,"top":0.28132483,"width":0.097240694,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20543-AJ-report-tracking","depth":18,"bounds":{"left":0.43733376,"top":0.30247405,"width":0.034906916,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543-AJ-report-tracking","depth":19,"bounds":{"left":0.43899602,"top":0.3044693,"width":0.057679523,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-18909-automated-reports-ask-jiminny","depth":18,"bounds":{"left":0.4788896,"top":0.30247405,"width":0.084773935,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-18909-automated-reports-ask-jiminny","depth":19,"bounds":{"left":0.48071808,"top":0.3044693,"width":0.08111702,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"MERGED","depth":17,"bounds":{"left":0.5703125,"top":0.29648843,"width":0.015957447,"height":0.011173184},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5 days ago","depth":17,"bounds":{"left":0.6499335,"top":0.29409418,"width":0.024102394,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"More info","depth":16,"bounds":{"left":0.6727061,"top":0.29608938,"width":0.0039893617,"height":0.009577015},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Author","depth":15,"bounds":{"left":0.38696808,"top":0.25977653,"width":0.013297873,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ID","depth":15,"bounds":{"left":0.40757978,"top":0.25977653,"width":0.004654255,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"#11932","depth":16,"bounds":{"left":0.40757978,"top":0.29409418,"width":0.015292553,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Summary","depth":15,"bounds":{"left":0.43733376,"top":0.25977653,"width":0.01861702,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20543 add AJ reports User pilot tracking","depth":16,"bounds":{"left":0.43733376,"top":0.28132483,"width":0.097240694,"height":0.01396648},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"JY-20543 add AJ reports User pilot tracking","depth":17,"bounds":{"left":0.43733376,"top":0.28132483,"width":0.097240694,"height":0.01396648},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-20543-AJ-report-tracking","depth":18,"bounds":{"left":0.43733376,"top":0.30247405,"width":0.034906916,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20543-AJ-report-tracking","depth":19,"bounds":{"left":0.43899602,"top":0.3044693,"width":0.057679523,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"JY-18909-automated-reports-ask-jiminny","depth":18,"bounds":{"left":0.4788896,"top":0.30247405,"width":0.084773935,"height":0.015961692},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-18909-automated-reports-ask-jiminny","depth":19,"bounds":{"left":0.48071808,"top":0.3044693,"width":0.08111702,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Status","depth":15,"bounds":{"left":0.5689827,"top":0.25977653,"width":0.012466756,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-6389700289773527941
|
7475088093756999751
|
visual_change
|
accessibility
|
NULL
|
JY-20692 change confirmation parameter by LakyLak JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app
github.com
[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app
JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app
JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app
JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app
Close tab
[JY-20543] AJ Reports > Tracking - Jira
[JY-20543] AJ Reports > Tracking - Jira
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Skip to:
Sidebar
Sidebar
Top Bar
Top Bar
Main Content
Main Content
Collapse sidebar [
Collapse sidebar [
Switch sites or apps
Switch sites or apps
Go to your Jira homepage
Search, press enter to navigate to advanced search with your text query
Create
Create
Rovo Ask Rovo
Ask Rovo
5 Notifications
5 Notifications
Help
Help
Settings
Settings
[EMAIL]
For you
For you
Recent
Recent
Starred
Starred
Apps
Apps
More actions for Apps
More actions for Apps
Spaces
Spaces
Create space
Create space
More actions for spaces
More actions for spaces
Recent
Jiminny (New)
Jiminny (New)
Jiminny (New)
Create board
Create board
More actions for Jiminny (New)
More actions for Jiminny (New)
Platform Team
Platform Team
Board actions
Board actions
SE Kanban
SE Kanban
Board actions
Board actions
Capture Team
Capture Team
Board actions
Board actions
Enterprise Stability Issues 🤕
Enterprise Stability Issues 🤕
Board actions
Board actions
Processing Team
Processing Team
Board actions
Board actions
Service-Desk
Service-Desk
More actions for Service-Desk
More actions for Service-Desk
More spaces
More spaces
Filters
Filters
More actions for Filters
More actions for Filters
Dashboards
Dashboards
Create dashboard
Create dashboard
More actions for Dashboards
More actions for Dashboards
Operations
Operations
More actions for Operations
More actions for Operations
Confluence , (opens new window)
Confluence
, (opens new window)
Teams , (opens new window)
Teams
, (opens new window)
open menu
open menu
Customise sidebar
Customise sidebar
Resize side navigation panel
Spaces
Spaces
/
Jiminny (New) Jiminny (New)
Jiminny (New)
/
Epic - Change parent
JY-19240
JY-19240
/
Story - Change work type
JY-20543
JY-20543
Copy link
AJ Reports > Tracking- Summary, edit
AJ Reports > Tracking
AJ Reports > Tracking
Add or create work related to this Story
Add or create work related to this Story
View app actions
View app actions
Collapse Description Description
Collapse Description
Collapse Description
Description
Edit Description, edit
We want to be able to track the usage of the
AJ
reports. We will use this to keep track of the adoption but also to use Userpilot tooltips to push users who are not using it to use it.
track each generated reports in
DD
- include company name and frequency
for AJ reports - track each generated report in UserPilot as an event on the user - track it only for the user who has created the report
for Exec reports - track each generated report - set the tracking for each user in the non-jiminny participants list
note: for UP you can see how we currently track events such as Logged-activity, Held-conference
Subtasks
Subtasks
Add subtask
Add subtask
Linked work items
Linked work items
Add linked work item
Add linked work item
Collapse Activity Activity
Collapse Activity
Collapse Activity
Activity
All
All
Comments
Comments
History
History
Work log
Work log
Atlassian Intelligence Summarise
Summarise
Newest first Newest first
Newest first
Add a comment…
Suggest a reply...
Suggest a reply...
Status update...
Status update...
Thanks...
Thanks...
Pro tip:
press
M
to comment
More information about Nikolay Nikolov
More information about Nikolay Nikolov
Nikolay Nikolov
Copy link to comment
30 March 2026 at 14:41
BE: 1 d
Reply
Add thumbs up reaction
Add reaction
Edit
More actions
More information about Nikolay Nikolov
More information about Nikolay Nikolov
Nikolay Nikolov
Copy link to comment
30 March 2026 at 14:38
Where
public function pushToDatadog
- push to
UserPilot 1 entry for the creator
Reply
Add thumbs up reaction
Add reaction
Edit
More actions
Resize work item view side panel
Watch options: You are not watching this issue, 2 people watching
2
Share
Share
Actions
Actions
Closed - Change status
Closed
Automation
Automation
Improve Story
Improve Story
Details
Details
Details
Assignee
Assignee Pin to top. Only you can see pinned fields.
Lukas Kovalik- edit Assignee
More information about Lukas Kovalik
Lukas Kovalik
Reporter
Reporter Pin to top. Only you can see pinned fields.
Galya Dimitrova- edit Reporter
More information about Galya Dimitrova
Galya Dimitrova
Development
Development Pin to top. Only you can see pinned fields.
Open with VS Code Link to external website in new tab
Open with VS Code
Create branch Link to external website in new tab
Create branch
Create and checkout new branch
7 commits 5 days ago
7
commits
5 days ago
Create new commit
1 pull request MERGED
1
pull request
MERGED
Open pull request
1 build dev-panel-successful-build-icon
1
build
Open build
Components
Components Pin to top. Only you can see pinned fields.
Edit Components, edit
Platform
Platform
Sub-Product
Sub-Product Pin to top. Only you can see pinned fields.
Edit Sub-Product, Add options selected, edit
Add options
Labels
Labels Pin to top. Only you can see pinned fields.
Edit Labels
None
Story point estimate
More information about
Story point estimate Pin to top. Only you can see pinned fields.
Edit Story point estimate
None
Story Points
More information about
Story Points Pin to top. Only you can see pinned fields.
Edit Story Points
2
Organisations
More information about Organisations
Organisations Pin to top. Only you can see pinned fields.
Edit Organisations, None selected, edit
None
Priority
Priority Pin to top. Only you can see pinned fields.
Edit Priority
Medium
Fix versions
Fix versions Pin to top. Only you can see pinned fields.
Edit Fix versions, None selected, edit
None
Sprint
More information about
Sprint Pin to top. Only you can see pinned fields.
Edit Sprint
None
+1
+1
Days
Days Pin to top. Only you can see pinned fields.
Edit Days
1
Need QA
Need QA Pin to top. Only you can see pinned fields.
Edit Need QA
No
Parent
More information about
Parent Pin to top. Only you can see pinned fields.
Edit Parent
Click to visit JY-19240 AJ Reports
JY-19240 AJ Reports
Canny Links
Open
Canny Links
More fields
More fields
More fields
Automation
Automation
Automation
featureOS
featureOS
featureOS
Sentry
Sentry
Sentry
Created
27 March 2026 at 15:32
Updated
5 days ago
Configure
Configure
Open Rovo Chat
Open Rovo Chat
Development JY-20543
Development JY-20543
Give feedback
Give feedback
Close Modal
Close Modal
Branches
Branches
Commits
Commits
Pull requests
Pull requests
Builds
Builds
Deployments
Deployments
Feature flags
Feature flags
Other links
Other links
jiminny/app
jiminny/app
(
GitHub
)
Author
ID
Summary
Status
Reviewer
Updated
#11932
JY-20543 add AJ reports User pilot tracking
JY-20543 add AJ reports User pilot tracking
JY-20543-AJ-report-tracking
JY-20543-AJ-report-tracking
JY-18909-automated-reports-ask-jiminny
JY-18909-automated-reports-ask-jiminny
MERGED
5 days ago
More info
Author
ID
#11932
Summary
JY-20543 add AJ reports User pilot tracking
JY-20543 add AJ reports User pilot tracking
JY-20543-AJ-report-tracking
JY-20543-AJ-report-tracking
JY-18909-automated-reports-ask-jiminny
JY-18909-automated-reports-ask-jiminny
Status...
|
NULL
|
|
52473
|
1132
|
84
|
2026-04-20T07:05:05.107202+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776668705107_m1.jpg...
|
Firefox
|
Meet - Daily - Platform — Work
|
1
|
meet.google.com/agt-teir-cwt?authuser=lukas.kovali meet.google.com/agt-teir-cwt?authuser=lukas.kovalik%40jiminny.com...
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Meet - Daily - Platform
Close tab
[JY-20500] Batch Meet - Daily - Platform
Close tab
[JY-20500] Batch initial sync for Salesforce - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Meet - Daily - Platform","depth":4,"bounds":{"left":0.0,"top":0.072222225,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.072222225,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"[JY-20500] Batch initial sync for Salesforce - Jira","depth":4,"bounds":{"left":0.0,"top":0.11777778,"width":0.033680554,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.0013888889,"top":0.11777778,"width":0.010416667,"height":0.016666668},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.005902778,"top":0.16555555,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.0,"top":0.7977778,"width":0.033680554,"height":0.043333333},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.0,"top":0.8411111,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.0,"top":0.8794444,"width":0.033680554,"height":0.03888889},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.0,"top":0.91833335,"width":0.033680554,"height":0.038333334},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0,"top":0.95666665,"width":0.033680554,"height":0.043333333},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXHeading","text":"Nikolay Yankov (Presenting)","depth":12,"bounds":{"left":0.07534722,"top":0.101111114,"width":0.124305554,"height":0.022222223},"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Yankov (Presenting)","depth":13,"bounds":{"left":0.07534722,"top":0.10222222,"width":0.124305554,"height":0.020555556},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"People","depth":15,"bounds":{"left":0.8871528,"top":0.08944444,"width":0.040625,"height":0.04},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"7","depth":22,"bounds":{"left":0.9149306,"top":0.101111114,"width":0.004513889,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Take notes with Gemini","depth":14,"bounds":{"left":0.93333334,"top":0.08944444,"width":0.025,"height":0.04},"role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Take notes with Gemini","depth":17,"bounds":{"left":0.9361111,"top":0.101111114,"width":0.06388891,"height":0.017222222},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-778949295445729706
|
1008937562440398470
|
click
|
hybrid
|
NULL
|
Meet - Daily - Platform
Close tab
[JY-20500] Batch Meet - Daily - Platform
Close tab
[JY-20500] Batch initial sync for Salesforce - Jira
Close tab
New Tab
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
Customize sidebar
Nikolay Yankov (Presenting)
Nikolay Yankov (Presenting)
People
7
Take notes with Gemini
Take notes with Gemini
FirefoxFileEditViewHistoryBookmarksProfilesToolsWindowHelplahl§ Preparation for Refi... in 4 h 55 m→Cmeet.google.com/agt-teir-cwt?authuser=lukas.kovalik%40jiminny.comNikolay Yankov (Presenting)Edit® For you© Recent|# Starred8? Apps0 Spacesaaarco(9 Service-Desk@ Jiminny (01d)Jiminny (New)I CD Platform TeamIID Capture TeamIID Enterprise Stability L(ID Processing TeamCID SE Kanban= More spaces= FitersCB Dashboards€ Operations-2083 Confluence38 Teamd5 Customise sidebarC ASk57 Se•CosxQF x 0mm x C ft x | • Gt xQ(Y x|F Pro XProjects81ED 0©$ ClaudeO CrcecSentry 8X C Tasks+ CreateSpaces Jminy (New)0JT-3871 4JY-2050Batch initial sync for HubspotDescriptionProblems:Solution:vurrenky syniching thow cogoee is nos working sumbenuy when a nuge amount or oojooss are imported trom tie trow tawo Jamiiny.• Importing deals, accounts and contacts can take hoursbatches of deats, accounts and contacts from Hubspot and store the payload in Redis• There should be a separate job inport object per batches of 100 updated deals, accounts and contacts which reads the info for objects from Redis and import themIn Jiminny• There should be retry mechanism of the jobs so that in case they are using spot instance for processing which is turned oft, the job will be retried• We should clean the Redis in 24 hours in case there are objects which are stll not processedSubtasksAdd subtaskLinked work items# dr-zuso0 baich imost sync vor sa estorcsBACKLOSV8 =Add a comment…Who is working on this.Status update….Thanks….8• Mon 20 Apr 10:05— DevAsk Rovobackiog# Improve StoryDetails|Assignee8 UnassignedAssign to meReporter|8 Stetia StoyanovaQuick start developmentLink this work item to your code byincluding keys when creating abranch, commit, or pull requestbelow. Learn moreOismis:Q Open with VS CodeCreate orancr4 Create commi)ComponentsPlatformSub-ProductAdd optionsLabelsNoneStory point estimate.••100% <78• Mon 20 Apr 10:05:05=7Nikolay NikolovNikolay Yankov2 othersAneliya AngelovaLukas Kovalik19:4610:05 AM | Daily - PlatformSộ3I1I...
|
52470
|
|
54140
|
1166
|
84
|
2026-04-20T08:39:52.613160+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776674392613_m1.jpg...
|
Firefox
|
Jiminny — Work
|
1
|
app.staging.jiminny.com/ondemand?page=1
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 2 Q2 - Platform Team - Scrum Board Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
JY-20553 | Improve crm-sync delays by yalokin-jiminny · Pull Request #11976 · jiminny/app
JY-20553 | Improve crm-sync delays by yalokin-jiminny · Pull Request #11976 · jiminny/app
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app
JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app
JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app
JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app
[JY-20543] AJ Reports > Tracking - Jira
[JY-20543] AJ Reports > Tracking - Jira
[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira
[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira
Ask Jiminny Reports by nikolay-yankov · Pull Request #11894 · jiminny/app
Ask Jiminny Reports by nikolay-yankov · Pull Request #11894 · jiminny/app
New Tab
New Tab
Product Growth Platform | Userpilot
Product Growth Platform | Userpilot
Userpilot | Logged-activity
Userpilot | Logged-activity
fix(security): composer dependency updates – 2026-04-15 by github-actions[bot] · Pull Request #11970 · jiminny/app
fix(security): composer dependency updates – 2026-04-15 by github-actions[bot] · Pull Request #11970 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Feed — jiminny — Sentry
Feed — jiminny — Sentry
fix(security): composer dependency updates – 2026-04-15 by github-actions[bot] · Pull Request #11970 · jiminny/app
fix(security): composer dependency updates – 2026-04-15 by github-actions[bot] · Pull Request #11970 · jiminny/app
Jiminny
Jiminny
Jiminny
Jiminny
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 873114
75
75
1536
activities
Get Notified
Sort by Sort by: Most recent
Sort by
Sort by:
Most recent
Add Recording
common.ai-icon-alt
Duration:
1m and above
Recorded:
Only Recorded
Save Search
Clear all
Saved searches
Saved searches
Team
Search teams Search teams
Search teams
Search teams
Host
Search team members Search team members
Search team members
Search team members
Also search as participant
Participant
Search team members Search team members
Search team members
Search team members
Customer
Customer
Transcript
Search transcript
Select option Said by
Select option
Said by
Select option Anyone
Select option
Anyone
Period
All time
Topics
Search topics Search topics
Search topics
Search topics
Activity type
Search activity types Search activity types
Search activity types
Search activity types
Duration
Min (minutes)
1
Max (minutes)
AI call score
Select AI call score Select AI call score
Select AI call score
Select AI call score
Key Words Score
Select key words score Select key words score
Select key words score
Select key words score
Coaching score
Select coaching score Select coaching score
Select coaching score
Select coaching score
Coach
Search coaches Search coaches
Search coaches
Search coaches
Stage at call
Search stages Search stages
Search stages
Search stages
Current stage
Search stages Search stages
Search stages
Search stages
Language
Search language Search language
Search language
Search language
Playlist
Search playlists Search playlists
Search playlists
Search playlists
Pending CRM notes
Not logged to CRM
Recorded
Search recorded Only Recorded
Search recorded
Only Recorded
Show internal and external activities
Select option Select option
Select option
Select option
Platform
Search platforms Search platforms
Search platforms
Search platforms
Call type
Search channels Search channels
Search channels
Search channels
Outcome
Search CRM Outcome Search CRM Outcome
Search CRM Outcome
Search CRM Outcome
Deal value
Min (amount)
Max (amount)
Deal close date
All time
Deal age
0
1359d
2717d+
Talking speed
0
177 wpm
252 wpm+
Talk ratio
0%
40%
60%
100%
Patience
0s
1s
2s
3s+
Longest monologue
0
5m
10m+
Longest customer story
0
5m
10m+
Rep questions
0
25
50+
Engaging questions
0
25
50+
Insightful questions
0
25
50+
Customer questions
0
25
50+
Comments
0
1
2
5
10
20+
Host
Activity
Contact
Activity Type
Current Stage
Stats
Duration
Date
Adelina Petrova Unknown Customer 2026-04-08-call-to-441173692222 Discovery Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 0 1m08/04/2026, 4:54 PM
Unknown Customer
2026-04-08-call-to-441173692222
Discovery
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
0
1m
08/04/2026, 4:54 PM
Veselin Kulov Unknown Customer Notetaker added by Veselin Kulov Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 1 7m08/04/2026, 12:43 AM
Unknown Customer
Notetaker added by Veselin Kulov
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
1
7m
08/04/2026, 12:43 AM
Veselin Kulov Unknown Customer Notetaker added by Veselin Kulov Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 0 4m10/03/2026, 10:01 AM
Unknown Customer
Notetaker added by Veselin Kulov
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
0
4m
10/03/2026, 10:01 AM
Veselin Kulov Unknown Customer Notetaker added by Veselin Kulov Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 0 1m26/02/2026, 1:51 PM
Unknown Customer
Notetaker added by Veselin Kulov
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
0
1m
26/02/2026, 1:51 PM
Martin Petkov Martin Petkov at Drun Drun Chiki Chiki Bam Bam 2025-10-21-inbound-call-from-07725-762786 (6) Martin Petkov Web Demo Verbal Commitment $2 Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 1 11m13/02/2026, 2:27 PM
Martin Petkov at Drun Drun Chiki Chiki Bam Bam
2025-10-21-inbound-call-from-07725-762786 (6)
Martin Petkov
Web Demo
Verbal Commitment
$2
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
1
11m
13/02/2026, 2:27 PM
Nikolay Yankov Nikolay Yankov at Jiminny (EU) Nikolay Yankov Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 0 2m12/02/2026, 10:22 AM
Nikolay Yankov at Jiminny (EU)
Nikolay Yankov
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
0
2m
12/02/2026, 10:22 AM
Nikolay Yankov Nikolay Yankov at Jiminny (EU) Nikolay Yankov Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 0 4m12/02/2026, 10:13 AM
Nikolay Yankov at Jiminny (EU)
Nikolay Yankov...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0038194444,"top":0.072222225,"width":0.15868056,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"JY-20553 | Improve crm-sync delays by yalokin-jiminny · Pull Request #11976 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.13222222,"width":0.16631944,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20553 | Improve crm-sync delays by yalokin-jiminny · Pull Request #11976 · jiminny/app","depth":5,"bounds":{"left":0.027777778,"top":0.14777778,"width":0.32951388,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"bounds":{"left":0.0,"top":0.17777778,"width":0.16631944,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":5,"bounds":{"left":0.027777778,"top":0.19333333,"width":0.19895834,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.22333333,"width":0.16631944,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app","depth":5,"bounds":{"left":0.027777778,"top":0.23888889,"width":0.41701388,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.2688889,"width":0.16631944,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app","depth":5,"bounds":{"left":0.027777778,"top":0.28444445,"width":0.32430556,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20543] AJ Reports > Tracking - Jira","depth":4,"bounds":{"left":0.0,"top":0.31444445,"width":0.16631944,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20543] AJ Reports > Tracking - Jira","depth":5,"bounds":{"left":0.027777778,"top":0.33,"width":0.14583333,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira","depth":4,"bounds":{"left":0.0,"top":0.36,"width":0.16631944,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira","depth":5,"bounds":{"left":0.027777778,"top":0.37555555,"width":0.22326389,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Ask Jiminny Reports by nikolay-yankov · Pull Request #11894 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.40555555,"width":0.16631944,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny Reports by nikolay-yankov · Pull Request #11894 · jiminny/app","depth":5,"bounds":{"left":0.027777778,"top":0.4211111,"width":0.26979166,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.4511111,"width":0.16631944,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.027777778,"top":0.46666667,"width":0.03125,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Product Growth Platform | Userpilot","depth":4,"bounds":{"left":0.0,"top":0.49666667,"width":0.16631944,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Product Growth Platform | Userpilot","depth":5,"bounds":{"left":0.027777778,"top":0.51222223,"width":0.12951389,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Userpilot | Logged-activity","depth":4,"bounds":{"left":0.0,"top":0.5422222,"width":0.16631944,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Userpilot | Logged-activity","depth":5,"bounds":{"left":0.027777778,"top":0.55777776,"width":0.096875,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"fix(security): composer dependency updates – 2026-04-15 by github-actions[bot] · Pull Request #11970 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.5877778,"width":0.16631944,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"fix(security): composer dependency updates – 2026-04-15 by github-actions[bot] · Pull Request #11970 · jiminny/app","depth":5,"bounds":{"left":0.027777778,"top":0.60333335,"width":0.42881945,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.6333333,"width":0.16631944,"height":0.045555554},"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.027777778,"top":0.6488889,"width":0.08194444,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.0,"top":0.6788889,"width":0.16631944,"height":0.045555554},"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.027777778,"top":0.6944444,"width":0.08923611,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"fix(security): composer dependency updates – 2026-04-15 by github-actions[bot] · Pull Request #11970 · jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.72444445,"width":0.16631944,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"fix(security): composer dependency updates – 2026-04-15 by github-actions[bot] · Pull Request #11970 · jiminny/app","depth":5,"bounds":{"left":0.027777778,"top":0.74,"width":0.42881945,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.77,"width":0.16631944,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.027777778,"top":0.78555554,"width":0.027430555,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.8155556,"width":0.16631944,"height":0.045555554},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.027777778,"top":0.83111113,"width":0.027430555,"height":0.015},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.140625,"top":0.82555556,"width":0.016666668,"height":0.026666667},"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.005902778,"top":0.86333334,"width":0.15486111,"height":0.035555556},"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.005902778,"top":0.9583333,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.028819444,"top":0.9583333,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.052083332,"top":0.9583333,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.07534722,"top":0.9583333,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.09861111,"top":0.9583333,"width":0.022222223,"height":0.035555556},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-18909-automated-reports-ask-jiminny ■ 873114","depth":9,"bounds":{"left":0.16770834,"top":0.98055553,"width":0.21006945,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"75","depth":12,"bounds":{"left":0.171875,"top":0.88,"width":0.033333335,"height":0.04888889},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"75","depth":14,"bounds":{"left":0.1892361,"top":0.885,"width":0.009722223,"height":0.016666668},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1536","depth":14,"bounds":{"left":0.43020833,"top":0.09944444,"width":0.03576389,"height":0.027222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"activities","depth":14,"bounds":{"left":0.46597221,"top":0.09944444,"width":0.05625,"height":0.027222222},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Get Notified","depth":13,"bounds":{"left":0.8673611,"top":0.09277778,"width":0.09097222,"height":0.04},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Sort by Sort by: Most recent","depth":13,"bounds":{"left":0.5309028,"top":0.09222222,"width":0.16319445,"height":0.04111111},"value":"Sort by Sort by: Most recent","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Sort by","depth":14,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Sort by:","depth":15,"bounds":{"left":0.5385417,"top":0.10333333,"width":0.035416666,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Most recent","depth":15,"bounds":{"left":0.57395834,"top":0.10333333,"width":0.053819444,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Add Recording","depth":13,"bounds":{"left":0.7607639,"top":0.09277778,"width":0.10104167,"height":0.04},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"common.ai-icon-alt","depth":14,"bounds":{"left":0.9638889,"top":0.09,"width":0.025,"height":0.04},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Duration:","depth":15,"bounds":{"left":0.43645832,"top":0.16055556,"width":0.03576389,"height":0.016666668},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1m and above","depth":15,"bounds":{"left":0.47569445,"top":0.16055556,"width":0.05138889,"height":0.016666668},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recorded:","depth":15,"bounds":{"left":0.55694443,"top":0.16055556,"width":0.038194444,"height":0.016666668},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Only Recorded","depth":15,"bounds":{"left":0.5986111,"top":0.16055556,"width":0.05590278,"height":0.016666668},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Save Search","depth":14,"bounds":{"left":0.68506944,"top":0.15777777,"width":0.06944445,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Clear all","depth":14,"bounds":{"left":0.76145834,"top":0.15777777,"width":0.05347222,"height":0.022222223},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Saved searches","depth":13,"bounds":{"left":0.22465278,"top":0.08722222,"width":0.18055555,"height":0.04},"value":"Saved searches","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXTextField","text":"Saved searches","depth":15,"bounds":{"left":0.23229167,"top":0.09611111,"width":0.12708333,"height":0.022222223},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXStaticText","text":"Team","depth":13,"bounds":{"left":0.22465278,"top":0.15833333,"width":0.023263888,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search teams Search teams","depth":12,"bounds":{"left":0.22465278,"top":0.18444444,"width":0.18055555,"height":0.04},"value":"Search teams Search teams","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search teams","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search teams","depth":14,"bounds":{"left":0.23229167,"top":0.195,"width":0.05798611,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Host","depth":13,"bounds":{"left":0.22465278,"top":0.23944445,"width":0.020833334,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search team members Search team members","depth":12,"bounds":{"left":0.22465278,"top":0.2711111,"width":0.18055555,"height":0.04},"value":"Search team members Search team members","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search team members","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search team members","depth":14,"bounds":{"left":0.23229167,"top":0.28166667,"width":0.09583333,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Also search as participant","depth":13,"bounds":{"left":0.22465278,"top":0.31833333,"width":0.11076389,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Participant","depth":13,"bounds":{"left":0.22465278,"top":0.35944444,"width":0.047916666,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search team members Search team members","depth":12,"bounds":{"left":0.22465278,"top":0.38555557,"width":0.18055555,"height":0.04},"value":"Search team members Search team members","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search team members","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search team members","depth":14,"bounds":{"left":0.23229167,"top":0.3961111,"width":0.09583333,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Customer","depth":13,"bounds":{"left":0.22465278,"top":0.44055554,"width":0.045138888,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Customer","depth":12,"bounds":{"left":0.25104168,"top":0.4677778,"width":0.12708333,"height":0.04},"help_text":"","placeholder":"Customer or Subject","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Transcript","depth":13,"bounds":{"left":0.22465278,"top":0.5238889,"width":0.046180554,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search transcript","depth":12,"bounds":{"left":0.25104168,"top":0.5566667,"width":0.12708333,"height":0.04},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXComboBox","text":"Select option Said by","depth":12,"bounds":{"left":0.22465278,"top":0.60333335,"width":0.18055555,"height":0.04111111},"value":"Select option Said by","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select option","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Said by","depth":14,"bounds":{"left":0.23229167,"top":0.61444443,"width":0.030902777,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select option Anyone","depth":12,"bounds":{"left":0.22465278,"top":0.65,"width":0.18055555,"height":0.04111111},"value":"Select option Anyone","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select option","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Anyone","depth":14,"bounds":{"left":0.23229167,"top":0.6611111,"width":0.033333335,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Period","depth":13,"bounds":{"left":0.22465278,"top":0.70611113,"width":0.028819444,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"All time","depth":14,"bounds":{"left":0.234375,"top":0.74333334,"width":0.03125,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Topics","depth":13,"bounds":{"left":0.22465278,"top":0.7872222,"width":0.027430555,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search topics Search topics","depth":12,"bounds":{"left":0.22465278,"top":0.81333333,"width":0.18055555,"height":0.04},"value":"Search topics Search topics","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search topics","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search topics","depth":14,"bounds":{"left":0.23229167,"top":0.8238889,"width":0.057638887,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity type","depth":13,"bounds":{"left":0.22465278,"top":0.86833334,"width":0.055555556,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search activity types Search activity types","depth":12,"bounds":{"left":0.22465278,"top":0.89444447,"width":0.18055555,"height":0.04},"value":"Search activity types Search activity types","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search activity types","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search activity types","depth":14,"bounds":{"left":0.23229167,"top":0.905,"width":0.08958333,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Duration","depth":13,"bounds":{"left":0.22465278,"top":0.9494445,"width":0.04097222,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Min (minutes)","depth":13,"bounds":{"left":0.22465278,"top":0.9772222,"width":0.060069446,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":13,"bounds":{"left":0.234375,"top":1.0,"width":0.0055555557,"height":-0.008333325},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Max (minutes)","depth":13,"bounds":{"left":0.3045139,"top":0.9772222,"width":0.061805554,"height":0.018888889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI call score","depth":13,"bounds":{"left":0.22465278,"top":1.0,"width":0.052083332,"height":-0.052777767},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select AI call score Select AI call score","depth":12,"bounds":{"left":0.22465278,"top":1.0,"width":0.18055555,"height":-0.07888889},"value":"Select AI call score Select AI call score","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select AI call score","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select AI call score","depth":14,"bounds":{"left":0.23229167,"top":1.0,"width":0.08055556,"height":-0.0894444},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Key Words Score","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select key words score Select key words score","depth":12,"value":"Select key words score Select key words score","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select key words score","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select key words score","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Coaching score","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select coaching score Select coaching score","depth":12,"value":"Select coaching score Select coaching score","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select coaching score","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select coaching score","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Coach","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search coaches Search coaches","depth":12,"value":"Search coaches Search coaches","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search coaches","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search coaches","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stage at call","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search stages Search stages","depth":12,"value":"Search stages Search stages","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search stages","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search stages","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Current stage","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search stages Search stages","depth":12,"value":"Search stages Search stages","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search stages","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search stages","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Language","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search language Search language","depth":12,"value":"Search language Search language","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search language","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search language","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Playlist","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search playlists Search playlists","depth":12,"value":"Search playlists Search playlists","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search playlists","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search playlists","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pending CRM notes","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Not logged to CRM","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Recorded","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search recorded Only Recorded","depth":12,"value":"Search recorded Only Recorded","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search recorded","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Only Recorded","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Show internal and external activities","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Select option Select option","depth":12,"value":"Select option Select option","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Select option","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Select option","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Platform","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search platforms Search platforms","depth":12,"value":"Search platforms Search platforms","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search platforms","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search platforms","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Call type","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search channels Search channels","depth":12,"value":"Search channels Search channels","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search channels","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search channels","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Outcome","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Search CRM Outcome Search CRM Outcome","depth":12,"value":"Search CRM Outcome Search CRM Outcome","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXTextField","text":"Search CRM Outcome","depth":13,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search CRM Outcome","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deal value","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Min (amount)","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Max (amount)","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deal close date","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"All time","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Deal age","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1359d","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2717d+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Talking speed","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"177 wpm","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"252 wpm+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Talk ratio","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"40%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"60%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"100%","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Patience","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0s","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1s","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2s","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3s+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Longest monologue","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5m","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10m+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Longest customer story","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5m","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10m+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Rep questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Engaging questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Insightful questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Customer questions","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"25","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"50+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Comments","depth":13,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20+","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Host","depth":15,"bounds":{"left":0.44618055,"top":0.22555555,"width":0.019444445,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity","depth":15,"bounds":{"left":0.5086806,"top":0.22555555,"width":0.031597223,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Contact","depth":15,"bounds":{"left":0.6822917,"top":0.22555555,"width":0.03263889,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Activity Type","depth":15,"bounds":{"left":0.7409722,"top":0.22555555,"width":0.031597223,"height":0.04},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Current Stage","depth":15,"bounds":{"left":0.7951389,"top":0.22555555,"width":0.032291666,"height":0.04},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Stats","depth":15,"bounds":{"left":0.86215276,"top":0.22555555,"width":0.02048611,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Duration","depth":15,"bounds":{"left":0.9267361,"top":0.22555555,"width":0.036458332,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Date","depth":15,"bounds":{"left":0.9770833,"top":0.22555555,"width":0.019791666,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Adelina Petrova Unknown Customer 2026-04-08-call-to-441173692222 Discovery Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 0 1m08/04/2026, 4:54 PM","depth":14,"bounds":{"left":0.4295139,"top":0.285,"width":0.57048607,"height":0.08111111},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unknown Customer","depth":18,"bounds":{"left":0.5086806,"top":0.30666667,"width":0.08090278,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2026-04-08-call-to-441173692222","depth":17,"bounds":{"left":0.5086806,"top":0.3288889,"width":0.14513889,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Discovery","depth":17,"bounds":{"left":0.7409722,"top":0.31666666,"width":0.04027778,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of favorites","depth":18,"bounds":{"left":0.86145836,"top":0.30444443,"width":0.03576389,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.87708336,"top":0.30555555,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of shares","depth":18,"bounds":{"left":0.86145836,"top":0.30444443,"width":0.033333335,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.9076389,"top":0.30555555,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of comments","depth":18,"bounds":{"left":0.86145836,"top":0.30444443,"width":0.042013887,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.87708336,"top":0.32777777,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of plays","depth":18,"bounds":{"left":0.86145836,"top":0.30444443,"width":0.033333335,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.9076389,"top":0.32777777,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1m","depth":16,"bounds":{"left":0.9267361,"top":0.31666666,"width":0.012847222,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08/04/2026, 4:54 PM","depth":16,"bounds":{"left":0.9770833,"top":0.31666666,"width":0.022916675,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Veselin Kulov Unknown Customer Notetaker added by Veselin Kulov Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 1 7m08/04/2026, 12:43 AM","depth":14,"bounds":{"left":0.4295139,"top":0.3661111,"width":0.57048607,"height":0.08166666},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unknown Customer","depth":18,"bounds":{"left":0.5086806,"top":0.38833332,"width":0.08090278,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Notetaker added by Veselin Kulov","depth":17,"bounds":{"left":0.5086806,"top":0.41055554,"width":0.13645834,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of favorites","depth":18,"bounds":{"left":0.86145836,"top":0.3861111,"width":0.03576389,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.87708336,"top":0.38722223,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of shares","depth":18,"bounds":{"left":0.86145836,"top":0.3861111,"width":0.033333335,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.9076389,"top":0.38722223,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of comments","depth":18,"bounds":{"left":0.86145836,"top":0.3861111,"width":0.042013887,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.87708336,"top":0.40944445,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of plays","depth":18,"bounds":{"left":0.86145836,"top":0.3861111,"width":0.033333335,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":18,"bounds":{"left":0.9076389,"top":0.40944445,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"7m","depth":16,"bounds":{"left":0.9267361,"top":0.39833334,"width":0.012847222,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"08/04/2026, 12:43 AM","depth":16,"bounds":{"left":0.9770833,"top":0.39833334,"width":0.022916675,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Veselin Kulov Unknown Customer Notetaker added by Veselin Kulov Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 0 4m10/03/2026, 10:01 AM","depth":14,"bounds":{"left":0.4295139,"top":0.44777778,"width":0.57048607,"height":0.08111111},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unknown Customer","depth":18,"bounds":{"left":0.5086806,"top":0.46944445,"width":0.08090278,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Notetaker added by Veselin Kulov","depth":17,"bounds":{"left":0.5086806,"top":0.49166667,"width":0.13645834,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of favorites","depth":18,"bounds":{"left":0.86145836,"top":0.4672222,"width":0.03576389,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.87708336,"top":0.46833333,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of shares","depth":18,"bounds":{"left":0.86145836,"top":0.4672222,"width":0.033333335,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.9076389,"top":0.46833333,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of comments","depth":18,"bounds":{"left":0.86145836,"top":0.4672222,"width":0.042013887,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.87708336,"top":0.49055555,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of plays","depth":18,"bounds":{"left":0.86145836,"top":0.4672222,"width":0.033333335,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.9076389,"top":0.49055555,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4m","depth":16,"bounds":{"left":0.9267361,"top":0.47944444,"width":0.012847222,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"10/03/2026, 10:01 AM","depth":16,"bounds":{"left":0.9770833,"top":0.47944444,"width":0.022916675,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Veselin Kulov Unknown Customer Notetaker added by Veselin Kulov Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 0 1m26/02/2026, 1:51 PM","depth":14,"bounds":{"left":0.4295139,"top":0.5288889,"width":0.57048607,"height":0.08166666},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Unknown Customer","depth":18,"bounds":{"left":0.5086806,"top":0.5511111,"width":0.08090278,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Notetaker added by Veselin Kulov","depth":17,"bounds":{"left":0.5086806,"top":0.5733333,"width":0.13645834,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of favorites","depth":18,"bounds":{"left":0.86145836,"top":0.54833335,"width":0.03576389,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.87708336,"top":0.54944444,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of shares","depth":18,"bounds":{"left":0.86145836,"top":0.54833335,"width":0.033333335,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.9076389,"top":0.54944444,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of comments","depth":18,"bounds":{"left":0.86145836,"top":0.54833335,"width":0.042013887,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.87708336,"top":0.57166666,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of plays","depth":18,"bounds":{"left":0.86145836,"top":0.54833335,"width":0.033333335,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.9076389,"top":0.57166666,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1m","depth":16,"bounds":{"left":0.9267361,"top":0.5605556,"width":0.012847222,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26/02/2026, 1:51 PM","depth":16,"bounds":{"left":0.9770833,"top":0.5605556,"width":0.022916675,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Martin Petkov Martin Petkov at Drun Drun Chiki Chiki Bam Bam 2025-10-21-inbound-call-from-07725-762786 (6) Martin Petkov Web Demo Verbal Commitment $2 Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 1 11m13/02/2026, 2:27 PM","depth":14,"bounds":{"left":0.4295139,"top":0.6105555,"width":0.57048607,"height":0.104444444},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Martin Petkov at Drun Drun Chiki Chiki Bam Bam","depth":18,"bounds":{"left":0.5086806,"top":0.63222224,"width":0.19861111,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2025-10-21-inbound-call-from-07725-762786 (6)","depth":17,"bounds":{"left":0.5086806,"top":0.67777777,"width":0.203125,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Martin Petkov","depth":17,"bounds":{"left":0.6822917,"top":0.6427778,"width":0.028125,"height":0.04},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Web Demo","depth":17,"bounds":{"left":0.7409722,"top":0.6427778,"width":0.024305556,"height":0.04},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Verbal Commitment","depth":17,"bounds":{"left":0.7951389,"top":0.63166666,"width":0.053125,"height":0.04},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"$2","depth":17,"bounds":{"left":0.7951389,"top":0.6761111,"width":0.010763889,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of favorites","depth":18,"bounds":{"left":0.86145836,"top":0.64166665,"width":0.03576389,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.87708336,"top":0.6427778,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of shares","depth":18,"bounds":{"left":0.86145836,"top":0.64166665,"width":0.033333335,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.9076389,"top":0.6427778,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of comments","depth":18,"bounds":{"left":0.86145836,"top":0.64166665,"width":0.042013887,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.87708336,"top":0.665,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of plays","depth":18,"bounds":{"left":0.86145836,"top":0.64166665,"width":0.033333335,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":18,"bounds":{"left":0.9076389,"top":0.665,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"11m","depth":16,"bounds":{"left":0.9267361,"top":0.6538889,"width":0.018055556,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"13/02/2026, 2:27 PM","depth":16,"bounds":{"left":0.9770833,"top":0.6538889,"width":0.022916675,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Nikolay Yankov Nikolay Yankov at Jiminny (EU) Nikolay Yankov Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 0 2m12/02/2026, 10:22 AM","depth":14,"bounds":{"left":0.4295139,"top":0.715,"width":0.57048607,"height":0.078888886},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nikolay Yankov at Jiminny (EU)","depth":18,"bounds":{"left":0.5086806,"top":0.74666667,"width":0.124305554,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":17,"bounds":{"left":0.6822917,"top":0.73444444,"width":0.030555556,"height":0.04},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of favorites","depth":18,"bounds":{"left":0.86145836,"top":0.73333335,"width":0.03576389,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.87708336,"top":0.73444444,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of shares","depth":18,"bounds":{"left":0.86145836,"top":0.73333335,"width":0.033333335,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.9076389,"top":0.73444444,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of comments","depth":18,"bounds":{"left":0.86145836,"top":0.73333335,"width":0.042013887,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.87708336,"top":0.75666666,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Number of plays","depth":18,"bounds":{"left":0.86145836,"top":0.73333335,"width":0.033333335,"height":0.062222224},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":18,"bounds":{"left":0.9076389,"top":0.75666666,"width":0.0052083335,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2m","depth":16,"bounds":{"left":0.9267361,"top":0.7455556,"width":0.012847222,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"12/02/2026, 10:22 AM","depth":16,"bounds":{"left":0.9770833,"top":0.7455556,"width":0.022916675,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Nikolay Yankov Nikolay Yankov at Jiminny (EU) Nikolay Yankov Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 0 4m12/02/2026, 10:13 AM","depth":14,"bounds":{"left":0.4295139,"top":0.79388887,"width":0.57048607,"height":0.078888886},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Nikolay Yankov at Jiminny (EU)","depth":18,"bounds":{"left":0.5086806,"top":0.82555556,"width":0.124305554,"height":0.017777778},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Yankov","depth":17,"bounds":{"left":0.6822917,"top":0.81333333,"width":0.030555556,"height":0.04},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-5130568624417919616
|
-2355025260447083545
|
click
|
accessibility
|
NULL
|
Platform Sprint 2 Q2 - Platform Team - Scrum Board Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
JY-20553 | Improve crm-sync delays by yalokin-jiminny · Pull Request #11976 · jiminny/app
JY-20553 | Improve crm-sync delays by yalokin-jiminny · Pull Request #11976 · jiminny/app
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app
JY-20698 handle failed field sync on playbook import activity types by LakyLak · Pull Request #11988 · jiminny/app
JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app
JY-20692 change confirmation parameter by LakyLak · Pull Request #11986 · jiminny/app
[JY-20543] AJ Reports > Tracking - Jira
[JY-20543] AJ Reports > Tracking - Jira
[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira
[JY-18909] [Part2] Automated reports with Ask Jiminny - Jira
Ask Jiminny Reports by nikolay-yankov · Pull Request #11894 · jiminny/app
Ask Jiminny Reports by nikolay-yankov · Pull Request #11894 · jiminny/app
New Tab
New Tab
Product Growth Platform | Userpilot
Product Growth Platform | Userpilot
Userpilot | Logged-activity
Userpilot | Logged-activity
fix(security): composer dependency updates – 2026-04-15 by github-actions[bot] · Pull Request #11970 · jiminny/app
fix(security): composer dependency updates – 2026-04-15 by github-actions[bot] · Pull Request #11970 · jiminny/app
Pipelines - jiminny/app
Pipelines - jiminny/app
Feed — jiminny — Sentry
Feed — jiminny — Sentry
fix(security): composer dependency updates – 2026-04-15 by github-actions[bot] · Pull Request #11970 · jiminny/app
fix(security): composer dependency updates – 2026-04-15 by github-actions[bot] · Pull Request #11970 · jiminny/app
Jiminny
Jiminny
Jiminny
Jiminny
Close tab
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 873114
75
75
1536
activities
Get Notified
Sort by Sort by: Most recent
Sort by
Sort by:
Most recent
Add Recording
common.ai-icon-alt
Duration:
1m and above
Recorded:
Only Recorded
Save Search
Clear all
Saved searches
Saved searches
Team
Search teams Search teams
Search teams
Search teams
Host
Search team members Search team members
Search team members
Search team members
Also search as participant
Participant
Search team members Search team members
Search team members
Search team members
Customer
Customer
Transcript
Search transcript
Select option Said by
Select option
Said by
Select option Anyone
Select option
Anyone
Period
All time
Topics
Search topics Search topics
Search topics
Search topics
Activity type
Search activity types Search activity types
Search activity types
Search activity types
Duration
Min (minutes)
1
Max (minutes)
AI call score
Select AI call score Select AI call score
Select AI call score
Select AI call score
Key Words Score
Select key words score Select key words score
Select key words score
Select key words score
Coaching score
Select coaching score Select coaching score
Select coaching score
Select coaching score
Coach
Search coaches Search coaches
Search coaches
Search coaches
Stage at call
Search stages Search stages
Search stages
Search stages
Current stage
Search stages Search stages
Search stages
Search stages
Language
Search language Search language
Search language
Search language
Playlist
Search playlists Search playlists
Search playlists
Search playlists
Pending CRM notes
Not logged to CRM
Recorded
Search recorded Only Recorded
Search recorded
Only Recorded
Show internal and external activities
Select option Select option
Select option
Select option
Platform
Search platforms Search platforms
Search platforms
Search platforms
Call type
Search channels Search channels
Search channels
Search channels
Outcome
Search CRM Outcome Search CRM Outcome
Search CRM Outcome
Search CRM Outcome
Deal value
Min (amount)
Max (amount)
Deal close date
All time
Deal age
0
1359d
2717d+
Talking speed
0
177 wpm
252 wpm+
Talk ratio
0%
40%
60%
100%
Patience
0s
1s
2s
3s+
Longest monologue
0
5m
10m+
Longest customer story
0
5m
10m+
Rep questions
0
25
50+
Engaging questions
0
25
50+
Insightful questions
0
25
50+
Customer questions
0
25
50+
Comments
0
1
2
5
10
20+
Host
Activity
Contact
Activity Type
Current Stage
Stats
Duration
Date
Adelina Petrova Unknown Customer 2026-04-08-call-to-441173692222 Discovery Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 0 1m08/04/2026, 4:54 PM
Unknown Customer
2026-04-08-call-to-441173692222
Discovery
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
0
1m
08/04/2026, 4:54 PM
Veselin Kulov Unknown Customer Notetaker added by Veselin Kulov Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 1 7m08/04/2026, 12:43 AM
Unknown Customer
Notetaker added by Veselin Kulov
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
1
7m
08/04/2026, 12:43 AM
Veselin Kulov Unknown Customer Notetaker added by Veselin Kulov Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 0 4m10/03/2026, 10:01 AM
Unknown Customer
Notetaker added by Veselin Kulov
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
0
4m
10/03/2026, 10:01 AM
Veselin Kulov Unknown Customer Notetaker added by Veselin Kulov Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 0 1m26/02/2026, 1:51 PM
Unknown Customer
Notetaker added by Veselin Kulov
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
0
1m
26/02/2026, 1:51 PM
Martin Petkov Martin Petkov at Drun Drun Chiki Chiki Bam Bam 2025-10-21-inbound-call-from-07725-762786 (6) Martin Petkov Web Demo Verbal Commitment $2 Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 1 11m13/02/2026, 2:27 PM
Martin Petkov at Drun Drun Chiki Chiki Bam Bam
2025-10-21-inbound-call-from-07725-762786 (6)
Martin Petkov
Web Demo
Verbal Commitment
$2
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
1
11m
13/02/2026, 2:27 PM
Nikolay Yankov Nikolay Yankov at Jiminny (EU) Nikolay Yankov Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 0 2m12/02/2026, 10:22 AM
Nikolay Yankov at Jiminny (EU)
Nikolay Yankov
Number of favorites
0
Number of shares
0
Number of comments
0
Number of plays
0
2m
12/02/2026, 10:22 AM
Nikolay Yankov Nikolay Yankov at Jiminny (EU) Nikolay Yankov Number of favorites 0 Number of shares 0 Number of comments 0 Number of plays 0 4m12/02/2026, 10:13 AM
Nikolay Yankov at Jiminny (EU)
Nikolay Yankov...
|
NULL
|
|
54167
|
1168
|
84
|
2026-04-20T08:40:46.237014+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776674446237_m2.jpg...
|
Slack
|
Huddle: @Aneliya Angelova - Jiminny Inc - Slack
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
AI Notes: Off
Aneliya Angelova is in the huddle.: AI Notes: Off
Aneliya Angelova is in the huddle.: .
Stop sharing screen...
|
[{"role":"AXCheckBox","text [{"role":"AXCheckBox","text":"AI Notes: Off","depth":13,"bounds":{"left":0.50664896,"top":0.058260176,"width":0.050199468,"height":0.023942538},"role_description":"toggle button","subrole":"AXToggleButton","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXStaticText","text":"Aneliya Angelova is in the huddle.: .","depth":10,"bounds":{"left":0.5,"top":0.9992019,"width":0.019614361,"height":0.0007980846},"role_description":"text"},{"role":"AXStaticText","text":"Stop sharing screen","depth":12,"bounds":{"left":0.71110374,"top":0.9353551,"width":0.03756649,"height":0.012769354},"role_description":"text"}]...
|
-6895312360846969419
|
-155344975722423327
|
click
|
hybrid
|
NULL
|
AI Notes: Off
Aneliya Angelova is in the huddle.: AI Notes: Off
Aneliya Angelova is in the huddle.: .
Stop sharing screen
ActivityLateJiminny ...* Starred |• jiminny-X-integrati...platform-inner-team@ Channels*al-chapteri alerts# backendcontusion-cllnie# curiosity lab# engineerinss trontendi# generalac intra-changes#jiminny-bg# platform-tickets# product_launches# randomi releases# sofia-office# supporti# thank-yous# the people of iimi..A Direct messagesfe.A..• Galva Dimitrova2 Stefka StoyanovaStovan Tomov3 Aneliya Angelova, .o. Nikolav NikolovRo Stoyan TanevVasil VasilevO Nikolav Ivanov®. Ves::: Anns-t Jira Cloud6d Huddle with Aneliva Angelova* Aneliya Angelova C• Messagest Add canvasur FilesAneliya Angelova 9:35 AMFriday. March 27thvдаже не знам от кога вес е счупил деплоя и колко време все съм тествала едно и сьщо без да се усетя че деплойването не е работелоLukas Kovalik # 9:36 AMY= Al Notes: OffvThursday, April 16th~Aneliya Angelova 10:00 AMЛукаш кога искаш да се чуемза команиитеLukas Kovalik V 10:01 AMаиде след 15 мин че се зарових в зохоLukas Kovalik 10:32 AMако искаш ла се чуем сегаAneliva Angelova 10:33 AMA huddle happened 10:33 AMInkac Kovalik 0 10.41 AMIpho artisan automated-revorts --report-1d 39pho artisan automated-renorts:send --result-1d 64al Treetow Beant, 12 Ame 2006TodavAneliva Angelova 9:41 AMЗдрасти Лукаш, струва ми се, че репортите се генерират върху всички активитита сьс съответния Saved search bez da e dobawen filtyr za dataLukas Kovalik 10:31 AMАни след малко може да се чуемAneliya Angelova 11:27 AMJnkas Kovalik 8 11.26 AMтука сьмYou joined the huddle LIVE 11:35 AMAneliva Ancelova is here toalMessage Aneliva Angeloval+ AaeLukas KovalikAl Notes: OflLeave100% C47• Mon 20 Apr 11:40:46f Huddle with Aneliva Angelo-C9•C9Leave...
|
54165
|
|
56975
|
1228
|
84
|
2026-04-20T11:36:08.102064+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776684968102_m2.jpg...
|
PhpStorm
|
PhpStorm
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhpStormVIeWINavigarecodeLaravelKeractorWindowmelp PhpStormVIeWINavigarecodeLaravelKeractorWindowmelpFV faVsco.js#11894 on JY-18909-automated-reports-ask-ProiectC) ActivityController.pnpphp 2026_03_20_000000_add_ask_jiminny_fields_to_automated_reports_table.phpEtest.py© AskJiminnyReportsController.phpAskJlminnykeponacvlysermice.ong© JiminnyDebugCommand.php‹> Untitled Diagram.xmlJs vetur.config.jsM+ WEBHOOK FILTERING_IMPLEMENTATION.mOC) AutomatedRenortsCommand.pnpUpdateAcuvityelasticsearchDocumentcommana.onpx© AutomatedReportsController.phgpnp apLvz.phg© TrackProviderInstalledEvent.php> 0b External Librariesv E° Scratches and Consolesv O Database ConsolesV AEU© AutomatedReport.php14 ©class UpdateActivityELasticSearchDocumentCommand extends Commandnrotected Sdescrintion = "Undate ES document svnchronouslv';d console fEUlA DEAL RISKS (EUI16 0г)public function __construct(private readonly Dispatcher $eventDispatcher){...}& DI (EU)AEU [EU)v Ajiminny@localhost& console jiminny@localhost)A DI (jiminny@localhost]A HS_local [jiminny@localhost]A SF [jiminny@localhost]A zoho_dev (jiminny@localhost]V & PRODpublic function handle): voidt...}Servicesv D Databaseconsolev A liminnv@localhostA HS local4SF 502 msAPROD« consoleASTAGINGIconsoleDockerAutomateakeportsservice.onp₴ | ~ 153159=custom.loglaravel.log4 SF [jiminny@localhost] x 4 HS_local [jiminny@localhost](0p01Tx: AutovPlaygroundvselect * from team_features where team id = 1:select * tron reacSELECT * FROM Activ1v searches where 1d = 1982* # 1981SELECT * FROM activity_search_filters WHERE activity_search_id = 1982;SELECT * FROM automated_reportS Where 1d = 691SELECT * FROM automated_report_results where 1d = 275;SELECT * FROM automated_reports order by id desc;SELECT * FROM automated_report_results order by id desc;select * from activity searches where user 1d = 143:select * from ask_anything_prompts;SELECT * FROM groups WHERE id = 1439;SELECT * FROM users WHERE group_id = 1439;splect * from nenmiccions: # 158& console [PROD]« console (EU]U AskJiminnyReportActivityServiceTest v« console [STAGING]100% S2Mon 20 Apr 14:36:07So jiminny010 A12 V2 V4 A VOutputiih liminny automated reports+-1 call_types1 media_typesI call duration minI call duration maxI groupsplaybook_categories1 deal at call_stagesI current deal stagesM recinientsM jiminny recipientsadditional nromot inout(• custom_name(• activity search idI ask_anything_ prompt idMexpires atM created hvn crpated at1 updated atI deleted atTx: Auto v#QGA®["pdf"]<null><null><nul])<null>"users": 11451%Exp19762027-04-201143l2026-04-20 09-21.282024-04-20 00-30-50CSVrL→OSHM.22 2141 NN Windeurf Toame 156.07 UITC9/ enadoe...
|
NULL
|
6923957254587593607
|
NULL
|
click
|
ocr
|
NULL
|
PhpStormVIeWINavigarecodeLaravelKeractorWindowmelp PhpStormVIeWINavigarecodeLaravelKeractorWindowmelpFV faVsco.js#11894 on JY-18909-automated-reports-ask-ProiectC) ActivityController.pnpphp 2026_03_20_000000_add_ask_jiminny_fields_to_automated_reports_table.phpEtest.py© AskJiminnyReportsController.phpAskJlminnykeponacvlysermice.ong© JiminnyDebugCommand.php‹> Untitled Diagram.xmlJs vetur.config.jsM+ WEBHOOK FILTERING_IMPLEMENTATION.mOC) AutomatedRenortsCommand.pnpUpdateAcuvityelasticsearchDocumentcommana.onpx© AutomatedReportsController.phgpnp apLvz.phg© TrackProviderInstalledEvent.php> 0b External Librariesv E° Scratches and Consolesv O Database ConsolesV AEU© AutomatedReport.php14 ©class UpdateActivityELasticSearchDocumentCommand extends Commandnrotected Sdescrintion = "Undate ES document svnchronouslv';d console fEUlA DEAL RISKS (EUI16 0г)public function __construct(private readonly Dispatcher $eventDispatcher){...}& DI (EU)AEU [EU)v Ajiminny@localhost& console jiminny@localhost)A DI (jiminny@localhost]A HS_local [jiminny@localhost]A SF [jiminny@localhost]A zoho_dev (jiminny@localhost]V & PRODpublic function handle): voidt...}Servicesv D Databaseconsolev A liminnv@localhostA HS local4SF 502 msAPROD« consoleASTAGINGIconsoleDockerAutomateakeportsservice.onp₴ | ~ 153159=custom.loglaravel.log4 SF [jiminny@localhost] x 4 HS_local [jiminny@localhost](0p01Tx: AutovPlaygroundvselect * from team_features where team id = 1:select * tron reacSELECT * FROM Activ1v searches where 1d = 1982* # 1981SELECT * FROM activity_search_filters WHERE activity_search_id = 1982;SELECT * FROM automated_reportS Where 1d = 691SELECT * FROM automated_report_results where 1d = 275;SELECT * FROM automated_reports order by id desc;SELECT * FROM automated_report_results order by id desc;select * from activity searches where user 1d = 143:select * from ask_anything_prompts;SELECT * FROM groups WHERE id = 1439;SELECT * FROM users WHERE group_id = 1439;splect * from nenmiccions: # 158& console [PROD]« console (EU]U AskJiminnyReportActivityServiceTest v« console [STAGING]100% S2Mon 20 Apr 14:36:07So jiminny010 A12 V2 V4 A VOutputiih liminny automated reports+-1 call_types1 media_typesI call duration minI call duration maxI groupsplaybook_categories1 deal at call_stagesI current deal stagesM recinientsM jiminny recipientsadditional nromot inout(• custom_name(• activity search idI ask_anything_ prompt idMexpires atM created hvn crpated at1 updated atI deleted atTx: Auto v#QGA®["pdf"]<null><null><nul])<null>"users": 11451%Exp19762027-04-201143l2026-04-20 09-21.282024-04-20 00-30-50CSVrL→OSHM.22 2141 NN Windeurf Toame 156.07 UITC9/ enadoe...
|
NULL
|
|
57389
|
1234
|
84
|
2026-04-20T11:50:32.271575+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776685832271_m2.jpg...
|
Firefox
|
Firefox
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxcalVIewHistorybookmarksProtllesToolsWindowH FirefoxcalVIewHistorybookmarksProtllesToolsWindowHelp0000Bookmarkso circleci •Jy 19798 evaluation for ai activityQ Search bookmarksJY-20553 | Improve crm-sync delaPipelines - jiminny/appJY-20698 handle failed field sync•JY-20692 change confirmation pa(JY-20543) AJ Reports > Trackina(UY-18909) (Part2) Automated rep/v la bookmarks loolbaSprint Board# SRD QueueGithubJiminny DEVAsk liminnv Renorts bv nikolav-vankov . ....© Circle CI& PROD US8 StagingSentryHomePipelinesProjects> E Bookmarks MenuAsk Jiminny Reports by nikolay-ya… Other Bookmarks9 JiminnvDeploysu Product Growth Plattorm UserpilgInsightsapp57487fix(security): composer dependerPipelines - jiminny/appRunners) Feed - jiminny - Sentry(JY-20692] Issue with reconnectiOrgtuy-206921 Issue with reconnectinJY-20692 change confirmation paPlan(JY-20692] Issue with reconnectU ISRD-67871 Issue with reconnecti& Jiminny MCP Connector - Product-7 [JY-206761 Notify the user if a PaiProject Phoenix - Figma© Pipelines - jiminny/app+ New TabChunkJobsJobstoct-frontend 872264bulld-backend 8/3360Vphpstan 873363V setup 873365test-backend-lint 873361sonar_cloud 873367serup-workrlow sttupsetup 873358build_accept_deploycharkout-coda 972210build-trontend 873344test-frontend 873345build-backend 873341ohostan 8/3342prepare_deploy_revision_subenv 873349build_docker_backend_code_subenv 873351uild docker worker code subenv 873350luild docker worker video code suhenv 873252deplov_docker_backend_code_subenv 873356denlov docker worker code suhenv 873257deploy_docker_worker_video_code_subenv 873355denlov trontend assets to s3 subeny 873353cetun 872216test 873347test-backend-lint 873343conar cloud 872248setup-worktlowSETUPJY-20695-handle-no-raw-transcriptf2c64f3 Merge branch 'master' into JY-20695-handle-no-raw-transcript &JY-9712-change-forever-nudges-to-1-year-expirationf4d9b39 JY-9712 Change Nudge Expiration field type (JY-9712-change-forever-nudges-to-1-year-expirationPush Commit pushedPush Commit pushedPush Commit pushedlaal14m ago17m ago17m aao100% LzMon 20 AOr 14:00.311m 59sIm 4S1m 21s1m 32s8m 1/S4m 27s1m 1sGGOS...Im OS15m 45sGGOS..1m 19sim 45s1m 52sIm TysimZ2s44s1m 55sZm 1S1m 50s5m 4s1m 21c31s23s1m 20c9m 9s4m 25s1m 47c56sGGOS.....
|
NULL
|
-527157270816561471
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxcalVIewHistorybookmarksProtllesToolsWindowH FirefoxcalVIewHistorybookmarksProtllesToolsWindowHelp0000Bookmarkso circleci •Jy 19798 evaluation for ai activityQ Search bookmarksJY-20553 | Improve crm-sync delaPipelines - jiminny/appJY-20698 handle failed field sync•JY-20692 change confirmation pa(JY-20543) AJ Reports > Trackina(UY-18909) (Part2) Automated rep/v la bookmarks loolbaSprint Board# SRD QueueGithubJiminny DEVAsk liminnv Renorts bv nikolav-vankov . ....© Circle CI& PROD US8 StagingSentryHomePipelinesProjects> E Bookmarks MenuAsk Jiminny Reports by nikolay-ya… Other Bookmarks9 JiminnvDeploysu Product Growth Plattorm UserpilgInsightsapp57487fix(security): composer dependerPipelines - jiminny/appRunners) Feed - jiminny - Sentry(JY-20692] Issue with reconnectiOrgtuy-206921 Issue with reconnectinJY-20692 change confirmation paPlan(JY-20692] Issue with reconnectU ISRD-67871 Issue with reconnecti& Jiminny MCP Connector - Product-7 [JY-206761 Notify the user if a PaiProject Phoenix - Figma© Pipelines - jiminny/app+ New TabChunkJobsJobstoct-frontend 872264bulld-backend 8/3360Vphpstan 873363V setup 873365test-backend-lint 873361sonar_cloud 873367serup-workrlow sttupsetup 873358build_accept_deploycharkout-coda 972210build-trontend 873344test-frontend 873345build-backend 873341ohostan 8/3342prepare_deploy_revision_subenv 873349build_docker_backend_code_subenv 873351uild docker worker code subenv 873350luild docker worker video code suhenv 873252deplov_docker_backend_code_subenv 873356denlov docker worker code suhenv 873257deploy_docker_worker_video_code_subenv 873355denlov trontend assets to s3 subeny 873353cetun 872216test 873347test-backend-lint 873343conar cloud 872248setup-worktlowSETUPJY-20695-handle-no-raw-transcriptf2c64f3 Merge branch 'master' into JY-20695-handle-no-raw-transcript &JY-9712-change-forever-nudges-to-1-year-expirationf4d9b39 JY-9712 Change Nudge Expiration field type (JY-9712-change-forever-nudges-to-1-year-expirationPush Commit pushedPush Commit pushedPush Commit pushedlaal14m ago17m ago17m aao100% LzMon 20 AOr 14:00.311m 59sIm 4S1m 21s1m 32s8m 1/S4m 27s1m 1sGGOS...Im OS15m 45sGGOS..1m 19sim 45s1m 52sIm TysimZ2s44s1m 55sZm 1S1m 50s5m 4s1m 21c31s23s1m 20c9m 9s4m 25s1m 47c56sGGOS.....
|
57388
|
|
57431
|
1233
|
84
|
2026-04-20T11:52:04.056033+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776685924056_m1.jpg...
|
Firefox
|
Firefox
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹ $0 lil100% C47 8 Mon 20 Apr 14:52:03DEV (docker)APP (-zsh)T₴1|DOCKERDEV (docker)jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-conferences:worker-conferences_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-crm-sync:worker-crm-sync_00: stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1: jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00:startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00: startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan activity:update-esYou are about to work on activities:willinclude soft-deleted activitiesAre you sure? (yes/no) [no]:• yesAbout to work on 63813 activities with chunk size 50! Are you sure? (yes/no) [no]:> noX3-zsh*4screenpipe"• *5DEV...
|
NULL
|
-2516291995756228914
|
NULL
|
click
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp‹ $0 lil100% C47 8 Mon 20 Apr 14:52:03DEV (docker)APP (-zsh)T₴1|DOCKERDEV (docker)jiminny-worker-processing-2:jiminny-worker-processing-2_00: stoppedjiminny-worker-processing-3:jiminny-worker-processing-3_00: stoppedjiminny-worker-processing-4:jiminny-worker-processing-4_00: stoppedjiminny-worker-processing-5:jiminny-worker-processing-5_00: stoppedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: stoppedworker-analytics:worker-analytics_00: stoppedworker-crm-update:worker-crm-update_00: stoppedworker-download:worker-download_00:stoppedworker-nudges:worker-nudges_00: stoppedworker-emails:worker-emails_00: stoppedworker:worker_00: stoppedworker-conferences:worker-conferences_00:stoppedjiminny-worker-processing-1:jiminny-worker-processing-1_00: stoppedworker-audio:worker-audio_00: stoppedworker-calendar:worker-calendar_00:stoppedworker-crm-sync:worker-crm-sync_00: stoppedworker-es-update:worker-es-update_00: stoppedartisan-schedule:artisan-schedule_00: stoppedartisan-schedule:artisan-schedule_00: startedjiminny-worker-processing-1: jiminny-worker-processing-1_00: startedjiminny-worker-processing-2:jiminny-worker-processing-2_00: startedjiminny-worker-processing-3:jiminny-worker-processing-3_00: startedjiminny-worker-processing-4:jiminny-worker-processing-4_00: startedjiminny-worker-processing-5:jiminny-worker-processing-5_00: startedjiminny-worker-processing-delayed: jiminny-worker-processing-delayed_00: startedworker:worker_00: startedworker-analytics:worker-analytics_00: startedworker-audio:worker-audio_00: startedworker-calendar:worker-calendar_00:startedworker-conferences:worker-conferences_00: startedworker-crm-sync:worker-crm-sync_00: startedworker-crm-update:worker-crm-update_00: startedworker-download:worker-download_00:startedworker-emails:worker-emails_00: startedworker-es-update:worker-es-update_00: startedworker-nudges:worker-nudges_00: startedroot@docker_lamp_1:/home/jiminny# php artisan activity:update-esYou are about to work on activities:willinclude soft-deleted activitiesAre you sure? (yes/no) [no]:• yesAbout to work on 63813 activities with chunk size 50! Are you sure? (yes/no) [no]:> noX3-zsh*4screenpipe"• *5DEV...
|
NULL
|
|
57679
|
1238
|
84
|
2026-04-20T12:02:13.363615+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776686533363_m1.jpg...
|
Firefox
|
Firefox
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfiles→CTools FirefoxFileEditViewHistoryBookmarksProfiles→CToolsWindowHelpmeet.google.com/cxs-eips-npt?authuser=0‹ >0 lhl100% <478• Mon 20 Apr 15:02:1300+Nikolay IvanovSteliyan GeorgievLukas Kovalik3:02 PM | [Platform] Refinement ®0:25Sộ3...
|
NULL
|
-5868931366900631899
|
NULL
|
visual_change
|
ocr
|
NULL
|
FirefoxFileEditViewHistoryBookmarksProfiles→CTools FirefoxFileEditViewHistoryBookmarksProfiles→CToolsWindowHelpmeet.google.com/cxs-eips-npt?authuser=0‹ >0 lhl100% <478• Mon 20 Apr 15:02:1300+Nikolay IvanovSteliyan GeorgievLukas Kovalik3:02 PM | [Platform] Refinement ®0:25Sộ3...
|
NULL
|
|
59656
|
1282
|
84
|
2026-04-20T13:55:38.679440+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776693338679_m1.jpg...
|
iTerm2
|
iTerm2
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp100% C8• Mon 20 Apr 16:55:38ec2-user@ip-10-30-159-186:~DOCKER®DEV (Pzsh)J6ZAPP (-zsh)#3X4screenpipe"• *5&& bash"dockerexeс-it $(dockerps--format"{{.ID}}" --filter "name=ecs-worker"I head -1) /bin/bash-c "cd /home/jiminny&& bash"root@fee32ffa4c48:/home/jiminny# phpartisanaboutEnvironmentApplicationNameLaravel VersionPHP VersionComposer VersionEnvironmentDebug ModeURLMaintenance ModeTimezoneLocaleCacheConfigEventsRoutesViewsDriversBroadcastiCacheDatabaseLogsMailQueueSessionStoragepublic/storagePostmanSentryEnabledEnvironmentLaravel SDK VersionPHP SDK VersionReleaseSample Rate ErrorsSample Rate Performance MonitoringSample Rate ProfilingSend Default PIIPSJiminny Web App12.54.18.3.30productionOFFapp.jiminny.comOFFUTCen_USroot@fee32ffa4c48:/home/jiminny# php artisan crm:sync-field-metadata --teamId=2 --objectTypo= --fieldId=|--syncsessasredisNOT LINKEDYESproduction4.13.04.13.0873395100%NOT SETNOT SETDISABLED1:53:49ec2-user@ip-10-30-159-186:- (.86...
|
NULL
|
4147496075166396314
|
NULL
|
visual_change
|
ocr
|
NULL
|
iTerm2ShellEditViewSessionScriptsProfilesWindowHel iTerm2ShellEditViewSessionScriptsProfilesWindowHelp100% C8• Mon 20 Apr 16:55:38ec2-user@ip-10-30-159-186:~DOCKER®DEV (Pzsh)J6ZAPP (-zsh)#3X4screenpipe"• *5&& bash"dockerexeс-it $(dockerps--format"{{.ID}}" --filter "name=ecs-worker"I head -1) /bin/bash-c "cd /home/jiminny&& bash"root@fee32ffa4c48:/home/jiminny# phpartisanaboutEnvironmentApplicationNameLaravel VersionPHP VersionComposer VersionEnvironmentDebug ModeURLMaintenance ModeTimezoneLocaleCacheConfigEventsRoutesViewsDriversBroadcastiCacheDatabaseLogsMailQueueSessionStoragepublic/storagePostmanSentryEnabledEnvironmentLaravel SDK VersionPHP SDK VersionReleaseSample Rate ErrorsSample Rate Performance MonitoringSample Rate ProfilingSend Default PIIPSJiminny Web App12.54.18.3.30productionOFFapp.jiminny.comOFFUTCen_USroot@fee32ffa4c48:/home/jiminny# php artisan crm:sync-field-metadata --teamId=2 --objectTypo= --fieldId=|--syncsessasredisNOT LINKEDYESproduction4.13.04.13.0873395100%NOT SETNOT SETDISABLED1:53:49ec2-user@ip-10-30-159-186:- (.86...
|
NULL
|
|
59670
|
1283
|
84
|
2026-04-20T13:55:56.240967+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-20/1776 /Users/lukas/.screenpipe/data/data/2026-04-20/1776693356240_m2.jpg...
|
PhpStorm
|
PhpStorm
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
PhostormVIewINavigareCodeLaravelFV faVsco.js°9 mas PhostormVIewINavigareCodeLaravelFV faVsco.js°9 master kProjectM+ WEBHOOK-FILTERING_IMPLEMENTATION.mo>0b External Librariesv E Scratches and Consolesv _ Database consolesV AEU& console (euJA DEAL RISKS (EU1ADITEUIA EU (EUv / iminnv@localhostconsole fiminnv@localhost)4 D| lliminnv@localhostl4 HS_local jiminny@localhost)4 SF jiminny@localhost]A zoho_dev [jiminny@localhost]V A PRODA console (PROD]A console_1 (PROD]& DIIPRODIServicesv D Databaseconsole#HS localASF 978 msA PROD4 console 1 s 644 mgV STAGINGIconsoleDockerKeractorAutomateakeporskepository.pnp© AskAnythingPromptService.php© AskJiminnyReportsController.phpC)Hubspotwebnookbatchsyncstrategy.ongc)SyncObiects.pho©ImportOpportunityBatch.php© ImportContactBatch.php© Client.php© HubspotPaginationService.phd© Service.phpBatchSyncTrait.phpC) FetchSalestorceEntitiesJob.php /AutomatedReportsController.phpphp api v2.php(C) AutomatedReport.ohoclass FetchSalesforceEntitiesJob extends Job implements ShouldQueue, ShouldBeUniquepublic function handle(142144Cevncodit - CanhonImmutahle:.nowel$config->updateEntitySyncedAt(Sthis->entityType, $syncedAt):146147$logger->info('[FetchSalesforceEntitiesJobl Completed'.'crm confiquration id' => Sthis->crmConfiqurationIdOutputIIT PROFILESfR Result 11 x Tx.=(B47 rowsvW user_idI email Yundated at Y16125jeni.morrison@lesmills.com2026-04-20 01-19:4716156devon.bosley-smith@lesmills.com2026-04-20 01•10-4633 16115jessica.young@lesmills.com2026-04-20 01:19:4016124herschel.elderdlesm1lls.com2026-04-20 01:19:4016389alson.salernodlesmuus.com2026-04-20 01:19:4016117meredith.elumbad.esm.s.com2026-04-20 01.19:2616091nik.herolddlesmills.com2026-04-20 01-19:2316095adrian.heffernan@lesmills.com2024-04-20 01-10-2339 16067 (owner)jiminnvintegration@lesmills.com2004-02.21 04.71.2420609elinor.quavledlesm1lls.com2026-01-29 14:09:5120687ian.mcaregordlesmiuls.com2026-01-29 14:09:3516120jeannine.liu@lesmills.com2026-01-29 14•04•55161042085220684|1681720687mario.tarquinio@lesmills.com2024-01.20 14•07•501ollie.thomas@lesmills.com2025-11-04 19:12:01darren.hazel10lesmills.com2025-11-04 19:10:39kriasha.dadiflesmills.com2025-11-04 19:04•50martin.franklindlesmills.com2025-02-27 07:48•23= custom.log592594595596A26 ^ Y 597— 599=laravel.log4 SF jiminny@localhostA HS_local jiminny@localhost]Tx: Auto vselect * from automated_report_results WHERE report id = 54;select * from opportunities where id = 7594349;SELECT * FROM teams WHERE name LIKE '%Les%'; # 711, 692, 16067 - [EMAIL] * from playbooks where team_id = 711; # event 226147SELECT * FROM playbook categories WHERE playbook id = 5515:SELECT * FROM crm_fields WHERE id = 226147:SELECT * FROM crm fields WHERE Id = 226147:SELECT * FROM crm field values WHERE crm_ field id = 226147:SELECT * FROM crm configurations WHERE id = 692:A60r vSELECTCONCAT(u.id, CASE WHEN u.id = t.owner_ id THEN ' (owner)' ELSE •• END) AS user idu.emailsa.*t.owner id FROM social accounts sa100% C47• Mon 20 Apr 16:55:56L AskJiminnyReportActivityServiceTest vAconsole [EUi« console [STAGING]r liminny034 A1 A34 V 62 ^@provider_user_token T00D90000000Usz!AQEAQN_BYD6Jm¿ukPpvT12njFcMyon5w60jQBrcNTJfXBM7q9mgqnPkSBDjBzxKGNkPJ0bFfEH3CS.ZYwN.saQieAxN7I1D000D90000000fUsz!AQEAQIEePDjR1aW8DBp0mo_cJ7jTp1XTGSMwP5o.T8VydhYmGoI_mMlq.5nhQfagyB4dvPar_KS.g16Y7R_4LeK1HM3dQYoH00D90000000fUsz!AQEAQL05b59R0D3_RenuVQTIqkP2fJB0Gk4trY8ceWzN3ZoXiE7wkaG7UwUTCqtzF2QFduS0j990NxW_nGEcdoCxZXY2.iuh00D90000000fUsz!A0EA0GwXeiZLEVex1wwGeVqoe8iFI8.MSyxM4RjZ7y3ZV147Br0ztxfbwwXRSX4ApCcT4w9ADG9qe.9ZhWgFkM8uji0mFv9n00090000000fUsz!A0EA00JFLnSVTilnDaSkpC3USDtGDbp6MJe2s6vxDvrzF05A8PE84K9Khz10zhZf0DCPj2HiEnHD1KLTOYLTp_RMGkuoU0Ga00D90000000£Us≥!A0EA0CP78A.1YсRaTvE3≥Wо65oic1swz08tAF3va7n147AÏdd5WnKAW1TXMR8GvaM4YWYV11dH0H7cDvKDH18yc2{Hiv27ª00D90000000fUsz!AQEAQCB6F7U3jyAVJV7Fz2Gqc62LBiV25UD5NWSPcQ4K7jnXk5sWTF8XqGCKab.yvev0QZL96PZ5tNw8wDLpIo2LmQnRK18p00D90000000fUsz!AQEAQMFWv9CMKZUnfBJBQQiWrA6vD1JbomVnFZi9h4EQi0XGwTZu1KFwfcXnKN_5VHp29sz0Wt0qF1wllctBAMT5irh7Babz00D90000000fUsz!A0EA0KRIt62MPS0BhF0_SPMdUfRN0aX22hSEy4wwLvkW0y7Y8vtMasenRvudh00G90I81aqNrLu.wGgkCiT09RHg0a0XiF_d00D90000000fUsz!A0EA0D308YDdRotAiKWS5SVuJGBBkBI_nr.qWG_LFmpw.Tna06iUsaVTFkqNx9mp_5RyL0q07fwYqcAhBaG0W0p5AZiaaRmW00D90000000£Usz!AQEAQBNF6mVwPI9tYDn_q9cwXZWLeP_320.ShSVVAVJyZQCHFJWsH6dY608IknDQhD3L5XZ.U4VCyIH6RFsBEHqDj0xO_4wE00D90000000fUsz!AQEAQMTWIqjaCe9LxNFa73LULA9PS81uPenYu3i8alEZ0HUSQ.MPjvclv4e941DX4SpOtKBwTGvYvwwqhvEuKZpEDRq6PMFk00D90000000fUsz!AQEAQM10W5jadfі24A1jEnnJgVeiQ8bKYX4nq0cpL9KDVJTGV9KQddhC6X31s8xuTvL41hfz.E6JDLLQ0eADxY98YqZt.s4200D90000000Usz!AQEAQKB.ebRUP_FuVгU6tQZZBnTg{R6mx6oX6_bz¡vP0XfYSVKgKIBbiztHLZU21BhtRrp4yjcy0_dKH1XPAJM4vMGf_Sb00090000000fUsz!A0EA0HNp8SVvczrYh17dHik0U3ekL4FzfeZ5DGDGSvTUGfkYVRY4mbblh1St4x0Xansv7GPXWewJrfwUa7NK.kWUe0T0pyw100090000000fUs21A0EA0J_n0.9xL6XGCTvfc1YfSnNccaZ70a0703ha9i1VE000d 000vaS 6uANbDo607V9S1XxcC.Xa1KjazV0.DKq3zF4F1900D90000000£Usz1A0EA0E6≥WaWa57SD4e4JUdmroi0qbcKWUKhiAXZX≥Vz1BKNqbb1E0nLWXtoTs3TRcadu9ivuvTcHhbH awH4R7ac19aq8PMstate Yconnectedconnectedconnectedconnectedconnectedconnectedconnectedfull-refreshfull-refreshfull-nefrechful1-nofnochfull-refreshfull-refreshfull-refreshfull-refreshMidy /795590856053551715707254392CLOYe4740456047Msociable id YMorovider user id Y16125 0052L000004U5WUDA6161SA AAS1 A00AA2-PHdDAN1A1G GOSOIOGGGGZLIEYHOAW16124 0052L000004UEx90AG16389 0052L000003qwabOAA16117 00512000002FnvaAAC16091 0052L0000031V7n0AF16A05 AAS1ARAAAA1Zi ЄWAANI16067 0058X00000GHRxg0AH20609 0052L000003M3Xm0AH20687 0051a000002m2KTAAY16120 00590000000knVUAA)1A1AL AASOLAGGGOZERCInAN20852 0052L000003fzTJQAYМадеОосАаоооооОАМ16817 0052L000004VatUOAS20682 00590000001Sv7nAACmorovider refresh tokenY5Aen8617VFpoP. M.4vdZhne4YEnmiwHviz6n1MVahD12cSr_fAdTV8coF.SAen8417VSnoP.M.Awd7hne/VEnmiw!v776n1MVWadv80l VV7d4610X7725Aep8617VFpoP.M.4vdZhpe4YEnmiwHyjz6p1MVxdyl_Wq6Rb7QPhx0iPT5Aep8617VFpoP.M.4vdZhpe4YEnmiwHyjz6p1MV0HtJyq7RMSzmB8aQwRq5Aep8617VFpoP.M.4vdZhpe4YEnmiwHviz6p1MVTZd489NKV2RAC4.14Cb5Aen8617VFnoP_ M.4vdZhne4YEnmhTaa0xVU6MFVonkY7.h14sH3euBmHa5Aen8617VFooP. M.4vdZhpe4YEnmiwHviz6p1MVYVrq3viAPGF5qJQULyoSAen8417VEnoP M_Zwd7hne/VEnmbTaa0xVIIKMSMvhhn71_RF>PPh£+IH.5Aep8617VFpoP.M.4vdZhpe4YEnmkbe0CK_KX01LAWm2daKop59B5SLr0w5Aep8617VFpoP.M.4vdZhpe4YEnmiwHyiz6p1MVA6mVtoMcERxw®YXBn7h5Aep8617VFpoP.M.4vdZhpe4YEnmhTqa0xVU6MFjP81Us5Kw8RaBD0n0H5Aen8617VEnoP_M.4vdZhne4YEnmaqT~MEA.IdGot-fLXPMBY≥3B1CNX05F.JSAen9417VCnoD_ M Zwd7hne/VEnmiwlv-z/n1MV7vvsM£o£C1a95>^57105Aep8617VFpoP.M.4vdZhpe4YEnmiwHyjz6p1MVuwE59VsxonQglFclfdY5Aep8617VFpoP.M.4vdZhpe4YEnmhTqa0xVU6MFxCYTWE_rbY4yHD0fifS5Aen8617VFpoP. M.4vdZhoe4YEnmiwHviz6p1MV1NLHLt8ZS0Ghtme0CWh5Aen8617VFpoP.M.4vdZhne4YEnmaqTrMEAJdGoPDP. 17. TlcNxvca. SKNN Windeurf Toame 507.22 UITC.9Aenssoc...
|
NULL
|
-3532319657584139875
|
NULL
|
click
|
ocr
|
NULL
|
PhostormVIewINavigareCodeLaravelFV faVsco.js°9 mas PhostormVIewINavigareCodeLaravelFV faVsco.js°9 master kProjectM+ WEBHOOK-FILTERING_IMPLEMENTATION.mo>0b External Librariesv E Scratches and Consolesv _ Database consolesV AEU& console (euJA DEAL RISKS (EU1ADITEUIA EU (EUv / iminnv@localhostconsole fiminnv@localhost)4 D| lliminnv@localhostl4 HS_local jiminny@localhost)4 SF jiminny@localhost]A zoho_dev [jiminny@localhost]V A PRODA console (PROD]A console_1 (PROD]& DIIPRODIServicesv D Databaseconsole#HS localASF 978 msA PROD4 console 1 s 644 mgV STAGINGIconsoleDockerKeractorAutomateakeporskepository.pnp© AskAnythingPromptService.php© AskJiminnyReportsController.phpC)Hubspotwebnookbatchsyncstrategy.ongc)SyncObiects.pho©ImportOpportunityBatch.php© ImportContactBatch.php© Client.php© HubspotPaginationService.phd© Service.phpBatchSyncTrait.phpC) FetchSalestorceEntitiesJob.php /AutomatedReportsController.phpphp api v2.php(C) AutomatedReport.ohoclass FetchSalesforceEntitiesJob extends Job implements ShouldQueue, ShouldBeUniquepublic function handle(142144Cevncodit - CanhonImmutahle:.nowel$config->updateEntitySyncedAt(Sthis->entityType, $syncedAt):146147$logger->info('[FetchSalesforceEntitiesJobl Completed'.'crm confiquration id' => Sthis->crmConfiqurationIdOutputIIT PROFILESfR Result 11 x Tx.=(B47 rowsvW user_idI email Yundated at Y16125jeni.morrison@lesmills.com2026-04-20 01-19:4716156devon.bosley-smith@lesmills.com2026-04-20 01•10-4633 16115jessica.young@lesmills.com2026-04-20 01:19:4016124herschel.elderdlesm1lls.com2026-04-20 01:19:4016389alson.salernodlesmuus.com2026-04-20 01:19:4016117meredith.elumbad.esm.s.com2026-04-20 01.19:2616091nik.herolddlesmills.com2026-04-20 01-19:2316095adrian.heffernan@lesmills.com2024-04-20 01-10-2339 16067 (owner)jiminnvintegration@lesmills.com2004-02.21 04.71.2420609elinor.quavledlesm1lls.com2026-01-29 14:09:5120687ian.mcaregordlesmiuls.com2026-01-29 14:09:3516120jeannine.liu@lesmills.com2026-01-29 14•04•55161042085220684|1681720687mario.tarquinio@lesmills.com2024-01.20 14•07•501ollie.thomas@lesmills.com2025-11-04 19:12:01darren.hazel10lesmills.com2025-11-04 19:10:39kriasha.dadiflesmills.com2025-11-04 19:04•50martin.franklindlesmills.com2025-02-27 07:48•23= custom.log592594595596A26 ^ Y 597— 599=laravel.log4 SF jiminny@localhostA HS_local jiminny@localhost]Tx: Auto vselect * from automated_report_results WHERE report id = 54;select * from opportunities where id = 7594349;SELECT * FROM teams WHERE name LIKE '%Les%'; # 711, 692, 16067 - [EMAIL] * from playbooks where team_id = 711; # event 226147SELECT * FROM playbook categories WHERE playbook id = 5515:SELECT * FROM crm_fields WHERE id = 226147:SELECT * FROM crm fields WHERE Id = 226147:SELECT * FROM crm field values WHERE crm_ field id = 226147:SELECT * FROM crm configurations WHERE id = 692:A60r vSELECTCONCAT(u.id, CASE WHEN u.id = t.owner_ id THEN ' (owner)' ELSE •• END) AS user idu.emailsa.*t.owner id FROM social accounts sa100% C47• Mon 20 Apr 16:55:56L AskJiminnyReportActivityServiceTest vAconsole [EUi« console [STAGING]r liminny034 A1 A34 V 62 ^@provider_user_token T00D90000000Usz!AQEAQN_BYD6Jm¿ukPpvT12njFcMyon5w60jQBrcNTJfXBM7q9mgqnPkSBDjBzxKGNkPJ0bFfEH3CS.ZYwN.saQieAxN7I1D000D90000000fUsz!AQEAQIEePDjR1aW8DBp0mo_cJ7jTp1XTGSMwP5o.T8VydhYmGoI_mMlq.5nhQfagyB4dvPar_KS.g16Y7R_4LeK1HM3dQYoH00D90000000fUsz!AQEAQL05b59R0D3_RenuVQTIqkP2fJB0Gk4trY8ceWzN3ZoXiE7wkaG7UwUTCqtzF2QFduS0j990NxW_nGEcdoCxZXY2.iuh00D90000000fUsz!A0EA0GwXeiZLEVex1wwGeVqoe8iFI8.MSyxM4RjZ7y3ZV147Br0ztxfbwwXRSX4ApCcT4w9ADG9qe.9ZhWgFkM8uji0mFv9n00090000000fUsz!A0EA00JFLnSVTilnDaSkpC3USDtGDbp6MJe2s6vxDvrzF05A8PE84K9Khz10zhZf0DCPj2HiEnHD1KLTOYLTp_RMGkuoU0Ga00D90000000£Us≥!A0EA0CP78A.1YсRaTvE3≥Wо65oic1swz08tAF3va7n147AÏdd5WnKAW1TXMR8GvaM4YWYV11dH0H7cDvKDH18yc2{Hiv27ª00D90000000fUsz!AQEAQCB6F7U3jyAVJV7Fz2Gqc62LBiV25UD5NWSPcQ4K7jnXk5sWTF8XqGCKab.yvev0QZL96PZ5tNw8wDLpIo2LmQnRK18p00D90000000fUsz!AQEAQMFWv9CMKZUnfBJBQQiWrA6vD1JbomVnFZi9h4EQi0XGwTZu1KFwfcXnKN_5VHp29sz0Wt0qF1wllctBAMT5irh7Babz00D90000000fUsz!A0EA0KRIt62MPS0BhF0_SPMdUfRN0aX22hSEy4wwLvkW0y7Y8vtMasenRvudh00G90I81aqNrLu.wGgkCiT09RHg0a0XiF_d00D90000000fUsz!A0EA0D308YDdRotAiKWS5SVuJGBBkBI_nr.qWG_LFmpw.Tna06iUsaVTFkqNx9mp_5RyL0q07fwYqcAhBaG0W0p5AZiaaRmW00D90000000£Usz!AQEAQBNF6mVwPI9tYDn_q9cwXZWLeP_320.ShSVVAVJyZQCHFJWsH6dY608IknDQhD3L5XZ.U4VCyIH6RFsBEHqDj0xO_4wE00D90000000fUsz!AQEAQMTWIqjaCe9LxNFa73LULA9PS81uPenYu3i8alEZ0HUSQ.MPjvclv4e941DX4SpOtKBwTGvYvwwqhvEuKZpEDRq6PMFk00D90000000fUsz!AQEAQM10W5jadfі24A1jEnnJgVeiQ8bKYX4nq0cpL9KDVJTGV9KQddhC6X31s8xuTvL41hfz.E6JDLLQ0eADxY98YqZt.s4200D90000000Usz!AQEAQKB.ebRUP_FuVгU6tQZZBnTg{R6mx6oX6_bz¡vP0XfYSVKgKIBbiztHLZU21BhtRrp4yjcy0_dKH1XPAJM4vMGf_Sb00090000000fUsz!A0EA0HNp8SVvczrYh17dHik0U3ekL4FzfeZ5DGDGSvTUGfkYVRY4mbblh1St4x0Xansv7GPXWewJrfwUa7NK.kWUe0T0pyw100090000000fUs21A0EA0J_n0.9xL6XGCTvfc1YfSnNccaZ70a0703ha9i1VE000d 000vaS 6uANbDo607V9S1XxcC.Xa1KjazV0.DKq3zF4F1900D90000000£Usz1A0EA0E6≥WaWa57SD4e4JUdmroi0qbcKWUKhiAXZX≥Vz1BKNqbb1E0nLWXtoTs3TRcadu9ivuvTcHhbH awH4R7ac19aq8PMstate Yconnectedconnectedconnectedconnectedconnectedconnectedconnectedfull-refreshfull-refreshfull-nefrechful1-nofnochfull-refreshfull-refreshfull-refreshfull-refreshMidy /795590856053551715707254392CLOYe4740456047Msociable id YMorovider user id Y16125 0052L000004U5WUDA6161SA AAS1 A00AA2-PHdDAN1A1G GOSOIOGGGGZLIEYHOAW16124 0052L000004UEx90AG16389 0052L000003qwabOAA16117 00512000002FnvaAAC16091 0052L0000031V7n0AF16A05 AAS1ARAAAA1Zi ЄWAANI16067 0058X00000GHRxg0AH20609 0052L000003M3Xm0AH20687 0051a000002m2KTAAY16120 00590000000knVUAA)1A1AL AASOLAGGGOZERCInAN20852 0052L000003fzTJQAYМадеОосАаоооооОАМ16817 0052L000004VatUOAS20682 00590000001Sv7nAACmorovider refresh tokenY5Aen8617VFpoP. M.4vdZhne4YEnmiwHviz6n1MVahD12cSr_fAdTV8coF.SAen8417VSnoP.M.Awd7hne/VEnmiw!v776n1MVWadv80l VV7d4610X7725Aep8617VFpoP.M.4vdZhpe4YEnmiwHyjz6p1MVxdyl_Wq6Rb7QPhx0iPT5Aep8617VFpoP.M.4vdZhpe4YEnmiwHyjz6p1MV0HtJyq7RMSzmB8aQwRq5Aep8617VFpoP.M.4vdZhpe4YEnmiwHviz6p1MVTZd489NKV2RAC4.14Cb5Aen8617VFnoP_ M.4vdZhne4YEnmhTaa0xVU6MFVonkY7.h14sH3euBmHa5Aen8617VFooP. M.4vdZhpe4YEnmiwHviz6p1MVYVrq3viAPGF5qJQULyoSAen8417VEnoP M_Zwd7hne/VEnmbTaa0xVIIKMSMvhhn71_RF>PPh£+IH.5Aep8617VFpoP.M.4vdZhpe4YEnmkbe0CK_KX01LAWm2daKop59B5SLr0w5Aep8617VFpoP.M.4vdZhpe4YEnmiwHyiz6p1MVA6mVtoMcERxw®YXBn7h5Aep8617VFpoP.M.4vdZhpe4YEnmhTqa0xVU6MFjP81Us5Kw8RaBD0n0H5Aen8617VEnoP_M.4vdZhne4YEnmaqT~MEA.IdGot-fLXPMBY≥3B1CNX05F.JSAen9417VCnoD_ M Zwd7hne/VEnmiwlv-z/n1MV7vvsM£o£C1a95>^57105Aep8617VFpoP.M.4vdZhpe4YEnmiwHyjz6p1MVuwE59VsxonQglFclfdY5Aep8617VFpoP.M.4vdZhpe4YEnmhTqa0xVU6MFxCYTWE_rbY4yHD0fifS5Aen8617VFpoP. M.4vdZhoe4YEnmiwHviz6p1MV1NLHLt8ZS0Ghtme0CWh5Aen8617VFpoP.M.4vdZhne4YEnmaqTrMEAJdGoPDP. 17. TlcNxvca. SKNN Windeurf Toame 507.22 UITC.9Aenssoc...
|
59668
|
|
62582
|
1349
|
84
|
2026-04-21T07:57:38.500928+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776758258500_m2.jpg...
|
Alfred
|
Alfred
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
1
|
[{"role":"AXTextField","text [{"role":"AXTextField","text":"1","depth":1,"value":"1","help_text":"Alfred Search","role_description":"text field","is_enabled":true,"is_focused":true}]...
|
-1877118609467452521
|
-1877118609467452521
|
visual_change
|
hybrid
|
NULL
|
1
"suppont Dally • In 4h 3m100% LzTue 21 Apr 1 1
"suppont Dally • In 4h 3m100% LzTue 21 Apr 10:57:3822°CNew York CilyFirefoxsearch with Google or enter addressPlatform Sarint202 -..liminnviminnvlappAJ reports…lukas.kovalik…Plattorm...
|
62581
|
|
62589
|
1348
|
84
|
2026-04-21T07:57:48.966962+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776758268966_m1.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
1PasswordFileEditViewAccountsWindowHelpDOCKERO $1S 1PasswordFileEditViewAccountsWindowHelpDOCKERO $1Source DB:NAS mount:Archive DB:Data dir:-zsh[+00m03s] • Counting sourceframes:elements:ul_events:ocr_text:meetings:[+00m03s] • Initialisingcreating tablescreating indexescreating FTS tabl[+00m04s] • Syncing datavideo_chunksframes (9093 rowsocr_text (5971 rgui_events (9970 гelements (687142meetings (2 rows)[+03m01s]Updating FTS irelements_ftsframes_ftsui_events_fts[+06m41s] • Verifying DBframes:elements:ui_events:ocr_text:meetings:[+07m44s] •Copying data forsync2026-04-20/4 138m 47s4,34 GB2026-04-2110:48:54]Archi[2026-04-2110:48:54]Total[2026-04-2110:48:54]Sync[2026-04-2110:48:54]=====lukas@Lukas-Kovaliks-MacBodOKО $82(4.5G)JiminnyProfileAll ItemsFavoritesWatchtowerDeveloperVAULTSEmployeeEngineeringIntegration AccountsJiminnyTAGS2FACSV Import 28.01.22•LastPass Import 1.11.21C4Anbare Vit→QSearch in Jiminny113 results for "User"EQIFUs<><>Au‹/><>UserPilot Shared Jiminny ...[EMAIL] API (Mercury)[PROD US & EU] [EMAIL] API keyAudiobookbayahtrumpReward Gateway - Edenre...Chrome Webstore Client C...CHROME_WEBSTORE_CLIENT_ID=7..Bullhornmain.userCustomer API (Staging)Customer API (Mars)API Credential - Dixa<# Support Daily • in 4 h 3 m100% <7Tue 21 Apr 10:57:48Activity MonitorAll ProcessedCPUMemoryEnergyDiskThreadsPortsPIDHelp+ New Item22696207654048 Jimi..Jiminny8 All vShare0 Edit2075221736UsUserPilot Shared Jiminny [EMAIL] Good1086837425websitehttps://run.userpilot.io129291198210892> Last edited Tuesday, March 24, 2026 at 5:02:41 PM эry:NetworkUserlukaslukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas3,53 GB2,96 GB6,84 GB...
|
NULL
|
-2491597504147733649
|
NULL
|
visual_change
|
ocr
|
NULL
|
1PasswordFileEditViewAccountsWindowHelpDOCKERO $1S 1PasswordFileEditViewAccountsWindowHelpDOCKERO $1Source DB:NAS mount:Archive DB:Data dir:-zsh[+00m03s] • Counting sourceframes:elements:ul_events:ocr_text:meetings:[+00m03s] • Initialisingcreating tablescreating indexescreating FTS tabl[+00m04s] • Syncing datavideo_chunksframes (9093 rowsocr_text (5971 rgui_events (9970 гelements (687142meetings (2 rows)[+03m01s]Updating FTS irelements_ftsframes_ftsui_events_fts[+06m41s] • Verifying DBframes:elements:ui_events:ocr_text:meetings:[+07m44s] •Copying data forsync2026-04-20/4 138m 47s4,34 GB2026-04-2110:48:54]Archi[2026-04-2110:48:54]Total[2026-04-2110:48:54]Sync[2026-04-2110:48:54]=====lukas@Lukas-Kovaliks-MacBodOKО $82(4.5G)JiminnyProfileAll ItemsFavoritesWatchtowerDeveloperVAULTSEmployeeEngineeringIntegration AccountsJiminnyTAGS2FACSV Import 28.01.22•LastPass Import 1.11.21C4Anbare Vit→QSearch in Jiminny113 results for "User"EQIFUs<><>Au‹/><>UserPilot Shared Jiminny ...[EMAIL] API (Mercury)[PROD US & EU] [EMAIL] API keyAudiobookbayahtrumpReward Gateway - Edenre...Chrome Webstore Client C...CHROME_WEBSTORE_CLIENT_ID=7..Bullhornmain.userCustomer API (Staging)Customer API (Mars)API Credential - Dixa<# Support Daily • in 4 h 3 m100% <7Tue 21 Apr 10:57:48Activity MonitorAll ProcessedCPUMemoryEnergyDiskThreadsPortsPIDHelp+ New Item22696207654048 Jimi..Jiminny8 All vShare0 Edit2075221736UsUserPilot Shared Jiminny [EMAIL] Good1086837425websitehttps://run.userpilot.io129291198210892> Last edited Tuesday, March 24, 2026 at 5:02:41 PM эry:NetworkUserlukaslukas_windowserverlukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukaslukas3,53 GB2,96 GB6,84 GB...
|
62587
|
|
67205
|
1512
|
84
|
2026-04-21T15:29:11.215094+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776785351215_m2.jpg...
|
Firefox
|
Jiminny — Work
|
1
|
app.staging.jiminny.com/kiosk
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 2 Q2 - Platform Team - Scrum Board Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20372] AI Reports > Empty page design and promotion - Jira
[JY-20372] AI Reports > Empty page design and promotion - Jira
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Jiminny MCP Connector - Product - Confluence
Jiminny MCP Connector - Product - Confluence
Jiminny Mail
Jiminny Mail
[JY-20500] Batch initial sync for Salesforce - Jira
[JY-20500] Batch initial sync for Salesforce - Jira
Feed — jiminny — Sentry
Feed — jiminny — Sentry
Jiminny
Jiminny
Pipelines - jiminny/app
Pipelines - jiminny/app
Formalize
Formalize
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Search results: calendar | Jiminny Help Center
Search results: calendar | Jiminny Help Center
Jiminny
Jiminny
Jiminny
Jiminny
Close tab
Edit - Engineering - Confluence
Edit - Engineering - Confluence
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 874667
75
75
Kiosk
Organizations
Organizations
Setup Account
Setup Account
Users
Users
Activities
Activities
Automated Reports
Automated Reports
Mobile version
Mobile version
Active 9
Active
9
Deactivated
Deactivated
Search
NAME
OWNER
TIER
CRM
USERS
CREATED
Nikolay Nikolov - Office Mail
N/A
Scale
Salesforce
0
20/04/2026
Edit
Deactivate
Hubspot Staging Renamed
Aneliya Angelova
Grow
Hubspot
8
17/11/2025
Edit
Deactivate
Dynamics 365 Staging
Vasil Vasilev
Grow
Dynamicscrm
2
28/05/2025
Edit
Deactivate
Zoho Staging
Integration Account
Grow
Zohocrm
2
19/05/2025
Edit
Deactivate
Bullhorn Staging
Integration Account
Grow
Bullhorn
2
19/05/2025
Edit
Deactivate
Copper Staging
Integration Account
Grow
Copper
1
16/04/2025
Edit
Deactivate
Close Staging
Integration Account
Grow
Close
1
16/04/2025
Edit
Deactivate
Pipedrive Staging
Integration Account
Grow
Pipedrive
2
26/03/2025
Edit
Deactivate
Jiminny Staging
Martin Petkov
Grow
Salesforce
71
06/03/2017
Edit
Deactivate
1849px × 1188px
Clear
Filter URLs
Pause/Resume recording network log
New Request
Search
Request Blocking
Disable Cache
Disable Cache
No Throttling
Network Settings
All
HTML
CSS
JS
XHR
Fonts
Images
Media
WS
Other
Status
Status
Method
Method...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"bounds":{"left":0.0018284575,"top":0.0518755,"width":0.07596409,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"bounds":{"left":0.0,"top":0.09497207,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"bounds":{"left":0.013297873,"top":0.10614525,"width":0.041888297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20372] AI Reports > Empty page design and promotion - Jira","depth":4,"bounds":{"left":0.0,"top":0.12769353,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20372] AI Reports > Empty page design and promotion - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.13886672,"width":0.11319814,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"bounds":{"left":0.0,"top":0.16041501,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"bounds":{"left":0.013297873,"top":0.17158818,"width":0.041888297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"bounds":{"left":0.0,"top":0.19313647,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"bounds":{"left":0.013297873,"top":0.20430966,"width":0.041888297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"bounds":{"left":0.0,"top":0.22585794,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"bounds":{"left":0.013297873,"top":0.23703113,"width":0.041888297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny MCP Connector - Product - Confluence","depth":4,"bounds":{"left":0.0,"top":0.2585794,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny MCP Connector - Product - Confluence","depth":5,"bounds":{"left":0.013297873,"top":0.2697526,"width":0.08294548,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny Mail","depth":4,"bounds":{"left":0.0,"top":0.29130086,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny Mail","depth":5,"bounds":{"left":0.013297873,"top":0.30247405,"width":0.02144282,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20500] Batch initial sync for Salesforce - Jira","depth":4,"bounds":{"left":0.0,"top":0.32402235,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20500] Batch initial sync for Salesforce - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.33519554,"width":0.08610372,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"bounds":{"left":0.0,"top":0.3567438,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"bounds":{"left":0.013297873,"top":0.367917,"width":0.042719416,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.38946527,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.40063846,"width":0.013131649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"bounds":{"left":0.0,"top":0.42218676,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"bounds":{"left":0.013297873,"top":0.43335995,"width":0.039228722,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Formalize","depth":4,"bounds":{"left":0.0,"top":0.45490822,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Formalize","depth":5,"bounds":{"left":0.013297873,"top":0.4660814,"width":0.016788565,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"bounds":{"left":0.0,"top":0.48762968,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":5,"bounds":{"left":0.013297873,"top":0.49880287,"width":0.09524601,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Search results: calendar | Jiminny Help Center","depth":4,"bounds":{"left":0.0,"top":0.5203512,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search results: calendar | Jiminny Help Center","depth":5,"bounds":{"left":0.013297873,"top":0.53152436,"width":0.080119684,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.55307263,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.5642458,"width":0.013131649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"bounds":{"left":0.0,"top":0.5857941,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny","depth":5,"bounds":{"left":0.013297873,"top":0.5969673,"width":0.013131649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"bounds":{"left":0.06732048,"top":0.59297687,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Edit - Engineering - Confluence","depth":4,"bounds":{"left":0.0,"top":0.61851555,"width":0.07962101,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit - Engineering - Confluence","depth":5,"bounds":{"left":0.013297873,"top":0.62968874,"width":0.054853722,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.6528332,"width":0.07413564,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-18909-automated-reports-ask-jiminny ■ 874667","depth":9,"bounds":{"left":0.08028591,"top":0.9860335,"width":0.10056516,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"75","depth":12,"bounds":{"left":0.08228058,"top":0.91380686,"width":0.015957447,"height":0.035115723},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"75","depth":14,"bounds":{"left":0.09059176,"top":0.9173983,"width":0.004654255,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Kiosk","depth":15,"bounds":{"left":0.107546546,"top":0.06384677,"width":0.016954787,"height":0.019553073},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Organizations","depth":15,"bounds":{"left":0.1008976,"top":0.08938547,"width":0.09142287,"height":0.031923383},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Organizations","depth":16,"bounds":{"left":0.107546546,"top":0.0981644,"width":0.032081116,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Setup Account","depth":15,"bounds":{"left":0.1008976,"top":0.121308856,"width":0.09142287,"height":0.031923383},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Setup Account","depth":16,"bounds":{"left":0.107546546,"top":0.1300878,"width":0.032413565,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Users","depth":15,"bounds":{"left":0.1008976,"top":0.15323225,"width":0.09142287,"height":0.031923383},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Users","depth":16,"bounds":{"left":0.107546546,"top":0.16201118,"width":0.012799202,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Activities","depth":15,"bounds":{"left":0.1008976,"top":0.18515563,"width":0.09142287,"height":0.031923383},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Activities","depth":16,"bounds":{"left":0.107546546,"top":0.19393456,"width":0.021110373,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Automated Reports","depth":15,"bounds":{"left":0.1008976,"top":0.21707901,"width":0.09142287,"height":0.031923383},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Automated Reports","depth":16,"bounds":{"left":0.107546546,"top":0.22585794,"width":0.043716755,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Mobile version","depth":15,"bounds":{"left":0.1008976,"top":0.2490024,"width":0.09142287,"height":0.031923383},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Mobile version","depth":16,"bounds":{"left":0.107546546,"top":0.25778133,"width":0.032912236,"height":0.014764565},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Active 9","depth":18,"bounds":{"left":0.19896941,"top":0.0518755,"width":0.03873005,"height":0.039106146},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Active","depth":19,"bounds":{"left":0.20728059,"top":0.06424581,"width":0.014461436,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"9","depth":20,"bounds":{"left":0.22539894,"top":0.066640064,"width":0.0019946808,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Deactivated","depth":18,"bounds":{"left":0.23769946,"top":0.0518755,"width":0.04155585,"height":0.039106146},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Deactivated","depth":19,"bounds":{"left":0.24601063,"top":0.06464485,"width":0.024933511,"height":0.013567438},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search","depth":22,"bounds":{"left":0.21243352,"top":0.11412609,"width":0.065990694,"height":0.019952115},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NAME","depth":22,"bounds":{"left":0.20162898,"top":0.1811652,"width":0.012965426,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"OWNER","depth":22,"bounds":{"left":0.3181516,"top":0.1811652,"width":0.016788565,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TIER","depth":22,"bounds":{"left":0.390625,"top":0.1811652,"width":0.009474734,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CRM","depth":22,"bounds":{"left":0.44896942,"top":0.1811652,"width":0.009807181,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"USERS","depth":22,"bounds":{"left":0.5071476,"top":0.1811652,"width":0.013297873,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"CREATED","depth":22,"bounds":{"left":0.56549203,"top":0.1811652,"width":0.019448139,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Nikolay Nikolov - Office Mail","depth":23,"bounds":{"left":0.20162898,"top":0.22346368,"width":0.055851065,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"N/A","depth":23,"bounds":{"left":0.3181516,"top":0.22346368,"width":0.0078125,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Scale","depth":23,"bounds":{"left":0.390625,"top":0.22346368,"width":0.010139627,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Salesforce","depth":23,"bounds":{"left":0.44896942,"top":0.22346368,"width":0.020279255,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0","depth":23,"bounds":{"left":0.5071476,"top":0.22346368,"width":0.0026595744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"20/04/2026","depth":23,"bounds":{"left":0.56549203,"top":0.22346368,"width":0.024102394,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit","depth":22,"bounds":{"left":0.62101066,"top":0.21548285,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Deactivate","depth":22,"bounds":{"left":0.6456117,"top":0.21548285,"width":0.03856383,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hubspot Staging Renamed","depth":23,"bounds":{"left":0.20162898,"top":0.26177174,"width":0.051695477,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Aneliya Angelova","depth":23,"bounds":{"left":0.3181516,"top":0.26177174,"width":0.033909574,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grow","depth":23,"bounds":{"left":0.390625,"top":0.26177174,"width":0.010970744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hubspot","depth":23,"bounds":{"left":0.44896942,"top":0.26177174,"width":0.016788565,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"8","depth":23,"bounds":{"left":0.5071476,"top":0.26177174,"width":0.0026595744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"17/11/2025","depth":23,"bounds":{"left":0.56549203,"top":0.26177174,"width":0.024102394,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit","depth":22,"bounds":{"left":0.62101066,"top":0.25418994,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Deactivate","depth":22,"bounds":{"left":0.6456117,"top":0.25418994,"width":0.03856383,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Dynamics 365 Staging","depth":23,"bounds":{"left":0.20162898,"top":0.30007982,"width":0.04338431,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vasil Vasilev","depth":23,"bounds":{"left":0.3181516,"top":0.30007982,"width":0.023936171,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grow","depth":23,"bounds":{"left":0.390625,"top":0.30007982,"width":0.010970744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Dynamicscrm","depth":23,"bounds":{"left":0.44896942,"top":0.30007982,"width":0.026761968,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":23,"bounds":{"left":0.5071476,"top":0.30007982,"width":0.0026595744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"28/05/2025","depth":23,"bounds":{"left":0.56549203,"top":0.30007982,"width":0.024102394,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit","depth":22,"bounds":{"left":0.62101066,"top":0.292498,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Deactivate","depth":22,"bounds":{"left":0.6456117,"top":0.292498,"width":0.03856383,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Zoho Staging","depth":23,"bounds":{"left":0.20162898,"top":0.3387869,"width":0.025598405,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Integration Account","depth":23,"bounds":{"left":0.3181516,"top":0.3387869,"width":0.039228722,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grow","depth":23,"bounds":{"left":0.390625,"top":0.3387869,"width":0.010970744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Zohocrm","depth":23,"bounds":{"left":0.44896942,"top":0.3387869,"width":0.01761968,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":23,"bounds":{"left":0.5071476,"top":0.3387869,"width":0.0026595744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19/05/2025","depth":23,"bounds":{"left":0.56549203,"top":0.3387869,"width":0.024102394,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit","depth":22,"bounds":{"left":0.62101066,"top":0.33080608,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Deactivate","depth":22,"bounds":{"left":0.6456117,"top":0.33080608,"width":0.03856383,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Bullhorn Staging","depth":23,"bounds":{"left":0.20162898,"top":0.37709498,"width":0.032247342,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Integration Account","depth":23,"bounds":{"left":0.3181516,"top":0.37709498,"width":0.039228722,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grow","depth":23,"bounds":{"left":0.390625,"top":0.37709498,"width":0.010970744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Bullhorn","depth":23,"bounds":{"left":0.44896942,"top":0.37709498,"width":0.016788565,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":23,"bounds":{"left":0.5071476,"top":0.37709498,"width":0.0026595744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"19/05/2025","depth":23,"bounds":{"left":0.56549203,"top":0.37709498,"width":0.024102394,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit","depth":22,"bounds":{"left":0.62101066,"top":0.36951315,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Deactivate","depth":22,"bounds":{"left":0.6456117,"top":0.36951315,"width":0.03856383,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Copper Staging","depth":23,"bounds":{"left":0.20162898,"top":0.41540304,"width":0.030086435,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Integration Account","depth":23,"bounds":{"left":0.3181516,"top":0.41540304,"width":0.039228722,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grow","depth":23,"bounds":{"left":0.390625,"top":0.41540304,"width":0.010970744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Copper","depth":23,"bounds":{"left":0.44896942,"top":0.41540304,"width":0.01462766,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":23,"bounds":{"left":0.5071476,"top":0.41540304,"width":0.0026595744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16/04/2025","depth":23,"bounds":{"left":0.56549203,"top":0.41540304,"width":0.024102394,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit","depth":22,"bounds":{"left":0.62101066,"top":0.40782124,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Deactivate","depth":22,"bounds":{"left":0.6456117,"top":0.40782124,"width":0.03856383,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Close Staging","depth":23,"bounds":{"left":0.20162898,"top":0.45411015,"width":0.02642952,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Integration Account","depth":23,"bounds":{"left":0.3181516,"top":0.45411015,"width":0.039228722,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grow","depth":23,"bounds":{"left":0.390625,"top":0.45411015,"width":0.010970744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Close","depth":23,"bounds":{"left":0.44896942,"top":0.45411015,"width":0.010970744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"1","depth":23,"bounds":{"left":0.5071476,"top":0.45411015,"width":0.0026595744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16/04/2025","depth":23,"bounds":{"left":0.56549203,"top":0.45411015,"width":0.024102394,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit","depth":22,"bounds":{"left":0.62101066,"top":0.4461293,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Deactivate","depth":22,"bounds":{"left":0.6456117,"top":0.4461293,"width":0.03856383,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipedrive Staging","depth":23,"bounds":{"left":0.20162898,"top":0.4924182,"width":0.034075797,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Integration Account","depth":23,"bounds":{"left":0.3181516,"top":0.4924182,"width":0.039228722,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grow","depth":23,"bounds":{"left":0.390625,"top":0.4924182,"width":0.010970744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Pipedrive","depth":23,"bounds":{"left":0.44896942,"top":0.4924182,"width":0.01861702,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2","depth":23,"bounds":{"left":0.5071476,"top":0.4924182,"width":0.0026595744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"26/03/2025","depth":23,"bounds":{"left":0.56549203,"top":0.4924182,"width":0.024102394,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit","depth":22,"bounds":{"left":0.62101066,"top":0.4848364,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Deactivate","depth":22,"bounds":{"left":0.6456117,"top":0.4848364,"width":0.03856383,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny Staging","depth":23,"bounds":{"left":0.20162898,"top":0.53072625,"width":0.030585106,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Martin Petkov","depth":23,"bounds":{"left":0.3181516,"top":0.53072625,"width":0.027925532,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Grow","depth":23,"bounds":{"left":0.390625,"top":0.53072625,"width":0.010970744,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Salesforce","depth":23,"bounds":{"left":0.44896942,"top":0.53072625,"width":0.020279255,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"71","depth":23,"bounds":{"left":0.5071476,"top":0.53072625,"width":0.0051529254,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"06/03/2017","depth":23,"bounds":{"left":0.56549203,"top":0.53072625,"width":0.024102394,"height":0.0131683955},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Edit","depth":22,"bounds":{"left":0.62101066,"top":0.5231444,"width":0.024601065,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Deactivate","depth":22,"bounds":{"left":0.6456117,"top":0.5231444,"width":0.03856383,"height":0.028731046},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"1849px × 1188px","depth":6,"bounds":{"left":0.6590758,"top":0.055067837,"width":0.03374335,"height":0.011971269},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Clear","depth":16,"bounds":{"left":0.69547874,"top":0.07821229,"width":0.008643617,"height":0.015961692},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextField","text":"Filter URLs","depth":16,"bounds":{"left":0.70578456,"top":0.07581804,"width":0.16771941,"height":0.0207502},"help_text":"","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Pause/Resume recording network log","depth":16,"bounds":{"left":0.8871343,"top":0.077813245,"width":0.008643617,"height":0.016759777},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"New Request","depth":16,"bounds":{"left":0.89644283,"top":0.07821229,"width":0.008643617,"height":0.015961692},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Search","depth":16,"bounds":{"left":0.90575135,"top":0.07821229,"width":0.008643617,"height":0.015961692},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Request Blocking","depth":16,"bounds":{"left":0.91505986,"top":0.07821229,"width":0.008643617,"height":0.015961692},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Disable Cache","depth":17,"bounds":{"left":0.92702794,"top":0.080207504,"width":0.004654255,"height":0.011173184},"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Disable Cache","depth":17,"bounds":{"left":0.93267953,"top":0.08100559,"width":0.024933511,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"No Throttling","depth":16,"bounds":{"left":0.96127,"top":0.07940942,"width":0.027094414,"height":0.01396648},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Network Settings","depth":16,"bounds":{"left":0.9900266,"top":0.07821229,"width":0.008643617,"height":0.015961692},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"All","depth":17,"bounds":{"left":0.6978058,"top":0.10175578,"width":0.00831117,"height":0.01556265},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"HTML","depth":17,"bounds":{"left":0.7067819,"top":0.10175578,"width":0.014461436,"height":0.01556265},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"CSS","depth":17,"bounds":{"left":0.7219083,"top":0.10175578,"width":0.011303191,"height":0.01556265},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"JS","depth":17,"bounds":{"left":0.73387635,"top":0.10175578,"width":0.00831117,"height":0.01556265},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"XHR","depth":17,"bounds":{"left":0.7428524,"top":0.10175578,"width":0.011635638,"height":0.01556265},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Fonts","depth":17,"bounds":{"left":0.75515294,"top":0.10175578,"width":0.013630319,"height":0.01556265},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Images","depth":17,"bounds":{"left":0.76944816,"top":0.10175578,"width":0.01662234,"height":0.01556265},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Media","depth":17,"bounds":{"left":0.78673536,"top":0.10175578,"width":0.014461436,"height":0.01556265},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"WS","depth":17,"bounds":{"left":0.8018617,"top":0.10175578,"width":0.009973404,"height":0.01556265},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Other","depth":17,"bounds":{"left":0.8125,"top":0.10175578,"width":0.013796543,"height":0.01556265},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Status","depth":24,"bounds":{"left":0.69414896,"top":0.121308856,"width":0.01861702,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status","depth":26,"bounds":{"left":0.69581115,"top":0.12609737,"width":0.011136968,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Method","depth":24,"bounds":{"left":0.7130984,"top":0.121308856,"width":0.018284574,"height":0.01915403},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Method","depth":26,"bounds":{"left":0.71476066,"top":0.12609737,"width":0.013297873,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-1967655867521923103
|
-4704028055710325487
|
visual_change
|
accessibility
|
NULL
|
Platform Sprint 2 Q2 - Platform Team - Scrum Board Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20372] AI Reports > Empty page design and promotion - Jira
[JY-20372] AI Reports > Empty page design and promotion - Jira
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Jiminny MCP Connector - Product - Confluence
Jiminny MCP Connector - Product - Confluence
Jiminny Mail
Jiminny Mail
[JY-20500] Batch initial sync for Salesforce - Jira
[JY-20500] Batch initial sync for Salesforce - Jira
Feed — jiminny — Sentry
Feed — jiminny — Sentry
Jiminny
Jiminny
Pipelines - jiminny/app
Pipelines - jiminny/app
Formalize
Formalize
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Search results: calendar | Jiminny Help Center
Search results: calendar | Jiminny Help Center
Jiminny
Jiminny
Jiminny
Jiminny
Close tab
Edit - Engineering - Confluence
Edit - Engineering - Confluence
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 874667
75
75
Kiosk
Organizations
Organizations
Setup Account
Setup Account
Users
Users
Activities
Activities
Automated Reports
Automated Reports
Mobile version
Mobile version
Active 9
Active
9
Deactivated
Deactivated
Search
NAME
OWNER
TIER
CRM
USERS
CREATED
Nikolay Nikolov - Office Mail
N/A
Scale
Salesforce
0
20/04/2026
Edit
Deactivate
Hubspot Staging Renamed
Aneliya Angelova
Grow
Hubspot
8
17/11/2025
Edit
Deactivate
Dynamics 365 Staging
Vasil Vasilev
Grow
Dynamicscrm
2
28/05/2025
Edit
Deactivate
Zoho Staging
Integration Account
Grow
Zohocrm
2
19/05/2025
Edit
Deactivate
Bullhorn Staging
Integration Account
Grow
Bullhorn
2
19/05/2025
Edit
Deactivate
Copper Staging
Integration Account
Grow
Copper
1
16/04/2025
Edit
Deactivate
Close Staging
Integration Account
Grow
Close
1
16/04/2025
Edit
Deactivate
Pipedrive Staging
Integration Account
Grow
Pipedrive
2
26/03/2025
Edit
Deactivate
Jiminny Staging
Martin Petkov
Grow
Salesforce
71
06/03/2017
Edit
Deactivate
1849px × 1188px
Clear
Filter URLs
Pause/Resume recording network log
New Request
Search
Request Blocking
Disable Cache
Disable Cache
No Throttling
Network Settings
All
HTML
CSS
JS
XHR
Fonts
Images
Media
WS
Other
Status
Status
Method
Method...
|
67204
|
|
67240
|
1511
|
84
|
2026-04-21T15:30:17.336160+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-21/1776 /Users/lukas/.screenpipe/data/data/2026-04-21/1776785417336_m1.jpg...
|
Firefox
|
Jiminny — Work
|
1
|
app.staging.jiminny.com/ai-reports
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
Platform Sprint 2 Q2 - Platform Team - Scrum Board Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20372] AI Reports > Empty page design and promotion - Jira
[JY-20372] AI Reports > Empty page design and promotion - Jira
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Jiminny MCP Connector - Product - Confluence
Jiminny MCP Connector - Product - Confluence
Jiminny Mail
Jiminny Mail
[JY-20500] Batch initial sync for Salesforce - Jira
[JY-20500] Batch initial sync for Salesforce - Jira
Feed — jiminny — Sentry
Feed — jiminny — Sentry
Jiminny
Jiminny
Pipelines - jiminny/app
Pipelines - jiminny/app
Formalize
Formalize
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Search results: calendar | Jiminny Help Center
Search results: calendar | Jiminny Help Center
Jiminny
Jiminny
Jiminny
Jiminny
Close tab
Edit - Engineering - Confluence
Edit - Engineering - Confluence
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 874667
28
28
AI Reports
AI Reports
Ask Jiminny reports
Ask Jiminny reports
Report name
Period
Report Type
Report Type
Clear all
NAME
FREQUENCY
SHARED
DATE
ACTIONS
Test 6 - 15 Apr 2026
Daily
16/04/2026
Test 7 - 15 Apr 2026
Daily
16/04/2026
Exec Summary - 1 Nov 2024 - 17 Dec 2025 - All
One-Off
15/04/2026
Exec Summary Podcast - 1 Nov 2024 - 17 Dec 2025 - All
One-Off
15/04/2026
Exec Summary - 1 Nov 2024 - 17 Dec 2025 - All
One-Off
15/04/2026
Test 6 - 13 Apr 2026
Daily
14/04/2026
You are currently impersonating Nikolay Yankov
Clear All Apply
Clear All
Apply
Clear
Filter URLs
Pause/Resume recording network log
New Request
Search
Request Blocking
Disable Cache
Disable Cache
No Throttling
Network Settings
All
HTML
CSS
JS
XHR
Fonts
Images
Media
WS
Other
Status
Status
Method
Method
Domain
Domain
File
File
Initiator
Initiator
Type
Type
Transferred
Transferred
Size
Size
0 ms
0 ms
200
POST
o36719.ingest.sentry.io
/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0
fetch
json
500 B
2 B
36 ms
200
POST
o36719.ingest.sentry.io
/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0
sentry-B6v5fcc5.js
:2
(fetch)
json
500 B
2 B
36 ms
200
GET
app.staging.jiminny.com
search?status[]=completed&sort_by=dateHeld&sort_direction=desc&exclude[]=stats&only_recorded=1&user_id[]=c4fb084a-b33a-46fe-904b-351b592a4b0f
xhr
json
6.28 kB
24.21 kB
786 ms
200
GET
app.staging.jiminny.com
automated-reports
xhr
json
4.03 kB
6.13 kB
733 ms
200
GET
app.staging.jiminny.com
recent
xhr
json
5.65 kB
15.26 kB
549 ms
200
GET
app.staging.jiminny.com
integrations
xhr
json
3.83 kB
5.53 kB
867 ms
200
GET
find.userpilot.io
NX-094be170
xhr
json
cached
62 B
0 ms
200
POST
app.staging.jiminny.com
authenticate
xhr
json
3.11 kB
96 B
470 ms
Status
Status
200
200
200
200
200
200
200
200
Method
Method
POST
POST
GET
GET
GET
GET
GET
POST
Domain
Domain
o36719.ingest.sentry.io
o36719.ingest.sentry.io
app.staging.jiminny.com
app.staging.jiminny.com
app.staging.jiminny.com
app.staging.jiminny.com
find.userpilot.io
app.staging.jiminny.com
File
File
/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0
/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0
search?status[]=completed&sort_by=dateHeld&sort_direction=desc&exclude[]=stats&only_recorded=1&user_id[]=c4fb084a-b33a-46fe-904b-351b592a4b0f
automated-reports
recent
integrations
NX-094be170
authenticate
Initiator
Initiator
fetch
sentry-B6v5fcc5.js
:2
(fetch)
xhr
xhr
xhr
xhr
xhr
xhr
Type
Type
json
json
json
json
json
json
json
json
Transferred
Transferred
500 B
500 B
6.28 kB
4.03 kB
5.65 kB...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20372] AI Reports > Empty page design and promotion - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20372] AI Reports > Empty page design and promotion - Jira","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Project Phoenix – Figma","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Project Phoenix – Figma","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny MCP Connector - Product - Confluence","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny MCP Connector - Product - Confluence","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny Mail","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny Mail","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[JY-20500] Batch initial sync for Salesforce - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[JY-20500] Batch initial sync for Salesforce - Jira","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Feed — jiminny — Sentry","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Feed — jiminny — Sentry","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Pipelines - jiminny/app","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Pipelines - jiminny/app","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Formalize","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Formalize","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"[SRD-6793] Les Mills activity types not pulling in - Jira","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Search results: calendar | Jiminny Help Center","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Search results: calendar | Jiminny Help Center","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Jiminny","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Jiminny","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXStaticText","text":"Jiminny","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Close tab","depth":5,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Edit - Engineering - Confluence","depth":4,"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Edit - Engineering - Confluence","depth":5,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Google Gemini (⌃X)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Tabs from other devices","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"JY-18909-automated-reports-ask-jiminny ■ 874667","depth":9,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"28","depth":12,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"28","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXHeading","text":"AI Reports","depth":13,"help_text":"","role_description":"heading","subrole":"AXUnknown"},{"role":"AXStaticText","text":"AI Reports","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"Ask Jiminny reports","depth":13,"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Ask Jiminny reports","depth":14,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Report name","depth":17,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Period","depth":20,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Report Type","depth":16,"value":"Report Type","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":true},{"role":"AXTextField","text":"Report Type","depth":18,"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":true,"is_selected":false},{"role":"AXButton","text":"Clear all","depth":13,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"NAME","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FREQUENCY","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SHARED","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DATE","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"ACTIONS","depth":16,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Test 6 - 15 Apr 2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Daily","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16/04/2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Test 7 - 15 Apr 2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Daily","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"16/04/2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Exec Summary - 1 Nov 2024 - 17 Dec 2025 - All","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"One-Off","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15/04/2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Exec Summary Podcast - 1 Nov 2024 - 17 Dec 2025 - All","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"One-Off","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15/04/2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Exec Summary - 1 Nov 2024 - 17 Dec 2025 - All","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"One-Off","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15/04/2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Test 6 - 13 Apr 2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Daily","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"14/04/2026","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"You are currently impersonating Nikolay Yankov","depth":11,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXComboBox","text":"Clear All Apply","depth":8,"value":"Clear All Apply","help_text":"","role_description":"combo box","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Clear All","depth":10,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Apply","depth":10,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Clear","depth":16,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXTextField","text":"Filter URLs","depth":16,"help_text":"","role_description":"search text field","subrole":"AXSearchField","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Pause/Resume recording network log","depth":16,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"New Request","depth":16,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Search","depth":16,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Request Blocking","depth":16,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Disable Cache","depth":17,"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Disable Cache","depth":17,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"No Throttling","depth":16,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXButton","text":"Network Settings","depth":16,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false,"is_expanded":false},{"role":"AXCheckBox","text":"All","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"HTML","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"CSS","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"JS","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"XHR","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Fonts","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Images","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Media","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"WS","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Other","depth":17,"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Status","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Method","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Method","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Domain","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Domain","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"File","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"File","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Initiator","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initiator","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Type","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Transferred","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Transferred","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Size","depth":24,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Size","depth":26,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"0 ms","depth":24,"help_text":"Timeline","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"0 ms","depth":27,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POST","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"o36719.ingest.sentry.io","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"fetch","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"500 B","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2 B","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"36 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POST","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"o36719.ingest.sentry.io","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sentry-B6v5fcc5.js","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":2","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(fetch)","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"500 B","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"2 B","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"36 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"search?status[]=completed&sort_by=dateHeld&sort_direction=desc&exclude[]=stats&only_recorded=1&user_id[]=c4fb084a-b33a-46fe-904b-351b592a4b0f","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"xhr","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6.28 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"24.21 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"786 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"automated-reports","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"xhr","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4.03 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6.13 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"733 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"recent","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"xhr","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.65 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"15.26 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"549 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"integrations","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"xhr","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3.83 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.53 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"867 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"find.userpilot.io","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NX-094be170","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"xhr","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"cached","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"62 B","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"0 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POST","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"authenticate","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"xhr","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"3.11 kB","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"96 B","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"470 ms","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Status","depth":23,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Status","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"200","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Method","depth":23,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Method","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POST","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POST","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"GET","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"POST","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Domain","depth":23,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Domain","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"o36719.ingest.sentry.io","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"o36719.ingest.sentry.io","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"find.userpilot.io","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"app.staging.jiminny.com","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"File","depth":23,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"File","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"search?status[]=completed&sort_by=dateHeld&sort_direction=desc&exclude[]=stats&only_recorded=1&user_id[]=c4fb084a-b33a-46fe-904b-351b592a4b0f","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"automated-reports","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"recent","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"integrations","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NX-094be170","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"authenticate","depth":24,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Initiator","depth":23,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Initiator","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"fetch","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"sentry-B6v5fcc5.js","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":":2","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"(fetch)","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"xhr","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"xhr","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"xhr","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"xhr","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"xhr","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"xhr","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Type","depth":23,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Type","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"json","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Transferred","depth":23,"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Transferred","depth":25,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"500 B","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"500 B","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"6.28 kB","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"4.03 kB","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"5.65 kB","depth":23,"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-935234544649071630
|
-4750259217654813609
|
click
|
accessibility
|
NULL
|
Platform Sprint 2 Q2 - Platform Team - Scrum Board Platform Sprint 2 Q2 - Platform Team - Scrum Board - Jira
Project Phoenix – Figma
Project Phoenix – Figma
[JY-20372] AI Reports > Empty page design and promotion - Jira
[JY-20372] AI Reports > Empty page design and promotion - Jira
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Project Phoenix – Figma
Jiminny MCP Connector - Product - Confluence
Jiminny MCP Connector - Product - Confluence
Jiminny Mail
Jiminny Mail
[JY-20500] Batch initial sync for Salesforce - Jira
[JY-20500] Batch initial sync for Salesforce - Jira
Feed — jiminny — Sentry
Feed — jiminny — Sentry
Jiminny
Jiminny
Pipelines - jiminny/app
Pipelines - jiminny/app
Formalize
Formalize
[SRD-6793] Les Mills activity types not pulling in - Jira
[SRD-6793] Les Mills activity types not pulling in - Jira
Search results: calendar | Jiminny Help Center
Search results: calendar | Jiminny Help Center
Jiminny
Jiminny
Jiminny
Jiminny
Close tab
Edit - Engineering - Confluence
Edit - Engineering - Confluence
New Tab
Customize sidebar
Open Google Gemini (⌃X)
Tabs from other devices
Open history (⇧⌘H)
Open bookmarks (⌘B)
JY-18909-automated-reports-ask-jiminny ■ 874667
28
28
AI Reports
AI Reports
Ask Jiminny reports
Ask Jiminny reports
Report name
Period
Report Type
Report Type
Clear all
NAME
FREQUENCY
SHARED
DATE
ACTIONS
Test 6 - 15 Apr 2026
Daily
16/04/2026
Test 7 - 15 Apr 2026
Daily
16/04/2026
Exec Summary - 1 Nov 2024 - 17 Dec 2025 - All
One-Off
15/04/2026
Exec Summary Podcast - 1 Nov 2024 - 17 Dec 2025 - All
One-Off
15/04/2026
Exec Summary - 1 Nov 2024 - 17 Dec 2025 - All
One-Off
15/04/2026
Test 6 - 13 Apr 2026
Daily
14/04/2026
You are currently impersonating Nikolay Yankov
Clear All Apply
Clear All
Apply
Clear
Filter URLs
Pause/Resume recording network log
New Request
Search
Request Blocking
Disable Cache
Disable Cache
No Throttling
Network Settings
All
HTML
CSS
JS
XHR
Fonts
Images
Media
WS
Other
Status
Status
Method
Method
Domain
Domain
File
File
Initiator
Initiator
Type
Type
Transferred
Transferred
Size
Size
0 ms
0 ms
200
POST
o36719.ingest.sentry.io
/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0
fetch
json
500 B
2 B
36 ms
200
POST
o36719.ingest.sentry.io
/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0
sentry-B6v5fcc5.js
:2
(fetch)
json
500 B
2 B
36 ms
200
GET
app.staging.jiminny.com
search?status[]=completed&sort_by=dateHeld&sort_direction=desc&exclude[]=stats&only_recorded=1&user_id[]=c4fb084a-b33a-46fe-904b-351b592a4b0f
xhr
json
6.28 kB
24.21 kB
786 ms
200
GET
app.staging.jiminny.com
automated-reports
xhr
json
4.03 kB
6.13 kB
733 ms
200
GET
app.staging.jiminny.com
recent
xhr
json
5.65 kB
15.26 kB
549 ms
200
GET
app.staging.jiminny.com
integrations
xhr
json
3.83 kB
5.53 kB
867 ms
200
GET
find.userpilot.io
NX-094be170
xhr
json
cached
62 B
0 ms
200
POST
app.staging.jiminny.com
authenticate
xhr
json
3.11 kB
96 B
470 ms
Status
Status
200
200
200
200
200
200
200
200
Method
Method
POST
POST
GET
GET
GET
GET
GET
POST
Domain
Domain
o36719.ingest.sentry.io
o36719.ingest.sentry.io
app.staging.jiminny.com
app.staging.jiminny.com
app.staging.jiminny.com
app.staging.jiminny.com
find.userpilot.io
app.staging.jiminny.com
File
File
/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0
/api/5627310/envelope/?sentry_version=7&sentry_key=8cba05ef3e3f4f68a86d3a6d31465998&sentry_client=sentry.javascript.vue/10.43.0
search?status[]=completed&sort_by=dateHeld&sort_direction=desc&exclude[]=stats&only_recorded=1&user_id[]=c4fb084a-b33a-46fe-904b-351b592a4b0f
automated-reports
recent
integrations
NX-094be170
authenticate
Initiator
Initiator
fetch
sentry-B6v5fcc5.js
:2
(fetch)
xhr
xhr
xhr
xhr
xhr
xhr
Type
Type
json
json
json
json
json
json
json
json
Transferred
Transferred
500 B
500 B
6.28 kB
4.03 kB
5.65 kB...
|
67238
|
|
74113
|
1838
|
84
|
2026-04-23T09:03:23.702358+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-23/1776 /Users/lukas/.screenpipe/data/data/2026-04-23/1776935003702_m1.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_1
|
NULL
|
NULL
|
NULL
|
NULL
|
QuickTime PlayerFileEditViewWindowHelp& Userpi QuickTime PlayerFileEditViewWindowHelp& Userpilot Introducti... 27 m left100% C47Thu 23 Apr 12:03:24CleanShot2026-0...@2x.pngCleanShot2026-0..@[EMAIL] StoyanovaTPO Au ROsaConverting [EMAIL] quality:UltraDimensions:Width:1800 x 10801800Height: 1080(Original)Audio: Don't change• Convert to mono• Mute• Change volumeCleanShot2026-0...@[EMAIL] file size: ~823,2 [EMAIL]...
|
NULL
|
-1729277849372269300
|
NULL
|
click
|
ocr
|
NULL
|
QuickTime PlayerFileEditViewWindowHelp& Userpi QuickTime PlayerFileEditViewWindowHelp& Userpilot Introducti... 27 m left100% C47Thu 23 Apr 12:03:24CleanShot2026-0...@2x.pngCleanShot2026-0..@[EMAIL] StoyanovaTPO Au ROsaConverting [EMAIL] quality:UltraDimensions:Width:1800 x 10801800Height: 1080(Original)Audio: Don't change• Convert to mono• Mute• Change volumeCleanShot2026-0...@[EMAIL] file size: ~823,2 [EMAIL]...
|
NULL
|
|
74122
|
1839
|
84
|
2026-04-23T09:03:43.031697+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-23/1776 /Users/lukas/.screenpipe/data/data/2026-04-23/1776935023031_m2.jpg...
|
iTerm2
|
NULL
|
1
|
NULL
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
ActivityJiminny…..8 people-with-copilo...8 people- ActivityJiminny…..8 people-with-copilo...8 people-with-zoom-...# platform-team# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...6? Direct messagesB Aneliya Angelova,...88. Stoyan Tomovf.. Nikolay YankovP. Petko KashinskiA. Aneliya Angelova •. Nikolay Nikolov M&. Mario Georgiev E%. Todor StamatovP. Gabriela DurevaVasil Vasilev$. Galya Dimitrovaf8. Stefka Stoyanova2. Stoyan Tanev#: Appsf Jira Cloud# releases8 22MessagesUe Files• BookmarksView JobCircleCl APP 11:51 AMNew commits deployed to Prophet Prod-US:16114026(https://github.com/jiminny/prophet/commit/6f14da6ctal9de2d513e24014a80362060344071)- [UY-20726](https://jiminny.atlassian.net/browse/JY-20726): Identify participants rare lang AzureGrok (#491) (steliyan-g)[f3f372e](https://github.com/jiminny/prophet/commit/f3f372e36cdd36c72682e080833f0e885cf8aa6a)- Evals more ypd (#478) (ilian-jiminny)New commits deployed to Prophet Prod-EU:16ff4026(https://github.com/jiminny/prophet/commit/6ff4da6cfaf9de2d513ea4d14a8d36206d344b71)- [JY-20726](https://jiminny.atlassian.net/browse/JY-20726): Identify participants rare lang AzureGrok (#491) (steliyan-g)[f3f372e](https://github.com/jiminny/prophet/commit/f3Message #releases+ Aа®0 840X6Chash=-6679997250984875896,sklpping capcurece_namead. statement=" ninstlectnampASC\nLIMIT\n1 Cnasn=551540011999591969.id, \nrows atrected=b rows returned=49 elapsed=6.405864Snaction:tound 49 ellolble23 frames1.8MB (2.0x), 23 JPEGs deletedskipping capturefor monitor 1 (hash-951548071599591969, trigger=visual_change)4.3MB → 1.5MB (2.9x),24 1PEGs deletedifor monitor 1 (hash=951548071599591969, trigger-visual_change)acer=visual chance))DB pool may be saturatedг - ов роDB poobe saturatedre cimeamont cor=s)-re chmemonlcor=1 = Ubpoolre timedout triager=visual change, monitor=L - UbpOOLsacuraceabe saturatedatter s consecutive errorsup:skinnina contureskipptimestamp\nFROMn firowsaffecte io rom-returnet-timestamp\nFROMn fldovi ca namo \ntimestamp\nFROMn fl27 SPEGS deletedid-10. arace-300c12026-2Work/2026/Jser\ Pilotlintroductionv372558017812 rioderevisual chandenAd1 2046-04-23.mo4 2026-04-23112:02:09.2139294(2.8x),JPEGs deleted16 trames. <.CMB→ 1.0Mb <.3x).10 JPEGs deletedsklboino capturefor monitor 2 (hash=7823854956395915880, trigger=click)npipe enaine::event_driven capture: content dedup: skippina capture for monitor 1 €2026-contentskipping capturefor monitor 1 chash=-4997183725580178172.tridder=visual chandemoniton1 Chach-4428370940474457947• moniton 2 Chach-4428370940474457947moniton 2 Chach_1129270040471157047(timeout=300s, app=Firefox, id=10)ravountesE jiminnyIcloud• iCloud Drive283 Sync folderDXP4800PLUS-B5F® NetworkTags• CRM• Orange• Red• Yellow• PurpleO All Tags...workv N 2026• User Pilot introduction Adi 2026-04-23-converted-encoded.mp4.sb-78cc7c24-Uyv16Re User Pilot introduction Adi 2026-04-23-converted-encoded.mp4m User Pilot introduction Adi 2026-04-23.mp4# Daily 2026-04-23.mp4Daily 2026-04-22.mp4"in Refinement 2026-04-06.mo4Daily 2026-04-21.mp4D Refinement 2026-04-20.mp4Daily 2026-04-20.mp4ta Daily 2026-04-17.mp4Ta Daily 2026-04-16.ra Planning 2026-04-15.mp4Retro 2026-04-14.mo4Daily 2026-04-14.mp4= User pilot (Adi) 2026-04-09.mp4= Daily 2026-04-09.mp4w: Daily 2026-04-08.mp4Daily 2026-04-07.mp4Daily 2026-04-06.mp4• Daily 2026-04-02 mn/es Planning 2026-04-01 & task split.mp4ii Retro 2026-03-31.mp4m Dailv 2026-03-31.mo4- Refinement 2026-03-30.mp4- Daily 2026-03-27.mp4= Daily 2026-02-26 mn4- Daily 2026-03-24.mp4Refinement 2026-03-23.mp4= Dailv 2026-03-23.mo4** BE chapter 2026-03-20.mp4im Planing 2026-03-18-converted.mp4- Refinement 2026-02-09-converted.mp4REя Daily 2026-03-19.mp4- Review 2026-03-18.mp4a Planina 2026-03-18.mo4v Retro 2026-03-17.mp4Daily 2026-03-17.mp4= Refinement 2026-03-16.mn4eDaily 2026-02-16 mn/lI Daily 2026-03-13.mp41-1 2026-03-12.mp4Daily 2026-03-12.mn4ea Daily 2026-03-11.mp4Daily 2026-03-10.mp4x Refinement 2026-03-09.mp4Fa Daily 2026.02-00 mn/P Daily 2026-03-06.mp4a Planning 2026-03-04.mp4• Daily 2026-03-02 mn4Daily 2026-02-26.movDailv 2026-02-25.movIun Opportunitv-Contacts 2026-02-24.mD4L/m lenDate ModifiedToday at 12:02Today at 12:02Today at 12:02Today at 11:58Today at 10:32Yesterday at 10:2121 Aor 2026 at 11:0221 Apr 2026 at 10:0020 Apr 2026 at 16:5620 Apr 2026 at 10:0617 Apr 2026 at 10:1616 Apr 2026 at 10:0015 Apr 2026 at 11:1414 Aor 2026 at 17:3714 Apr 2026 at 10:099 Apr 2026 at 14:479 Aor 2026 at 10:078 Apr 2026 at 10:137 Apr 2026 at 10:016 Apr 2026 at 10:082 Anr 2026 at 10:211 Apr 2026 at 12:2031 Mar 2026 at 18:293* Mar 2026 at 10:1030 Mar 2026 at 17:1230 Mar 2026 at 10:0527 Mar 2026 at 10:0926 Mar 2026 at 0:50l24 Mar 2026 at 10:0023 Mar 2026 at 17:0323 Mar 2026 at 10:0020 Mar 2026 at 11:4620 Mar 2026 at 10:0619 Mar 2026 at 12:0110 Mar 2026 at 11:2519 Mar 2026 at 9:5718 Mar 2026 at 16:2018 Mar 2026 at 11:1417 Mar 2026 at 17:4016 Mar 2026 at 16:5516 Mar 2026 at 10:0213 Mar 2026 at 10:1212 Mar 2026 at 18:3512 Mar 2026 at 10:1011 Mar 2026 at 10:0610 Mar 2026 at 9:579 Mar 2026 at 17:04a Mar 2026 at 0:566 Mar 2026 at 9:574 Mar 2026 at 11:092 Mar 2026 at 10:0727 Feb 2026 at 10:0225 Feb 2026 at 9:59TAt A9.0e1 of 149 selected, 2,01 TB availableInU Z3 Aor 12:03.44rolder528,6 MBDocumentZero bytesMPEG-4 movie724 MBMPEG-4 movie1,74 GBMPEG-4 movie1,36 GBMPEG-4 movie2.41 G:MPEG-4 movie567,8 MB MPEG-4 movie4,25 GBMPEG-4 movie698,5 MBMPEG-4 movie1,16 GBMPEG-4 movie513,4 MBMPEG-4 movie2/oGbMPEG-4 movie1.44 GEMPEG-4 movie924,4 MB MPEG-4 movie362,6 MB748.8 MBMPEG-4 movie1,04 GBMPEG-4 movie575,5 MBMPEG-4 movie720,5 MBMPEG-4 movie1102 GrMPEG-A movid4,68 GBMPEG-4 movie3,4 CBMPEG-4 movie923,6 MBMPEG-4 movie2,77 GBMPEG-4 movie641,8 MBMPEG-4 movie884,3 MBMPEG-4 movie176 6 MPMPEG-4 movie550,8 MBMPEG-4 movie3,44 GBMPEG-4 movie438.9 M.MPEG-4 movie1,68 GBMPEG-4 movie430,4 MBMPEG-4 movie2,38 GBMPEG-4 movie2 26 GRMPEG-4 movie386,3 MBMPEG-4 movie705,8 MBMPEG-4 movie2.78 GEMPEG-4 movie1,53 GBMPEG-4 movie1,2 GB4,19 GBMPEG-4 movie502 2 MPMDSG-A movie1,02 GBMPEG-4 movie637,6 MB978.7 MEMPEG.A movid798,7 MB MPEG-4 movie404,6 MB MPEG-4 movie4.16 GEMPEG-4 movie2107 MPMDEG.A movid291,7 MBMPEG-4 movie2,62 GBMPEG-4 movie768 5 MPMPEG-A movie546,8 MB MPEG-4 movie503,5 MBQT movie7047M0 MDRA A MAvid...
|
NULL
|
5836811277077485377
|
NULL
|
click
|
ocr
|
NULL
|
ActivityJiminny…..8 people-with-copilo...8 people- ActivityJiminny…..8 people-with-copilo...8 people-with-zoom-...# platform-team# platform-tickets# product_launches# random# releases# sofia-office# support# thank-yous# the_people_of jimi...6? Direct messagesB Aneliya Angelova,...88. Stoyan Tomovf.. Nikolay YankovP. Petko KashinskiA. Aneliya Angelova •. Nikolay Nikolov M&. Mario Georgiev E%. Todor StamatovP. Gabriela DurevaVasil Vasilev$. Galya Dimitrovaf8. Stefka Stoyanova2. Stoyan Tanev#: Appsf Jira Cloud# releases8 22MessagesUe Files• BookmarksView JobCircleCl APP 11:51 AMNew commits deployed to Prophet Prod-US:16114026(https://github.com/jiminny/prophet/commit/6f14da6ctal9de2d513e24014a80362060344071)- [UY-20726](https://jiminny.atlassian.net/browse/JY-20726): Identify participants rare lang AzureGrok (#491) (steliyan-g)[f3f372e](https://github.com/jiminny/prophet/commit/f3f372e36cdd36c72682e080833f0e885cf8aa6a)- Evals more ypd (#478) (ilian-jiminny)New commits deployed to Prophet Prod-EU:16ff4026(https://github.com/jiminny/prophet/commit/6ff4da6cfaf9de2d513ea4d14a8d36206d344b71)- [JY-20726](https://jiminny.atlassian.net/browse/JY-20726): Identify participants rare lang AzureGrok (#491) (steliyan-g)[f3f372e](https://github.com/jiminny/prophet/commit/f3Message #releases+ Aа®0 840X6Chash=-6679997250984875896,sklpping capcurece_namead. statement=" ninstlectnampASC\nLIMIT\n1 Cnasn=551540011999591969.id, \nrows atrected=b rows returned=49 elapsed=6.405864Snaction:tound 49 ellolble23 frames1.8MB (2.0x), 23 JPEGs deletedskipping capturefor monitor 1 (hash-951548071599591969, trigger=visual_change)4.3MB → 1.5MB (2.9x),24 1PEGs deletedifor monitor 1 (hash=951548071599591969, trigger-visual_change)acer=visual chance))DB pool may be saturatedг - ов роDB poobe saturatedre cimeamont cor=s)-re chmemonlcor=1 = Ubpoolre timedout triager=visual change, monitor=L - UbpOOLsacuraceabe saturatedatter s consecutive errorsup:skinnina contureskipptimestamp\nFROMn firowsaffecte io rom-returnet-timestamp\nFROMn fldovi ca namo \ntimestamp\nFROMn fl27 SPEGS deletedid-10. arace-300c12026-2Work/2026/Jser\ Pilotlintroductionv372558017812 rioderevisual chandenAd1 2046-04-23.mo4 2026-04-23112:02:09.2139294(2.8x),JPEGs deleted16 trames. <.CMB→ 1.0Mb <.3x).10 JPEGs deletedsklboino capturefor monitor 2 (hash=7823854956395915880, trigger=click)npipe enaine::event_driven capture: content dedup: skippina capture for monitor 1 €2026-contentskipping capturefor monitor 1 chash=-4997183725580178172.tridder=visual chandemoniton1 Chach-4428370940474457947• moniton 2 Chach-4428370940474457947moniton 2 Chach_1129270040471157047(timeout=300s, app=Firefox, id=10)ravountesE jiminnyIcloud• iCloud Drive283 Sync folderDXP4800PLUS-B5F® NetworkTags• CRM• Orange• Red• Yellow• PurpleO All Tags...workv N 2026• User Pilot introduction Adi 2026-04-23-converted-encoded.mp4.sb-78cc7c24-Uyv16Re User Pilot introduction Adi 2026-04-23-converted-encoded.mp4m User Pilot introduction Adi 2026-04-23.mp4# Daily 2026-04-23.mp4Daily 2026-04-22.mp4"in Refinement 2026-04-06.mo4Daily 2026-04-21.mp4D Refinement 2026-04-20.mp4Daily 2026-04-20.mp4ta Daily 2026-04-17.mp4Ta Daily 2026-04-16.ra Planning 2026-04-15.mp4Retro 2026-04-14.mo4Daily 2026-04-14.mp4= User pilot (Adi) 2026-04-09.mp4= Daily 2026-04-09.mp4w: Daily 2026-04-08.mp4Daily 2026-04-07.mp4Daily 2026-04-06.mp4• Daily 2026-04-02 mn/es Planning 2026-04-01 & task split.mp4ii Retro 2026-03-31.mp4m Dailv 2026-03-31.mo4- Refinement 2026-03-30.mp4- Daily 2026-03-27.mp4= Daily 2026-02-26 mn4- Daily 2026-03-24.mp4Refinement 2026-03-23.mp4= Dailv 2026-03-23.mo4** BE chapter 2026-03-20.mp4im Planing 2026-03-18-converted.mp4- Refinement 2026-02-09-converted.mp4REя Daily 2026-03-19.mp4- Review 2026-03-18.mp4a Planina 2026-03-18.mo4v Retro 2026-03-17.mp4Daily 2026-03-17.mp4= Refinement 2026-03-16.mn4eDaily 2026-02-16 mn/lI Daily 2026-03-13.mp41-1 2026-03-12.mp4Daily 2026-03-12.mn4ea Daily 2026-03-11.mp4Daily 2026-03-10.mp4x Refinement 2026-03-09.mp4Fa Daily 2026.02-00 mn/P Daily 2026-03-06.mp4a Planning 2026-03-04.mp4• Daily 2026-03-02 mn4Daily 2026-02-26.movDailv 2026-02-25.movIun Opportunitv-Contacts 2026-02-24.mD4L/m lenDate ModifiedToday at 12:02Today at 12:02Today at 12:02Today at 11:58Today at 10:32Yesterday at 10:2121 Aor 2026 at 11:0221 Apr 2026 at 10:0020 Apr 2026 at 16:5620 Apr 2026 at 10:0617 Apr 2026 at 10:1616 Apr 2026 at 10:0015 Apr 2026 at 11:1414 Aor 2026 at 17:3714 Apr 2026 at 10:099 Apr 2026 at 14:479 Aor 2026 at 10:078 Apr 2026 at 10:137 Apr 2026 at 10:016 Apr 2026 at 10:082 Anr 2026 at 10:211 Apr 2026 at 12:2031 Mar 2026 at 18:293* Mar 2026 at 10:1030 Mar 2026 at 17:1230 Mar 2026 at 10:0527 Mar 2026 at 10:0926 Mar 2026 at 0:50l24 Mar 2026 at 10:0023 Mar 2026 at 17:0323 Mar 2026 at 10:0020 Mar 2026 at 11:4620 Mar 2026 at 10:0619 Mar 2026 at 12:0110 Mar 2026 at 11:2519 Mar 2026 at 9:5718 Mar 2026 at 16:2018 Mar 2026 at 11:1417 Mar 2026 at 17:4016 Mar 2026 at 16:5516 Mar 2026 at 10:0213 Mar 2026 at 10:1212 Mar 2026 at 18:3512 Mar 2026 at 10:1011 Mar 2026 at 10:0610 Mar 2026 at 9:579 Mar 2026 at 17:04a Mar 2026 at 0:566 Mar 2026 at 9:574 Mar 2026 at 11:092 Mar 2026 at 10:0727 Feb 2026 at 10:0225 Feb 2026 at 9:59TAt A9.0e1 of 149 selected, 2,01 TB availableInU Z3 Aor 12:03.44rolder528,6 MBDocumentZero bytesMPEG-4 movie724 MBMPEG-4 movie1,74 GBMPEG-4 movie1,36 GBMPEG-4 movie2.41 G:MPEG-4 movie567,8 MB MPEG-4 movie4,25 GBMPEG-4 movie698,5 MBMPEG-4 movie1,16 GBMPEG-4 movie513,4 MBMPEG-4 movie2/oGbMPEG-4 movie1.44 GEMPEG-4 movie924,4 MB MPEG-4 movie362,6 MB748.8 MBMPEG-4 movie1,04 GBMPEG-4 movie575,5 MBMPEG-4 movie720,5 MBMPEG-4 movie1102 GrMPEG-A movid4,68 GBMPEG-4 movie3,4 CBMPEG-4 movie923,6 MBMPEG-4 movie2,77 GBMPEG-4 movie641,8 MBMPEG-4 movie884,3 MBMPEG-4 movie176 6 MPMPEG-4 movie550,8 MBMPEG-4 movie3,44 GBMPEG-4 movie438.9 M.MPEG-4 movie1,68 GBMPEG-4 movie430,4 MBMPEG-4 movie2,38 GBMPEG-4 movie2 26 GRMPEG-4 movie386,3 MBMPEG-4 movie705,8 MBMPEG-4 movie2.78 GEMPEG-4 movie1,53 GBMPEG-4 movie1,2 GB4,19 GBMPEG-4 movie502 2 MPMDSG-A movie1,02 GBMPEG-4 movie637,6 MB978.7 MEMPEG.A movid798,7 MB MPEG-4 movie404,6 MB MPEG-4 movie4.16 GEMPEG-4 movie2107 MPMDEG.A movid291,7 MBMPEG-4 movie2,62 GBMPEG-4 movie768 5 MPMPEG-A movie546,8 MB MPEG-4 movie503,5 MBQT movie7047M0 MDRA A MAvid...
|
74119
|
|
81652
|
2172
|
84
|
2026-04-25T16:39:56.169085+00:00
|
/Users/lukas/.screenpipe/data/data/2026-04-25/1777 /Users/lukas/.screenpipe/data/data/2026-04-25/1777135196169_m2.jpg...
|
Firefox
|
DXP4800PLUS-B5F8 — Personal
|
1
|
nas.lakylak.xyz/desktop/#/
|
monitor_2
|
NULL
|
NULL
|
NULL
|
NULL
|
DXP4800PLUS-B5F8
Inbox (7) - [EMAIL] - Gmail
(56) DXP4800PLUS-B5F8
Inbox (7) - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
New Tab
New Tab
MikroTik · CRS304-4XG-IN
MikroTik · CRS304-4XG-IN
New Tab
Customize sidebar
Open Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
13.9
KB/s
18
KB/s
Files
Control Panel
Storage
App Center
Logs
Support
Task Manager
Universal Search
Music
Cloud Drives
Theater
Photos
Online Office
TextEdit
Virtual Machine
Downloads
DLNA
File Version Explorer
Security
Jellyfin-HT
SAN Manager
Vault
Snapshot
Comics
Sync & Backup
Control Panel
Search
Connection & Access
User Management
File Service
Device Connection
Domain/LDAP
Terminal
General
Hardware & Power
Time & Language
Network
Security
Indexing Service
Service
About
Update & Restore
SMB
FTP
NFS
Rsync
WebDAV
Advanced Settings
WebDAV settings
Enable service
Enable service
Once enabled, local account can be used to connect to and access UGREEN NAS storage data through WebDav on a LAN or external network
Advanced
Apply
Files
Personal Folder
Shared Folder
User Folder
Tag
...
|
[{"role":"AXRadioButton","text [{"role":"AXRadioButton","text":"DXP4800PLUS-B5F8","depth":4,"bounds":{"left":0.0018284575,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":true},{"role":"AXRadioButton","text":"Inbox (7) - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.03856383,"top":0.0518755,"width":0.03656915,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"(56) Inbox | kovaliklukas@proton.me | Proton Mail","depth":4,"bounds":{"left":0.07513298,"top":0.0518755,"width":0.03673537,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXRadioButton","text":"Welcome back","depth":4,"bounds":{"left":0.0,"top":0.09497207,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Welcome back","depth":5,"bounds":{"left":0.013297873,"top":0.10614525,"width":0.025265958,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":4,"bounds":{"left":0.0,"top":0.12769353,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com","depth":5,"bounds":{"left":0.013297873,"top":0.13886672,"width":0.26263297,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Today's Deals","depth":4,"bounds":{"left":0.0,"top":0.16041501,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Today's Deals","depth":5,"bounds":{"left":0.013297873,"top":0.17158818,"width":0.024102394,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"architecture - screenpipe docs","depth":4,"bounds":{"left":0.0,"top":0.19313647,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"architecture - screenpipe docs","depth":5,"bounds":{"left":0.013297873,"top":0.20430966,"width":0.053523935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.0,"top":0.22585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Code works better when you stop treating it like a machine - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.013297873,"top":0.23703113,"width":0.1747008,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Screenpipe — Archive","depth":4,"bounds":{"left":0.0,"top":0.2585794,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Screenpipe — Archive","depth":5,"bounds":{"left":0.013297873,"top":0.2697526,"width":0.037898935,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: archive.db","depth":4,"bounds":{"left":0.0,"top":0.29130086,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: archive.db","depth":5,"bounds":{"left":0.013297873,"top":0.30247405,"width":0.040724736,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"SQLite Web: db.sqlite","depth":4,"bounds":{"left":0.0,"top":0.32402235,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"SQLite Web: db.sqlite","depth":5,"bounds":{"left":0.013297873,"top":0.33519554,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Claude Platform","depth":4,"bounds":{"left":0.0,"top":0.3567438,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Claude Platform","depth":5,"bounds":{"left":0.013297873,"top":0.367917,"width":0.027925532,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":4,"bounds":{"left":0.0,"top":0.38946527,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Hey @louis030195 Ill check during my - screenpipe.com","depth":5,"bounds":{"left":0.013297873,"top":0.40063846,"width":0.09790558,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":4,"bounds":{"left":0.0,"top":0.42218676,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub","depth":5,"bounds":{"left":0.013297873,"top":0.43335995,"width":0.22556517,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":4,"bounds":{"left":0.0,"top":0.45490822,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gong Pricing in 2026: Costs, Plans & Is It Worth It?","depth":5,"bounds":{"left":0.013297873,"top":0.4660814,"width":0.08826463,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":4,"bounds":{"left":0.0,"top":0.48762968,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - kovaliklukas@gmail.com - Gmail","depth":5,"bounds":{"left":0.013297873,"top":0.49880287,"width":0.28075132,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"Gitea Official Website","depth":4,"bounds":{"left":0.0,"top":0.5203512,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Gitea Official Website","depth":5,"bounds":{"left":0.013297873,"top":0.53152436,"width":0.03756649,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":4,"bounds":{"left":0.0,"top":0.55307263,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea","depth":5,"bounds":{"left":0.013297873,"top":0.5642458,"width":0.10555186,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"New Tab","depth":4,"bounds":{"left":0.0,"top":0.5857941,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"New Tab","depth":5,"bounds":{"left":0.013297873,"top":0.5969673,"width":0.014960106,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXRadioButton","text":"MikroTik · CRS304-4XG-IN","depth":4,"bounds":{"left":0.0,"top":0.61851555,"width":0.113696806,"height":0.032721467},"help_text":"","role_description":"tab","subrole":"AXTabButton","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"MikroTik · CRS304-4XG-IN","depth":5,"bounds":{"left":0.013297873,"top":0.62968874,"width":0.046875,"height":0.010774142},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"New Tab","depth":4,"bounds":{"left":0.0028257978,"top":0.6528332,"width":0.108211435,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Customize sidebar","depth":6,"bounds":{"left":0.0028257978,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open Le Chat Mistral (⌃X)","depth":6,"bounds":{"left":0.013796543,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open history (⇧⌘H)","depth":6,"bounds":{"left":0.024933511,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Open bookmarks (⌘B)","depth":6,"bounds":{"left":0.036070477,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXCheckBox","text":"Bitwarden","depth":6,"bounds":{"left":0.04720745,"top":0.97007185,"width":0.010638298,"height":0.025538707},"help_text":"","role_description":"toggle button","subrole":"AXToggle","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"13.9","depth":15,"bounds":{"left":0.9247008,"top":0.06264964,"width":0.0071476065,"height":0.008379889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KB/s","depth":15,"bounds":{"left":0.9318484,"top":0.06304868,"width":0.005984043,"height":0.0075818035},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"18","depth":15,"bounds":{"left":0.9247008,"top":0.07222666,"width":0.0039893617,"height":0.008379889},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"KB/s","depth":15,"bounds":{"left":0.92869014,"top":0.0726257,"width":0.005984043,"height":0.0075818035},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Files","depth":13,"bounds":{"left":0.13663563,"top":0.1707901,"width":0.009973404,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Control Panel","depth":13,"bounds":{"left":0.12749335,"top":0.2697526,"width":0.02825798,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Storage","depth":13,"bounds":{"left":0.13347739,"top":0.36871508,"width":0.016289894,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"App Center","depth":13,"bounds":{"left":0.12982048,"top":0.46767756,"width":0.023603724,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Logs","depth":13,"bounds":{"left":0.13663563,"top":0.5666401,"width":0.009973404,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Support","depth":13,"bounds":{"left":0.13347739,"top":0.66560256,"width":0.016289894,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Task Manager","depth":13,"bounds":{"left":0.12699468,"top":0.76456505,"width":0.02925532,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Universal Search","depth":13,"bounds":{"left":0.123836435,"top":0.86352754,"width":0.03557181,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Music","depth":13,"bounds":{"left":0.18334441,"top":0.1707901,"width":0.012300532,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Cloud Drives","depth":13,"bounds":{"left":0.17619681,"top":0.2697526,"width":0.026595745,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Theater","depth":13,"bounds":{"left":0.18151596,"top":0.36871508,"width":0.015957447,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Photos","depth":13,"bounds":{"left":0.18218085,"top":0.46767756,"width":0.01462766,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Online Office","depth":13,"bounds":{"left":0.17603059,"top":0.5666401,"width":0.026928192,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"TextEdit","depth":13,"bounds":{"left":0.18118352,"top":0.66560256,"width":0.01662234,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Virtual Machine","depth":13,"bounds":{"left":0.17353724,"top":0.76456505,"width":0.031914894,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Downloads","depth":13,"bounds":{"left":0.17802526,"top":0.86352754,"width":0.022938829,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"DLNA","depth":13,"bounds":{"left":0.23121676,"top":0.1707901,"width":0.012300532,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"File Version Explorer","depth":13,"bounds":{"left":0.2159242,"top":0.2697526,"width":0.04288564,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security","depth":13,"bounds":{"left":0.22888963,"top":0.36871508,"width":0.016954787,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Jellyfin-HT","depth":13,"bounds":{"left":0.22639628,"top":0.46767756,"width":0.021941489,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SAN Manager","depth":13,"bounds":{"left":0.22273937,"top":0.5666401,"width":0.02925532,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Vault","depth":13,"bounds":{"left":0.2322141,"top":0.66560256,"width":0.010305851,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Snapshot","depth":13,"bounds":{"left":0.22755983,"top":0.76456505,"width":0.019614361,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Comics","depth":13,"bounds":{"left":0.22955452,"top":0.86352754,"width":0.015625,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Sync & Backup","depth":13,"bounds":{"left":0.26944813,"top":0.1707901,"width":0.03158245,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Control Panel","depth":10,"bounds":{"left":0.54787236,"top":0.19872306,"width":0.025930852,"height":0.011173184},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXLink","text":"","depth":10,"bounds":{"left":0.7430186,"top":0.19473264,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":11,"bounds":{"left":0.7443484,"top":0.19792499,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":16,"bounds":{"left":0.37898937,"top":0.23463687,"width":0.004654255,"height":0.011572227},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXTextField","text":"Search","depth":15,"bounds":{"left":0.3863032,"top":0.22745411,"width":0.028922873,"height":0.025538707},"help_text":"","role_description":"text field","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Connection & Access","depth":16,"bounds":{"left":0.36535904,"top":0.27853152,"width":0.037898935,"height":0.011173184},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"User Management","depth":18,"bounds":{"left":0.37533244,"top":0.31284916,"width":0.040059842,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"File Service","depth":18,"bounds":{"left":0.37533244,"top":0.35115722,"width":0.025930852,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Device Connection","depth":18,"bounds":{"left":0.37533244,"top":0.38946527,"width":0.025598405,"height":0.031923383},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Domain/LDAP","depth":18,"bounds":{"left":0.37533244,"top":0.44692737,"width":0.031083776,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Terminal","depth":18,"bounds":{"left":0.37533244,"top":0.48523542,"width":0.019115692,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"General","depth":16,"bounds":{"left":0.36535904,"top":0.5243416,"width":0.01412899,"height":0.011173184},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Hardware & Power","depth":18,"bounds":{"left":0.37533244,"top":0.5586592,"width":0.04105718,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Time & Language","depth":18,"bounds":{"left":0.37533244,"top":0.5969673,"width":0.03873005,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Network","depth":18,"bounds":{"left":0.37533244,"top":0.63527536,"width":0.018284574,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Security","depth":18,"bounds":{"left":0.37533244,"top":0.6735834,"width":0.018284574,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Indexing Service","depth":18,"bounds":{"left":0.37533244,"top":0.7118915,"width":0.036901597,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Service","depth":16,"bounds":{"left":0.36535904,"top":0.7509976,"width":0.013297873,"height":0.011173184},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"About","depth":18,"bounds":{"left":0.37533244,"top":0.7853152,"width":0.013464096,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Update & Restore","depth":18,"bounds":{"left":0.37533244,"top":0.8236233,"width":0.0390625,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"SMB","depth":17,"bounds":{"left":0.43882978,"top":0.2330407,"width":0.010305851,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"FTP","depth":17,"bounds":{"left":0.4574468,"top":0.2330407,"width":0.00880984,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"NFS","depth":17,"bounds":{"left":0.47456783,"top":0.2330407,"width":0.00930851,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Rsync","depth":17,"bounds":{"left":0.4921875,"top":0.2330407,"width":0.013962766,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WebDAV","depth":17,"bounds":{"left":0.51446146,"top":0.2330407,"width":0.019281914,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Advanced Settings","depth":17,"bounds":{"left":0.54205453,"top":0.2330407,"width":0.041888297,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"WebDAV settings","depth":16,"bounds":{"left":0.43849733,"top":0.28810853,"width":0.036070477,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXCheckBox","text":"Enable service","depth":16,"bounds":{"left":0.4815492,"top":0.29130086,"width":0.004654255,"height":0.011173184},"help_text":"","role_description":"checkbox","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"Enable service","depth":16,"bounds":{"left":0.48886302,"top":0.2905028,"width":0.030418882,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Once enabled, local account can be used to connect to and access UGREEN NAS storage data through WebDav on a LAN or external network","depth":16,"bounds":{"left":0.48919547,"top":0.31125298,"width":0.2528258,"height":0.011173184},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXButton","text":"Advanced","depth":15,"bounds":{"left":0.4815492,"top":0.34078214,"width":0.031914894,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":false,"is_focused":false,"is_selected":false},{"role":"AXButton","text":"Apply","depth":15,"bounds":{"left":0.7174202,"top":0.782921,"width":0.02825798,"height":0.025538707},"help_text":"","role_description":"button","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXLink","text":"","depth":10,"bounds":{"left":0.7563165,"top":0.22665602,"width":0.007978723,"height":0.01915403},"help_text":"","role_description":"link","subrole":"AXUnknown","is_enabled":true,"is_focused":false,"is_selected":false},{"role":"AXStaticText","text":"","depth":11,"bounds":{"left":0.75764626,"top":0.22984837,"width":0.005319149,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Files","depth":16,"bounds":{"left":0.5696476,"top":0.23064645,"width":0.008976064,"height":0.011173184},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.37799203,"top":0.26256984,"width":0.0034906915,"height":0.007980846},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Personal Folder","depth":21,"bounds":{"left":0.38397607,"top":0.2601756,"width":0.037732713,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.37799203,"top":0.29130086,"width":0.0034906915,"height":0.007980846},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Shared Folder","depth":21,"bounds":{"left":0.38397607,"top":0.28890663,"width":0.033909574,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.37799203,"top":0.3200319,"width":0.0034906915,"height":0.007980846},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"User Folder","depth":21,"bounds":{"left":0.38397607,"top":0.31763768,"width":0.028424202,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":21,"bounds":{"left":0.37799203,"top":0.34876296,"width":0.0034906915,"height":0.007980846},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"Tag","depth":21,"bounds":{"left":0.38397607,"top":0.3463687,"width":0.010472074,"height":0.012769354},"help_text":"","role_description":"text","subrole":"AXUnknown"},{"role":"AXStaticText","text":"","depth":17,"bounds":{"left":0.3773271,"top":0.82521945,"width":0.0066489363,"height":0.015961692},"help_text":"","role_description":"text","subrole":"AXUnknown"}]...
|
-7124413955502653979
|
5257177416020908813
|
click
|
accessibility
|
NULL
|
DXP4800PLUS-B5F8
Inbox (7) - [EMAIL] - Gmail
(56) DXP4800PLUS-B5F8
Inbox (7) - [EMAIL] - Gmail
(56) Inbox | [EMAIL] | Proton Mail
Welcome back
Welcome back
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Western Digital Red Plus 3.5 6TB 5400rpm 256MB SATA3 (WD60EFPX) от 241,72 € (472,76 лв.) Вътрешен хард диск Western Digital - Pazaruvaj.com
Today's Deals
Today's Deals
architecture - screenpipe docs
architecture - screenpipe docs
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Claude Code works better when you stop treating it like a machine - [EMAIL] - Gmail
Screenpipe — Archive
Screenpipe — Archive
SQLite Web: archive.db
SQLite Web: archive.db
SQLite Web: db.sqlite
SQLite Web: db.sqlite
Claude Platform
Claude Platform
Hey @louis030195 Ill check during my - screenpipe.com
Hey @louis030195 Ill check during my - screenpipe.com
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
GitHub - screenpipe/screenpipe: Run agents that work for you based on what you do. AI finally knows what you are doing · GitHub
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
Gong Pricing in 2026: Costs, Plans & Is It Worth It?
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
GLM 5.1 Thinks Strategically, Data-Center Revolt Intensifies, When Helpful LLMs Turn Unhelpful, Humanoid Robots Get to Work - [EMAIL] - Gmail
Gitea Official Website
Gitea Official Website
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
lakylak/screenpipe - screenpipe - Gitea: Git with a cup of tea
New Tab
New Tab
MikroTik · CRS304-4XG-IN
MikroTik · CRS304-4XG-IN
New Tab
Customize sidebar
Open Le Chat Mistral (⌃X)
Open history (⇧⌘H)
Open bookmarks (⌘B)
Bitwarden
13.9
KB/s
18
KB/s
Files
Control Panel
Storage
App Center
Logs
Support
Task Manager
Universal Search
Music
Cloud Drives
Theater
Photos
Online Office
TextEdit
Virtual Machine
Downloads
DLNA
File Version Explorer
Security
Jellyfin-HT
SAN Manager
Vault
Snapshot
Comics
Sync & Backup
Control Panel
Search
Connection & Access
User Management
File Service
Device Connection
Domain/LDAP
Terminal
General
Hardware & Power
Time & Language
Network
Security
Indexing Service
Service
About
Update & Restore
SMB
FTP
NFS
Rsync
WebDAV
Advanced Settings
WebDAV settings
Enable service
Enable service
Once enabled, local account can be used to connect to and access UGREEN NAS storage data through WebDav on a LAN or external network
Advanced
Apply
Files
Personal Folder
Shared Folder
User Folder
Tag
...
|
81650
|