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

दस्तावेज़

मोबाइल साथी

प्रमाणपत्र पिनिंग, प्रोजेक्ट समीक्षा और साझा सहायक सत्रों के साथ युग्मित डेस्कटॉप के लिए एक iOS क्लाइंट।

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

मंच और क्षमताएं

apps/mobile एक एक्सपो एसडीके 57 एप्लिकेशन है जो रिएक्ट नेटिव 0.86.3, रिएक्ट 19.2, एक्सपो राउटर, नेटिवविंड, रीएनिमेटेड और जेस्चर हैंडलर का उपयोग करता है। इसका समर्थित पिन्ड नेटवर्क ट्रांसपोर्ट स्थानीय द्वारा स्विफ्ट में कार्यान्वित किया गया है companion-net मॉड्यूल. iOS बंडल पहचानकर्ता है com.cadcamfun.mobile.

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

मूल iOS बिल्ड का उपयोग करें

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

अनुप्रयोग संरचना

एक्सपो राउटर कनेक्शन स्क्रीन को प्रमाणित एप्लिकेशन टैब से अलग करता है। app/connect.tsx युग्मन इनपुट को संभालता है, app/pair.tsx गहरे लिंक स्वीकार करता है, और app/(app) इसमें प्रोजेक्ट, सहायक, गतिविधि और सेटिंग्स शामिल हैं। प्रोजेक्ट स्क्रीन में अवलोकन/इतिहास/पुल/वर्कफ़्लो पैनल, प्रतिबद्ध विवरण और पुल-अनुरोध समीक्षा शामिल हैं।

  • components/: पुन: प्रयोज्य नियंत्रण, प्रोजेक्ट पैनल, सहायक प्रतिलेख, और कनेक्शन यूआई।
  • lib/client.ts: इंजेक्टेड ट्रांसपोर्ट पर टाइप किया गया क्लाइंट; एपीआई प्रकार सर्वर रनटाइम के बिना आयात किए जाते हैं।
  • lib/pairing.ts, native.ts, और storage.ts: युग्मन सत्यापन, परिवहन चयन, और कायम क्रेडेंशियल्स।
  • lib/sse.ts, live-events.ts, और chat-log.ts: स्ट्रीम पार्सिंग, लाइव सब्सक्रिप्शन और ट्रांसक्रिप्ट स्थिति।
  • modules/companion-net/: एक्सपो मॉड्यूल और स्विफ्ट पिन्ड HTTPS कार्यान्वयन।

परिवहन और प्रवेश द्वार का दायरा

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

फ़ोन एक प्रतिसंहरणीय डिवाइस टोकन भेजता है। गेटवे अपने SHA-256 हैश को संग्रहीत करता है, एक अनुमति-सूची के विरुद्ध अनुरोध विधि/पथ की जांच करता है, और डेस्कटॉप टोकन का उपयोग करके लूपबैक एपीआई के लिए स्वीकृत अनुरोधों को अग्रेषित करता है। फ़ोन को वह लॉन्च टोकन प्राप्त नहीं होता है. अमान्य प्रमाणीकरण रिटर्न 401, अस्वीकृत मार्ग रिटर्न 403, बार-बार विफल प्रमाणीकरण रिटर्न 429, और अनुपलब्ध अपस्ट्रीम रिटर्न 502।

Allowed families include project reads; version-control, pull-request, and workflow endpoints; project events; notifications; assistant status/models/agents; streaming chat; queue/abort; permissions; and session state/control. Files, credentials, plugins, billing, gateway administration, and GitHub remote/push/pull endpoints are excluded.

डिवाइस एक्सेस में लेखन संचालन शामिल है

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

गेटवे सीमाएँ विफल प्रमाणीकरण प्रयास: 60 सेकंड के भीतर एक आईपी पते से दस असफल वाहक प्रयासों के बाद, उस पते से आगे के अनुरोध HTTP 429 प्राप्त होते हैं जब तक कि विंडो समाप्त नहीं हो जाती (apps/sidecar/src/services/companion-gateway.ts).

सहायक सत्र और ऑफ़लाइन संदेश

