सामग्री पर जाएँ
CADCAMFUN
दस्तावेज़

दस्तावेज़

मार्गदर्शिकाएँ और कार्यप्रवाह

भागों को डिज़ाइन करने, मशीनिंग प्रोग्राम तैयार करने, एकीकरण बनाने, परिवर्तनों की समीक्षा करने और डेस्कटॉप को संचालित करने की पूरी प्रक्रियाएँ।

अंग्रेज़ी से स्वचालित रूप से अनुवादित। अंग्रेज़ी मूल देखें

एक मार्गदर्शक चुनें

  • त्वरित शुरुआत: निर्भरताएँ स्थापित करें, डेस्कटॉप प्रारंभ करें, और उसके डेटाबेस का पता लगाएं।
  • स्थापित करना: एक प्रकाशित डेस्कटॉप बिल्ड डाउनलोड करें, उसका चेकसम जांचें, और इसे स्रोत चेकआउट से अलग बताएं।
  • हिसाब किताब: स्थानीय स्टूडियो में प्रोफ़ाइल, पासवर्ड, एपीआई कुंजी और गिट पहचान संपादित करें।
  • स्थानीय विकास: ब्राउज़र पूर्वावलोकन या वास्तविक साइडकार चलाएं, प्रक्रियाओं को कॉन्फ़िगर करें और स्टार्टअप का निदान करें।
  • योगदान कोड: मॉड्यूल का पता लगाएं, साझा अनुबंध बदलें, और चेक का चयन करें।
  • संकुल: कार्यस्थल की जिम्मेदारियों और सार्वजनिक प्रवेश बिंदुओं को नेविगेट करें।

डेस्कटॉप, साइडकार, कंपेनियन और दस्तावेज़ीकरण साइट में अलग-अलग लॉन्च कमांड और दृढ़ता मॉडल हैं। वह रनटाइम चुनें जो आपके द्वारा बदले जा रहे व्यवहार का अभ्यास करता हो। स्क्रीन पर काम करने के लिए ब्राउज़र फ़िक्स्चर उपयोगी है; डेटाबेस, स्ट्रीमिंग और प्राधिकरण परिवर्तनों के लिए वास्तविक सर्वर की आवश्यकता होती है।

रनटाइम को समझें

कोर पैकेज ज्यामिति, टूलपाथ, पोस्ट और सत्यापन लागू करता है। एपीआई पैकेज साझा स्कीमा, एंडपॉइंट और जेनरेट किए गए क्लाइंट को परिभाषित करता है। साइडकार उन अनुबंधों को रिपॉजिटरी, SQLite, AI, प्लगइन्स, संस्करण नियंत्रण और वर्कफ़्लो सेवाओं के साथ जोड़ता है। डेस्कटॉप उन सेवाओं को स्थानीय एपीआई कनेक्शन और मूल शेल के माध्यम से प्रदान करता है।

iOS साथी एक अलग पिन किए गए HTTPS गेटवे के माध्यम से जुड़ता है। वेब पैकेज एस्ट्रो डॉक्यूमेंटेशन साइट और स्थानीय स्टूडियो एकीकरण चलाता है। ये अलग-अलग क्लाइंट हैं और इन्हें डेटाबेस पथ या सुरक्षा संदर्भ साझा नहीं माना जाना चाहिए।

स्थापित इफ़ेक्ट एपीआई दस्तावेज़ का उपयोग करें

प्रभाव को पिन किया गया है 4.0.0-rc.112. इसका संस्करण-मिलान दस्तावेज़ एक स्थापित कार्यस्थान प्रतिलिपि के अंतर्गत शामिल है, जैसे packages/db/node_modules/effect/ai-docs/src/. सेवाओं, परतों, त्रुटि प्रबंधन, या HTTP कोड को बदलने से पहले इसकी सलाह लें।

सामान्य आदेश

रिपोजिटरी रूट से
bun install
bun run desktop:dev
bun run --filter @cadcamfun/desktop dev
bun run --cwd packages/web start

desktop:dev टौरी खोलने से पहले वास्तविक साइडकार बनाता है और प्रवासन का चरण निर्धारित करता है। डेस्कटॉप dev स्क्रिप्ट Vite को पोर्ट 1420 पर शुरू करती है; साइडकार यूआरएल के बिना यह इन-मेमोरी पूर्वावलोकन एपीआई का उपयोग करता है। जाल start स्क्रिप्ट केवल एस्ट्रो से शुरू होती है; इसका dev स्क्रिप्ट स्थानीय स्टूडियो एपीआई भी शुरू करती है।

कामआज्ञा
कार्यक्षेत्र परीक्षणbun run test
कार्यक्षेत्र टाइपचेकbun run typecheck
डेस्कटॉप टाइपचेकbun run --filter @cadcamfun/desktop typecheck
एपीआई क्लाइंट पुनर्जीवित करेंbun run generate, तब bun run generate:check
डेटाबेस माइग्रेशन उत्पन्न/लागू करेंbun run db:generate, bun run db:migrate
साइडकार और स्टेज संसाधनों को संकलित करेंbun run build:sidecar
डेस्कटॉप फ्रंटएंड बनाएँbun run build:desktop
दस्तावेज़ नेविगेशन की जाँच करेंbun run --cwd packages/web check

माइग्रेशन जेनरेशन स्कीमा परिवर्तनों के लिए है, इंस्टॉलेशन पूर्वावश्यकता के लिए नहीं। डेटाबेस परत एक नया डेटाबेस बनाती है और खोले जाने पर उपलब्ध माइग्रेशन लागू करती है। सीएलआई डेटाबेस पथ चुनने से पहले क्विकस्टार्ट से परामर्श लें।

रूट स्क्रिप्ट को रिपॉजिटरी में परिभाषित किया गया है package.json: typecheck, test, build, build:sidecar, build:desktop, desktop:dev, generate, generate:check, db:generate, और db:migrate.

एक ठोस प्रवाह से प्रारंभ करें

डेस्कटॉप विकास के लिए, एक प्रोजेक्ट खोलें, एक ड्राइंग बनाएं या लोड करें, और उस सीएडी/सीएएम प्रवाह का निरीक्षण करें जिसे आप संशोधित करना चाहते हैं। फीचर स्क्रीन में इसके रूट एडॉप्टर का अनुसरण करें और एपीआई कॉल और हैंडलर का पता लगाएं। सर्वर कार्य के लिए, सत्यापन, स्वामित्व और दृढ़ता कहाँ होती है, इसकी पहचान करने के लिए स्कीमा, हैंडलर, सेवा और रिपॉजिटरी श्रृंखला का उपयोग करें।

सहयोगी कार्य के लिए, एक मूल iOS बिल्ड स्थापित करें, डेस्कटॉप गेटवे सक्षम करें, और उसके QR कोड के माध्यम से युग्मित करें। दस्तावेज़ीकरण कार्य के लिए, एस्ट्रो प्रारंभ करें, परिवर्तित मार्ग खोलें, और टेम्प्लेट और प्रीरेंडर त्रुटियों को पकड़ने के लिए वेब बिल्ड चलाएँ।

स्पष्ट सीमाएँ बनाए रखें

क्रेडेंशियल को स्रोत, उदाहरण, लॉग और ब्राउज़र स्क्रीनशॉट से बाहर रखें। दस्तावेज़ीकरण में प्लेसहोल्डर का उपयोग करें और समर्थित प्रक्रिया या एप्लिकेशन सेटिंग्स के माध्यम से रनटाइम कॉन्फ़िगरेशन प्रदान करें। जेनरेट किए गए क्लाइंट को उनके अनुबंध के साथ सिंक्रनाइज़ रखें, और जेनरेट की गई माइग्रेशन फ़ाइलों को संपादित करने के बजाय स्कीमा से SQL माइग्रेशन उत्पन्न करें।

एकीकरण परीक्षणों और स्थानीय प्रयोगों के लिए एक अलग डिस्पोजेबल डेटा निर्देशिका का उपयोग करें। एक पूर्वावलोकन स्थिरता, सीएलआई माइग्रेशन डेटाबेस, पैकेज्ड एप्लिकेशन डेटाबेस और सहयोगी गेटवे के अलग-अलग उद्देश्य हैं; किसी एक का चयन स्पष्ट होना चाहिए।

सही वर्कफ़्लो ढूंढें