साथी चैट अनुरोध भेजता है POST /api/ai/chat/stream और सर्वर द्वारा भेजे गए ईवेंट को पार्स करता है। एक सत्र पहचानकर्ता डेस्कटॉप वार्तालाप को जारी रखने की अनुमति देता है। ग्राहक संदेशों को संचालित या कतारबद्ध कर सकता है, एक मोड़ को रद्द कर सकता है, प्रश्नों का उत्तर दे सकता है और अनुमति अनुरोधों का उत्तर दे सकता है। डेस्कटॉप पर मॉडल प्रदाता कॉन्फ़िगर करें; उपयोग से पहले फ़ोन AI स्थिति के बारे में पूछता है।

यदि कोई स्ट्रीम बिना टर्मिनल के समाप्त हो जाती है done या error फ़्रेम और रद्द नहीं किया गया, क्लाइंट अपूर्ण कनेक्शन की रिपोर्ट करता है। रद्दीकरण और पूर्ण होने पर मूल परिवहन अपना स्ट्रीम हैंडल बंद कर देता है। नेटिव डिकोडिंग बाइट खंडों के बीच अपूर्ण यूटीएफ-8 स्केलर को सुरक्षित रखता है।

जो सहायक संदेश नहीं भेजे जा सकते, वे लगातार कतार में प्रवेश कर सकते हैं। यह अधिकतम 50 प्रविष्टियों को बरकरार रखता है, पूर्ण होने पर सबसे पुरानी को हटा देता है, और अग्रभूमि और कनेक्टिविटी पुनर्प्राप्ति पर पुनः प्रयास करता है। विफल प्रविष्टियाँ कतारबद्ध रहती हैं। यह कतार बाद में निष्पादन के लिए संदेशों को संग्रहीत करती है; यह प्रोजेक्ट ज्यामिति या ऑफ़लाइन एआई रनटाइम की ऑफ़लाइन प्रतिलिपि नहीं है।

बनाएं और चलाएं

रिपोजिटरी रूट से
bun install
bun run --cwd apps/mobile test
bun run --cwd apps/mobile typecheck
bun run --cwd apps/mobile build
bun run --cwd apps/mobile ios
bun run --cwd apps/mobile ios:release --device

बिल्ड कमांड iOS जावास्क्रिप्ट बंडल को निर्यात करता है apps/mobile/dist; यह आईपीए उत्पन्न नहीं करता है. iOS रन कमांड के लिए macOS, Xcode और CocoaPods की आवश्यकता होती है। डिवाइस इंस्टॉलेशन के लिए एक विश्वसनीय डिवाइस, डेवलपर मोड और जेनरेट किए गए Xcode प्रोजेक्ट के लिए कॉन्फ़िगर की गई Apple साइनिंग टीम की भी आवश्यकता होती है। native:generate पॉड्स इंस्टॉल किए बिना iOS के लिए एक्सपो प्रीबिल्ड चलाता है। रोजमर्रा के काम के लिए, start (उर्फ dev) एक्सपो डेवलपमेंट-क्लाइंट बंडलर चलाता है, ios:dev इसे लोकलहोस्ट पर प्रारंभ करें और iOS सिम्युलेटर खोलें, ios:build बंडलर शुरू किए बिना डिबग ऐप संकलित करता है, और web एक्सपो वेब लक्ष्य प्रारंभ करता है। test स्क्रिप्ट चलती है bun test test अंदर apps/mobile.

.github/workflows/ci.yml साथी टाइपचेकिंग, तर्क परीक्षण और जावास्क्रिप्ट निर्यात को परिभाषित करता है। .github/workflows/ios.yml xcode प्रोजेक्ट बनाता है, एक अहस्ताक्षरित रिलीज़ सिम्युलेटर ऐप बनाता है, इसे लाइव साइडकार के साथ जोड़ता है, प्रमाणित प्रोजेक्ट लिस्टिंग की जाँच करता है, और एक स्क्रीनशॉट कैप्चर करता है। ये कॉन्फ़िगर किए गए चेक भौतिक-डिवाइस, हस्ताक्षर, टेस्टफ़्लाइट, या वास्तविक-प्रदाता स्वीकृति स्थापित नहीं करते हैं।

भंडारण और डिवाइस सुरक्षा

देशी iOS पर, पेयरिंग क्रेडेंशियल एक्सपो सिक्योरस्टोर के साथ संग्रहीत किए जाते हैं। युग्मन प्रविष्टि का उपयोग करता है WHEN_UNLOCKED_THIS_DEVICE_ONLY. ऑफ़लाइन कतार प्रविष्टियाँ और सत्र-देखे गए मार्कर भी सिक्योरस्टोर का उपयोग करते हैं। ब्राउज़र फ़ॉलबैक विकास के लिए स्थानीय संग्रहण का उपयोग करता है।