मैं चाहता हूँ…यहाँ से शुरूसफल परिणाम
एक प्रकाशित डेस्कटॉप बिल्ड स्थापित करेंस्थापित करनाचयनित GitHub रिलीज़ से मेल खाने वाला इंस्टॉलर डाउनलोड किया गया है, और इसका चेकसम मेल खाता है SHA256SUMS.
एक मूल डेस्कटॉप चेकआउट चलाएँडेस्कटॉप खोलेंतौरी खुलती है और एक वास्तविक साइडकार स्वास्थ्य का उत्तर देती है; सहेजे गए डेटा को दोबारा खोला जा सकता है.
रस्ट संकलित किए बिना स्क्रीन संपादित करेंविकास प्रक्रियाएं चुनेंVite स्क्रीन को फिक्सचर या स्पष्ट रूप से चयनित एपीआई के साथ पेश करता है।
फ़ोन कनेक्ट करेंiOS साथी को युग्मित करेंनामित डेस्कटॉप डिवाइस पिन किए गए HTTPS के माध्यम से प्रमाणित करता है।
अनुरोध जोड़ें या बदलेंसाझा अनुबंध बदलेंस्कीमा, हैंडलर, क्लाइंट, परीक्षण और दस्तावेज़ीकरण सहमत हैं।
व्यूपोर्ट एम्बेड करेंएक ड्राइंग संपादक को एकीकृत करें और प्लेबैक को नियंत्रित करेंड्राइंग परिवर्तन प्रॉप्स के माध्यम से प्रतिध्वनित होते हैं और पैरेंट स्वयं प्लेबैक समय को नियंत्रित करते हैं।
इंस्टॉलर बनाएंनिर्माण विकल्पों का निरीक्षण करेंसही लक्ष्य संपत्ति, माइग्रेशन, हस्ताक्षर और रिलीज़ इंडेक्स का उत्पादन और सत्यापन किया जाता है।
गुम स्थानीय डेटा की जांच करेंडेटा निर्देशिका का चयन करेंक्लाइंट, साइडकार और निरीक्षण उपकरण इच्छित डेटाबेस पर इंगित करते हैं।

क्रियाओं के अनुक्रम के लिए मार्गदर्शिका और फ़ील्ड और व्यवहार विवरण के लिए लिंक किए गए संदर्भ पृष्ठों का उपयोग करें। पूरे वर्कफ़्लो में रनटाइम विकल्प को स्पष्ट रखें: ब्राउज़र फ़िक्स्चर से नेटिव साइडकार में बदलने से दृढ़ता, क्रेडेंशियल्स, नेटिव क्षमताएं और त्रुटि व्यवहार बदल जाता है।

जानें कि एक चेक क्या स्थापित करता है

अलग-अलग जाँचें अलग-अलग प्रश्नों का उत्तर देती हैं। एक टाइपस्क्रिप्ट कंपाइलर यह साबित कर सकता है कि क्लाइंट कॉल उसके जेनरेट किए गए हस्ताक्षर से मेल खाता है। एक हैंडलर परीक्षण आपूर्ति की गई परतों के तहत अपेक्षित प्रतिक्रिया साबित कर सकता है। एक देशी सिम्युलेटर रन सर्टिफिकेट पिनिंग और ऐप स्टार्टअप का अभ्यास कर सकता है। इनमें से कोई भी स्वतंत्र रूप से यह साबित नहीं करता है कि एक हस्ताक्षरित इंस्टॉलर प्रत्येक समर्थित डिवाइस पर चलता है या टूलपाथ किसी विशिष्ट मशीन के लिए सुरक्षित है।

  1. जांच के लिए उपयोग किए गए सटीक रनटाइम और डेटा निर्देशिका को रिकॉर्ड करें।
  2. उपयोगकर्ता द्वारा उपयोग की जाने वाली सीमा के माध्यम से ऑपरेशन निष्पादित करें।
  3. न केवल सफल टोस्ट का, बल्कि परिणामी कायम स्थिति या निर्यातित कलाकृतियों का भी निरीक्षण करें।
  4. परिवर्तन से प्रभावित विफलता या रद्दीकरण पथ का प्रयोग करें।
  5. किसी भी बाहरी सेवा, हस्ताक्षर, मूल-डिवाइस, या ग्राफ़िक्स कवरेज की रिपोर्ट करें जो अभी भी गायब है।

नियतात्मक एकीकरण कार्य के लिए, पृथक SQLite निर्देशिकाओं और स्क्रिप्टेड/ऑफ़लाइन AI फिक्स्चर का उपयोग करें। प्रदाता-विशिष्ट व्यवहार के लिए, उपयुक्त क्रेडेंशियल्स के साथ कॉन्फ़िगर किए गए प्रदाता का अलग से उपयोग करें। इन गाइडों में उदाहरण अनुरोध समर्थित आकृतियों का वर्णन करते हैं; टाइमस्टैम्प, पहचानकर्ता, पोर्ट और क्रेडेंशियल प्रति रन भिन्न होते हैं।

व्यावहारिक मार्गदर्शिकाएँ

ये मार्गदर्शिकाएँ एप्लिकेशन और उसके एपीआई के माध्यम से संपूर्ण संचालन का अनुसरण करती हैं। प्रत्येक में आवश्यक इनपुट, संबंधित स्थिति परिवर्तन और निरीक्षण में विफलता के मामले शामिल हैं। सटीक फ़ील्ड और प्रतिक्रिया अनुबंधों के लिए अंतर्निहित मॉडल और एपीआई संसाधन पृष्ठों के लिए सबसिस्टम संदर्भों का उपयोग करें।

डिजाइन और निर्माण

ग्राहक और एक्सटेंशन

एपीआई क्लाइंट और एसडीके

कैडकैम.मेक या एपीक्लाइंट.लेयर का उपयोग उनके वास्तविक इनपुट आकार, सादे परिणाम, घोषित और परिवहन त्रुटियों, रद्दीकरण, हेडर, स्ट्रीम और पीढ़ी सीमा के साथ करें।

एआई स्ट्रीमिंग और रिकवरी

प्रोजेक्ट-स्कोप्ड एआई सत्र शुरू करें और जारी रखें, टाइप किए गए ईवेंट का उपभोग करें, अनुमतियों और प्रश्नों का जवाब दें, काम को कतारबद्ध करें या रद्द करें, और कनेक्शन हानि के बाद पुनर्प्राप्त करें।

एक एप्लिकेशन प्लगइन लेखक

इसके मेनिफेस्ट और मॉड्यूल निर्यात से एक समर्थित एआई: टूल प्लगइन बनाएं, क्षमताओं को अनुदान दें, तर्कों को मान्य करें, होस्ट सीमाओं को संभालें, और सक्रियण से रजिस्ट्री इंस्टॉलेशन को अलग करें।

संचालन एवं पुनर्प्राप्ति

शाखाएँ, समीक्षाएँ और कार्यप्रवाह

एक प्रोजेक्ट प्रतिबद्ध करें, प्रस्ताव शाखाएँ बनाएँ, संरचनात्मक अंतरों का निरीक्षण करें, पुल अनुरोधों की समीक्षा करें और मर्ज करें, संस्करण वर्कफ़्लो YAML, प्रेषण जाँचें, और दूरस्थ सिंक्रनाइज़ेशन को सुरक्षित रूप से संभालें।

एक साथी को जोड़ें और प्रबंधित करें

डेस्कटॉप HTTPS गेटवे सक्षम करें, डिवाइस पेयरिंग जारी करें, नेटिव iOS बिल्ड को सर्टिफिकेट पिनिंग के साथ कनेक्ट करें, कनेक्टिविटी का निदान करें और डिवाइस एक्सेस रद्द करें।

डेस्कटॉप विफलताओं का निदान करें

मूल स्टार्टअप और तत्परता का पता लगाएं, नकली और वास्तविक साइडकारों को अलग करें, चयनित डेटाबेस और लॉग का पता लगाएं, एपीआई त्रुटियों का निदान करें, और संग्रहीत और सहेजे न गए स्थिति को भ्रमित किए बिना पुनर्प्राप्त करें।

प्रकाशित बिल्ड में नये हैं? पर शुरू करें स्थापित करना. चेकआउट में नए हैं? के साथ शुरू त्वरित शुरुआत. इसके HTTP व्यवहार में नया? उपयोग कैप्चर की गई प्रतिक्रियाओं के साथ पूर्वाभ्यास, फिर टाइप किया गया क्लाइंट या संसाधन चुनें संपूर्ण एपीआई संदर्भ.

एक संपूर्ण कार्य पूरा करें

एक सहेजा गया डिज़ाइन बनाएं