ऐप बायोमेट्रिक क्षमता और उपयोग पर सवाल उठाता है expo-local-authentication स्थानीय प्रमाणीकरण के लिए, सिस्टम पासकोड फ़ॉलबैक सक्षम होने के साथ। बायोमेट्रिक यूआई गेटवे के सर्वर-साइड रूट अनुमतियों को नहीं बदलता है। डिवाइस निरस्तीकरण को युग्मित डेस्कटॉप द्वारा नियंत्रित किया जाता है।

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

परियोजना समीक्षा वर्कफ़्लो

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

सभी परिवर्तन डेस्कटॉप पर निष्पादित होते हैं. नेटवर्क रुकावट, निरस्त प्राधिकरण, या रुका हुआ डेस्कटॉप नए सर्वर को काम करने से रोकता है; स्थानीय रूप से कतारबद्ध सहायक संदेशों को बाद में पुनः प्रयास किया जाता है।

क्लाइंट इंटरफ़ेस

CompanionClient ए स्वीकार करता है Transport with JSON request and text-stream methods. It exposes project reads; VCS status, history, diff, commit, branch, checkout, and restore; pull requests and reviews; workflow runs and dispatch; AI status/models/agents; session control; notifications; and project event streams.

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

फ़ोन को युग्मित करें

  1. डेस्कटॉप पर, सेटिंग्स और उसका मोबाइल साथी पैनल खोलें, या /settings/companion, और गेटवे चालू करें।
  2. एक नामित डिवाइस पेयरिंग बनाएं और क्यूआर कोड प्रदर्शित करें। लिंक में HTTPS होस्ट उम्मीदवार, एक डिवाइस टोकन और प्रमाणपत्र फिंगरप्रिंट शामिल हैं।
  3. iOS पर, QR कोड को स्कैन करें या पेस्ट करें cadcamfun://pair जोड़ना। संकेत मिलने पर स्थानीय-नेटवर्क पहुंच की अनुमति दें।
  4. ऐप लिंक को मान्य करता है, विज्ञापित मेजबान उम्मीदवारों की दौड़ करता है, और पहला सफल स्वास्थ्य कनेक्शन रखता है।
  5. पुष्टि करें कि डिवाइस डेस्कटॉप सेटिंग्स में दिखाई देता है। इसकी पहुंच हटाने के लिए डेस्कटॉप की निरस्त कार्रवाई का उपयोग करें।

मेज़बान उम्मीदवारों में उपयुक्त निजी आईपीवी4 और ओवरले-नेटवर्क पते शामिल हैं; गेटवे अधिकतम छह खोजे गए पतों पर विज्ञापन देता है। वर्तमान श्रोता आईपीवी 4 है, इसलिए खोजे गए आईपीवी 6 पते का विज्ञापन नहीं किया जाता है। एक वीपीएन या ओवरले नेटवर्क को स्थानीय नेटवर्क से दूर उपयोग के लिए पहले से ही रूटिंग प्रदान करनी होगी; युग्मन से रिले या वीपीएन नहीं बनता है।

प्रमाणपत्र पिन करना

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

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

एक कनेक्शन का निदान करें

  • कोई देशी परिवहन नहीं: स्थानीय मॉड्यूल युक्त iOS डेवलपमेंट या रिलीज़ बिल्ड स्थापित करें।
  • कोई पहुंच योग्य होस्ट नहीं: स्थानीय-नेटवर्क अनुमति, डेस्कटॉप फ़ायरवॉल, विज्ञापित पता, गेटवे पोर्ट और नेटवर्क रूटिंग की जाँच करें।
  • 401: डिवाइस टोकन अमान्य या निरस्त है; एक ताज़ा जोड़ी बनाएं.
  • 403: समापन बिंदु सहयोगी अनुमति-सूची के बाहर है।
  • प्रमाणपत्र बेमेल: वर्तमान डेस्कटॉप प्रमाणपत्र के साथ पुनः युग्मित करें।
  • सहायक अनुपलब्ध: डेस्कटॉप प्रदाता कॉन्फ़िगरेशन की जाँच करें और क्या साइडकार चल रहा है।

फ़ोन सेटिंग और स्थानीय स्थिति

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