एक प्रोजेक्ट बनाएं और लौटाए गए पहचानकर्ता को बनाए रखें। उपयुक्त प्रोजेक्ट-स्कोप संग्रह के माध्यम से इसका चित्र या घटक बनाएं। सीएडी कार्यक्षेत्र में ज्यामिति संपादित करें, उस संसाधन की वास्तविक फीचर कार्रवाई के माध्यम से सहेजें, और यह स्थापित करने के लिए सहेजे गए संसाधन को फिर से खोलें कि इच्छित दस्तावेज़ कायम था। संपादक का वर्तमान चयन और कमांड इतिहास संग्रहीत ड्राइंग का विकल्प नहीं है।

जब दो क्लाइंट एक ही डेटा को संपादित करते हैं, तो यह मानने के बजाय कि प्रत्येक संसाधन में तुलना-और-स्वैप सुरक्षा है, एंडपॉइंट के वर्तमान अद्यतन शब्दार्थ का पालन करें। को पढ़िए परियोजना जीवनचक्र मार्गदर्शिका ड्राइंग/घटक अंतरों, संसाधन संघों, पहुंच जांच और सीमाओं को पुनर्स्थापित करने के लिए।

एक विनिर्माण परिणाम उत्पन्न करें

ज्यामिति, प्लेसमेंट, स्टॉक, सामग्री, मशीन, उपकरण और संचालन क्रम कैप्चर करें। उन स्पष्ट इनपुट के साथ पीढ़ी चलाएँ। परिणाम के मुद्दों और लागू साक्ष्यों का निरीक्षण करें; सत्यापित करें कि प्रोग्राम और एनसी इच्छित स्नैपशॉट के अनुरूप हैं। सहेजना एक अलग ऑपरेशन है और सहेजे जा रहे सटीक बाइट्स के अनुरूप एक पोर्टेबल दस्तावेज़ बनाए रखना चाहिए।

एक परिवर्तित कटर, स्टॉक, मॉडल या कार्य फ़्रेम मूल्यांकन किए जा रहे कार्य को बदल देता है। एनसी को संपादित करने के बाद किसी पुराने आर्टिफैक्ट का पुन: उपयोग करने से उसके साक्ष्य नए पाठ में स्थानांतरित नहीं होते हैं। देशी विनिर्माण गाइड तैयारी, निर्माण, दावे, दृढ़ता सत्यापन और एक एकीकृत पोस्ट किए गए प्रोग्राम और संयोजित संचालन अनुभागों के बीच अंतर बताता है।

एक सहायक को एकीकृत करें

डेस्कटॉप पर एक प्रदाता को कॉन्फ़िगर करें और बातचीत शुरू करने से पहले उसकी स्थिति सत्यापित करें। प्रोजेक्ट और सत्र की पहचान को सुरक्षित रखें, घटनाओं का क्रमिक रूप से उपभोग करें, और स्वीकृत सत्र नियंत्रणों के माध्यम से अनुमति और प्रश्न उत्तर लागू करें। डिस्कनेक्ट होने पर, उस अनुरोध को दोबारा भेजने से पहले वर्तमान स्थिति को पुनर्प्राप्त करें जिसने प्रोजेक्ट को संपादित किया हो सकता है।

The स्ट्रीमिंग गाइड पुनर्प्राप्ति, रद्दीकरण और अनुवर्ती प्रवेश को कवर करता है। ग्राहक मार्गदर्शक बताता है कि प्रॉमिस परिणाम मान, फेंके गए HTTP निकाय, प्रभाव त्रुटियां और स्ट्रीम पूर्णता को एक सार्वभौमिक लिफाफे के रूप में क्यों नहीं संभाला जा सकता है।

किसी परिवर्तन को रिकॉर्ड करें और उसकी समीक्षा करें

कार्यशील संसाधन को बचाएं, परियोजना की स्थिति का निरीक्षण करें, और इच्छित शाखा पर इच्छित स्थिति दर्ज करें। संरचनात्मक अंतर की समीक्षा करें और एक स्थानीय पुल अनुरोध खोलें जब परिवर्तन को सीधे अपनाने के बजाय प्रस्तावित किया जाना चाहिए। विलय से पहले अवरुद्ध समीक्षा निर्णयों और विवादों का समाधान करें।