UI प्राथमिकताएँ AsyncStorage के अंतर्गत रहती हैं cadcamfun.ui.v1; क्रेडेंशियल्स, कतारबद्ध संदेशों और दृश्य-सत्र मार्करों को जोड़ना सिक्योरस्टोर का उपयोग करता है। यूआई स्टोर एक युग्मित डेस्कटॉप के लिए चयनित प्रोजेक्ट और प्रति प्रोजेक्ट अंतिम सत्र को याद रखता है। डेस्कटॉप पहचान बदलने से याद किया गया प्रोजेक्ट/सत्र मैपिंग साफ़ हो जाता है, इसलिए इसे किसी असंबंधित सर्वर के विरुद्ध पुन: उपयोग नहीं किया जाता है।

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

गेटवे प्रशासन उदाहरण

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

विकास गेटवे का निरीक्षण करें और सक्षम करें
CADCAM_URL=http://127.0.0.1:43111
CADCAM_TOKEN=local-development-token

curl --fail-with-body "$CADCAM_URL/api/companion"   -H "Authorization: Bearer $CADCAM_TOKEN"

curl --fail-with-body -X POST "$CADCAM_URL/api/companion/enable"   -H "Authorization: Bearer $CADCAM_TOKEN"   -H 'Content-Type: application/json'   -d '{"port":18443}'

स्थिति प्रतिक्रिया में शामिल है enabled, एक अशक्त port, एक अशक्त fingerprint, सुझाव दिया host, और devices. सेवा 1024 से 65535 तक स्पष्ट पोर्ट स्वीकार करती है। पहले से उपयोग में आने वाला पोर्ट श्रोता को प्रारंभ करने में विफल रहता है; दूसरा पोर्ट चुनें और पेयरिंग एड्रेस दोबारा जेनरेट करें।

एक नामित डिवाइस पेयरिंग बनाएं
curl --fail-with-body -X POST "$CADCAM_URL/api/companion/pair"   -H "Authorization: Bearer $CADCAM_TOKEN"   -H 'Content-Type: application/json'   -d '{"name":"Development iPhone","host":"192.168.1.20"}'

उदाहरण होस्ट को उस पते से बदलें जिस पर फ़ोन रूट कर सकता है। सफल युग्मन निर्माण डिवाइस के साथ HTTP 201 लौटाता है id और एक प्रत्यय-पत्र link. काटे गए नाम में 1–60 अक्षर होने चाहिए। उस लिंक को निजी तौर पर स्कैन/पेस्ट करें; इसे बग रिपोर्ट में कॉपी न करें. टोकन बनाने से गेटवे स्वचालित रूप से चालू नहीं होता है।

पहुंच हटाने के लिए, भेजें DELETE /api/companion/devices/<id> डेस्कटॉप प्राधिकरण का उपयोग करना। सभी नए गेटवे ट्रैफ़िक को रोकने के लिए, भेजें POST /api/companion/disable. प्रत्येक अनुरोध पर डिवाइस हैश की जाँच की जाती है, इसलिए बाद के अनुरोधों पर निरस्त टोकन अस्वीकार कर दिए जाते हैं।

संदर्भ खोए बिना पुनर्प्राप्ति

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

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

कार्यान्वयन एंकर: app/(app)/settings.tsx, components/layout/AppLockCoordinator.tsx, lib/store.ts, lib/server.tsx, और lib/offline-queue.ts.

गेटवे अनुमति-सूची

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