प्रोजेक्ट के साथ संस्करण वर्कफ़्लो परिभाषाएँ, फिर प्रत्येक रन के चयनित कमिट और व्यक्तिगत चेक आउटपुट का निरीक्षण करें। एक सफल रन जिसने अपनी मशीनिंग जांच को छोड़ दिया, वह मशीनिंग साक्ष्य प्रदान नहीं करता है। को पढ़िए शाखाएँ और कार्यप्रवाह मार्गदर्शिका लेखन चरण को स्वचालित करने या दूरस्थ दर्पण को कॉन्फ़िगर करने से पहले।

दूसरा क्लाइंट संचालित करें

साथी गेटवे को जानबूझकर सक्षम करें, एक व्यक्तिगत रूप से नामित डिवाइस पेयरिंग बनाएं, और एक मूल बिल्ड कनेक्ट करें जिसमें प्रमाणपत्र पिनिंग शामिल है। पूर्ण डेस्कटॉप पता, फ़िंगरप्रिंट और डिवाइस टोकन को युग्मित कनेक्शन के रूप में बनाए रखें। यह मानने से पहले कि फ़ोन केवल पढ़ने के लिए या अप्रतिबंधित है, वर्तमान रूट नीति पढ़ें।

जब पहुंच समाप्त हो जाए, तो डिवाइस को डेस्कटॉप से रद्द कर दें; केवल फ़ोन से कनेक्शन हटाने से सर्वर-साइड टोकन रद्द नहीं होता है। युग्मन मार्गदर्शिका नेटवर्क निदान, मूल परिवहन उपलब्धता, प्रमाणपत्र पहचान और टोकन निरस्तीकरण को अलग करता है।

कार्य और समय के अनुसार मार्गदर्शन

मार्गदर्शकआप करेंगेज़रूरत
स्थापित करनाएक प्रकाशित डेस्कटॉप बिल्ड डाउनलोड करेंडाउनलोड पृष्ठ
हिसाब किताबप्रोफ़ाइल, पासवर्ड, कुंजियाँ और git पहचान संपादित करेंस्थानीय स्टूडियो
त्वरित शुरुआतडेस्कटॉप स्थापित करें, परीक्षण करें और खोलेंBun, Rust
स्थानीय विकासप्रत्येक प्रक्रिया को अपने आप चलाएँ और सही जाँच चुनेंएक क्लोन
एपीआई टूरकर्ल के साथ वास्तविक अनुरोध करें और प्रतिक्रियाएँ देखेंएक चलती हुई साइडकार
एपीआई क्लाइंटप्रॉमिस एसडीके और इफ़ेक्ट क्लाइंट का उपयोग करें, त्रुटियों और स्ट्रीम को संभालेंTypeScript
परियोजना जीवनचक्रप्रोजेक्ट बनाएं, सहेजें, दोबारा खोलें और संस्करण बनाएंएक चलती हुई साइडकार
देशी विनिर्माणएक सत्यापित प्रोग्राम बनाएं और उसे सहेजेंएक चलती हुई साइडकार
एआई स्ट्रीमिंगसहायक घटनाओं का उपभोग करें और सत्र पुनर्प्राप्त करेंएक मॉडल कुंजी
प्लगइन संलेखनएक प्लगइन लिखें और उसका परीक्षण करेंTypeScript
परियोजना का इतिहासशाखा लगाना, प्रतिबद्ध करना, समीक्षा करना और विलय करनापरियोजना
साथी जोड़ीiOS ऐप को पेयर करेंएक आईफोन
डेस्कटॉप समस्या निवारणस्टार्टअप और अद्यतन समस्याओं का निदान करेंडेस्कटॉप ऐप
योगदानएक समीक्षा योग्य परिवर्तन तैयार करेंएक क्लोन

3डी में

गाइड क्या व्यायाम करते हैं कक्षा में खींचें · ज़ूम करने के लिए स्क्रॉल करें · पैन करने के लिए दाईं ओर खींचें
Processes at run time. The Tauri shell spawns the sidecar and waits for its {”event”:”ready”,”port”:N} line on stdout (sidecar.rs); the webview then talks HTTP to 127.0.0.1 on that port with the bearer token. The sidecar owns the SQLite database, the embedded nikcli AI host (CADCAMFUN_AI_HOST=nikcli, the default) and plugins; the mobile app reaches it through companion pairing.