तरीकोंपथ पैटर्नउद्देश्य
GET/api/healthपहुंच योग्यता जांच.
GET/api/projects, /api/projects/:idप्रोजेक्ट सूची और हेडर.
प्राप्त करें, पोस्ट करें/api/projects/:id/vcs/* (के अलावा remote, push, pull), /pulls/*, /actions/*इतिहास, पुल अनुरोध, समीक्षाएँ और वर्कफ़्लो चलता है। GitHub सिंक डेस्कटॉप पर रहता है क्योंकि इसके लिए स्वामी के GitHub टोकन की आवश्यकता होती है।
GET/api/projects/:id/eventsइतिहास, वर्कफ़्लो और सहायक गतिविधि की लाइव एसएसई स्ट्रीम; फ़ोन का एकमात्र पुश चैनल.
प्राप्त करें, पोस्ट करें, डालें, हटाएँ/api/notifications, /mark-all-read, /:idपढ़ें, पढ़ा हुआ चिह्नित करें और सूचनाएं हटाएं।
GET/api/ai/status, /models, /agentsसहायक खोज.
POST/api/ai/chat/stream, chat/abort, chat/queue, permission/reply, sessions/state, sessions/controlसहायक सत्र.

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

फ़ोन क्या संग्रहीत करता है

वस्तुभंडारणटिप्पणियाँ
गेटवे मूलSecureStoreपसंदीदा होस्ट प्लस पेयरिंग लिंक से विकल्प।
डिवाइस टोकनसिक्योरस्टोर, WHEN_UNLOCKED_THIS_DEVICE_ONLYगेटवे के लिए एक बियरर हेडर के अलावा डिवाइस को कभी नहीं छोड़ता।
प्रमाणपत्र फ़िंगरप्रिंटSecureStoreप्रत्येक कनेक्शन पर गेटवे के प्रमाणपत्र के साथ तुलना की गई।
ऑफ़लाइन कतार, सत्र मार्करSecureStoreऑफ़लाइन रहते हुए बनाए गए संदेश और सत्रों की अंतिम बार देखी गई स्थिति।

ब्राउज़र डेवलपमेंट बिल्ड में, वही डेटा स्थानीय स्टोरेज में वापस आ जाता है, जो एन्क्रिप्टेड नहीं होता है। इसका प्रयोग केवल थ्रोअवे पेयरिंग के साथ ही करें।

स्क्रीन

रूट फ़ाइलस्क्रीन
app/index.tsxप्रवेश: कोई युग्मन नहीं → युग्म स्क्रीन; युग्मित → परियोजनाएँ
app/connect.tsx, app/pair.tsxपेयरिंग: क्यूआर कोड को कैमरे से स्कैन करें या लिंक पेस्ट करें
app/(app)/projects/index.tsxपरियोजना सूची
app/(app)/projects/[id].tsxएक परियोजना
app/(app)/projects/[id]/commit/[oid].tsxएक प्रतिबद्धता और उसके परिवर्तन
app/(app)/projects/[id]/pulls/[number].tsxएक पुल अनुरोध: समीक्षा करें और विलय करें
app/(app)/assistant.tsxसहायक चैट
app/(app)/activity.tsxसजीव गतिविधि
app/(app)/settings.tsxकनेक्शन और डिवाइस सेटिंग्स

रूट एक्सपो राउटर फ़ाइल कन्वेंशन का उपयोग करते हैं: (app) एक समूह है जो यूआरएल सेगमेंट जोड़े बिना एक लेआउट साझा करता है, और [id] एक पैरामीटर है.

ऑफ़लाइन सहायक कतार

जब डेस्कटॉप तक नहीं पहुंचा जा सकता, तो सहायक में टाइप किया गया संदेश गुम होने के बजाय फोन पर कतारबद्ध हो जाता है:

नियमकीमत
कहाँसिक्योरस्टोर, इसलिए एक मारा गया ऐप कतार में रहता है
क्या संग्रहीत हैprojectId, text, वैकल्पिक sessionId, agent, mode (सामान्य, सीएडी, कैम, जीकोड, टूलपाथ; डिफ़ॉल्ट सामान्य) और queuedAt
क्षमता50 प्रविष्टियाँ; सबसे पुराने को पहले गिरा दिया जाता है
जब यह बह जाता हैजब ऐप संग्रहीत जोड़ी के साथ अग्रभूमि पर लौटता है
कैसेप्रत्येक प्रविष्टि एक ताज़ा स्ट्रीमिंग मोड़ खोलती है और तब तक पढ़ी जाती है done; एक error घटना या पृष्ठभूमि संक्रमण इसे कतारबद्ध रखता है
प्रतिक्रियाएक टोस्ट: "पंक्तिबद्ध संदेश भेजा गया" या "एन पंक्तिबद्ध संदेश भेजा गया"

केवल कनेक्टिविटी विफलताएँ ही संदेश को कतारबद्ध करती हैं। किसी प्रेषण को ऑफ़लाइन माना जाता है जब ग्राहक स्थिति 0 की रिपोर्ट करता है, या त्रुटि पाठ में नेटवर्क विफलता, टाइमआउट, अस्वीकृत कनेक्शन या इसी तरह का उल्लेख होता है; HTTP और व्यावसायिक त्रुटियाँ ("अनुरोध ... विफल रहा ...") पंक्तिबद्ध के बजाय दिखाई जाती हैं।

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.