مواد پر جائیں

رگز

صرف حقائق۔ ان کے پیچھے کا ماڈل جاننے کے لیے رگز اور انکلوژرز پڑھیں؛ مشین کھولنے کے لیے گائیڈ پر چلیں۔

سطح چلاتا ہے بیک اینڈ قدر محدود ایگریس
ٹرمنل (exec) VM کے exec چینل پر ایک شیل microVM smolvm ہاں
براؤزر ہیڈ لیس Chromium (CDP)، Firefox (WebDriver BiDi) یا WebKit (W3C WebDriver) microVM smolvm ہاں
کمپیوٹر X11 ڈیسک ٹاپ: اِن پٹ ہائپر وائزر کے ذریعے، کیپچر گیسٹ ایجنٹ کے ذریعے QEMU qemu-hvf (macOS)، qemu-kvm (Linux)، qemu-tcg (بغیر تیز رفتاری والا فالبیک، کبھی خودکار طور پر منتخب نہیں ہوتا) ہاں
Android ADB کے ذریعے Android گوگل کا ایمولیٹر android-emulator نہیں — ایمولیٹر اپنی نیٹ ورکنگ خود سنبھالتا ہے
iOS WebDriverAgent کے ذریعے iOS سمیولیٹر CoreSimulator ios-simulator نہیں — نیٹ ورکنگ میزبان Mac کے پیچھے چلتی ہے

ٹرمنل اور computer_use سطح ایک ہی computer سطح قدر رکھتے ہیں؛ ٹرمنل اپنے exec امیج مارکر سے ممتاز ہوتا ہے اور اسے کبھی چلانے کے قابل ڈیسک ٹاپ کے طور پر دوبارہ استعمال نہیں کیا جاتا (اور نہ اس کے برعکس)۔ ایک گفتگو ایک ہی ٹرمنل مشین دوبارہ استعمال کرتی ہے۔

انجن قدر پروٹوکول لائیو ویو اسٹل تصاویر
Chromium chromium (ڈیفالٹ) Chrome DevTools Protocol اسکرین کاسٹ — صفحہ دوبارہ پینٹ ہوتے ہی براؤزر فریم پش کرتا ہے JPEG
Firefox firefox WebDriver BiDi پول کی گئیں اسٹل تصاویر (BiDi میں اسکرین کاسٹ نہیں)، زیادہ سے زیادہ 6 fps JPEG
WebKit webkit W3C WebDriver (کلاسک) پول کی گئیں اسٹل تصاویر، میزبان کے ffmpeg سے ٹرانس کوڈ کردہ PNG

ایک رگ اپنی پوری عمر میں ایک ہی انجن چلاتی ہے۔ ایک گفتگو میں فی انجن ایک رگ رکھی جا سکتی ہے، اور یہی شانہ بہ شانہ موازنہ ممکن بناتا ہے: “Firefox (VM)” کے ساتھ “Chromium (VM)” کھولنا دو مشینیں ہیں، اور ایک کو بند کرنے سے دوسری چلتی رہتی ہے۔

engine کو rig.open یا browser_use ٹول کو دیں۔ نامعلوم نام ڈیفالٹ کرنے کے بجائے مسترد کر دیا جاتا ہے — ایک براؤزر مانگنا اور خاموشی سے کوئی مختلف مل جانا مطابقت کے سوال کا غلط جواب دینا ہے۔

انجن کے مخصوص حدود، جنہیں نظر انداز کرنے کے بجائے بیان کیا گیا ہے:

  • Firefox میں کیش بائی پاس کرنے والا ری لوڈ نہیں (وہ BiDi کے ignoreCache کو قطعی مسترد کر دیتا ہے)، اس لیے ہارڈ ری لوڈ ایک عام ری لوڈ ہی ہے۔
  • WebKit میں بھی کیش بائی پاس کرنے والا ری لوڈ نہیں، کنسول فیڈ نہیں (آؤٹ پٹ ہر نیویگیشن کے بعد console.* کو ہک کر کے پکڑی جاتی ہے، اس لیے لوڈ کے دوران لاگ ہونے والی ہر چیز رہ جاتی ہے — ہر کنسول ایکسٹریکٹ یہی بتاتا ہے)، اور اس کے لائیو ویو کے لیے میزبان پر ffmpeg درکار ہے۔
  • ان دونوں میں سے کوئی بھی اپنے پروٹوکول پر کوئی پلیٹ فارم ایکسیسبلٹی ٹری فراہم نہیں کرتا، اس لیے extract (a11y) ایک DOM سے ماخوذ تخمینہ واپس کرتا ہے، اور اسے تخمینہ ہی کے طور پر لیبل کیا جاتا ہے۔
  • کوئی بھی حقیقی فائل ڈراپ نہیں لے سکتا؛ فائل اِن پٹ کو پھر بھی مشین کے اندر موجود پاتھ پر لگایا جا سکتا ہے۔
سطح امیج حاصل کی جاتی ہے
ٹرمنل ubuntu:24.04، ڈائجسٹ پن شدہ پہلے بوٹ پر خودکار طور پر، مشین کے اپنے گیٹ والے نیٹ ورک کے ذریعے
براؤزر (Chromium، Firefox، WebKit) debian:trixie-slim، ڈائجسٹ پن شدہ، نیز انجن کے اپنے پیکجز پہلے بوٹ پر خودکار طور پر، پھر وارم شدہ پیک کے طور پر کیش
کمپیوٹر Chromium، Firefox، WebKit اور وہی GitHub ہوسٹڈ رنر والی CLI بیس لائن رکھنے والی qcow2 ڈیسک ٹاپ امیج جو ٹرمنل وارم کرتا ہے درآمد، ترتیبات → سرور → رگز کے تحت (جہاں شائع ہوں وہاں چیک سم پن شدہ ڈاؤن لوڈز)
Android گوگل کی سسٹم امیجز Android SDK کے ذریعے
iOS ایک Xcode سمیولیٹر رن ٹائم نیز چیک سم پن شدہ WebDriverAgent رن ٹائم Xcode کے ذریعے؛ آٹومیشن برج ترتیبات → سرور → رگز سے

ہر microVM قسم کے پہلے بوٹ کے بعد سرور ڈیٹا ڈائریکٹری کے نیچے ایک پہلے سے نکالی گئی کاپی کیش کر لیتا ہے اور اس کے بعد کی ہر مشین اسی سے بوٹ کرتا ہے — بشمول ایسی پہلے سے وارم شدہ امیجز جن میں پیکجز پہلے ہی انسٹال ہوں۔ ٹرمنل GitHub ہوسٹڈ رنر جیسی CLI ٹول سیٹ وارم کرتا ہے (git، gcc، python3، jq، rsync، آرکائیو ٹولز، اور apt بیس لائن کا باقی سب؛ Docker یا لینگویج ٹول کیشز نہیں)۔ Computer کا qcow2 امیج بلڈ کے وقت وہی CLI نام اندر پکا دیتا ہے، XFCE اور تینوں براؤزرز کے ساتھ۔ ہر براؤزر اپنا انجن وارم کرتا ہے۔ تینوں انجن ایک Debian بیس شیئر کرتے ہیں مگر کبھی ایک پیک شیئر نہیں کرتے: کیش کی کنجی امیج، انجن اور ایک آڈیو ریویژن (audio-v1-<engine>) پر ہوتی ہے، کیونکہ ایک انجن کے لیے — یا اُس وقت سے پہلے جب PulseAudio اور ffmpeg ورک لوڈ کا حصہ بنے — وارم کی گئی مشین میں دوسرے کا کچھ نہیں ہوتا۔ ٹرمنل پیک کی کنجی اسی وجہ سے ٹول سیٹ ریویژن (tools-v1) پر ہوتی ہے: ایسا پیک جو کمپائلر کے امیج کا حصہ بننے سے پہلے وارم کیا گیا ہو، ایسی مشین کو نہیں دینا چاہیے جس میں کمپائلر ہونا چاہیے۔

کوئی بھی پکی ہوئی آٹومیشن امیج لینے کے قابل نہیں — Chromium کا chromedp/headless-shell ALSA اور PulseAudio دونوں کو باہر کر کے کمپائل کرتا ہے، اس لیے وہ کبھی آواز پیدا نہیں کر سکتا؛ Firefox والی واحد برقرار رکھی گئی امیج Debian بیس سے 33× بڑی ہے اور پھر بھی کوئی socat نہیں رکھتی؛ WebKit والی کوئی برقرار رکھی گئی امیج بالکل ہی نہیں۔ اس لیے ہر انجن پہلے آغاز پر انسٹال ہوتا ہے (chromium، firefox-esr، یا webkit2gtk-driver) اور یہ کرتے ہوئے Debian آرکائیوز (deb.debian.org، security.debian.org، cloudfront.debian.net) تک پہنچتا ہے۔ Chromium ڈسٹری بیوشن بائنری ہے جسے chromium --headless=new کے طور پر لانچ کیا جاتا ہے۔

سیٹنگ کی کنجی اوور رائیڈ کرتی ہے
rigs.smolvm.execImage Terminal (VM) امیج
rigs.smolvm.browserImage Chromium Browser (VM) امیج

یہ ایڈمن گیٹ والے ورک اسپیس سیٹنگز اسٹور کے ذریعے لکھی جاتی ہیں (ترتیبات → سرور → رگز → حسبِ ضرورت امیجز (یہ ورک اسپیس))۔ قدر لازماً ایک رجسٹری ریفرنس ہو — مقامی پاتھ، آرکائیوز اور فلیگ نما اسٹرنگز مسترد کر دی جاتی ہیں، دونوں فیلڈ پر اور دوبارہ بوٹ پر۔ محفوظ شدہ غلط قدر کو زوردار طریقے سے نظر انداز کیا جاتا ہے اور اس کے بجائے ڈیفالٹ بوٹ ہوتا ہے۔ امیج کی اپنی رجسٹری (نیز Docker Hub، GHCR، Quay، GitLab اور GCR کے معروف blob-CDN ساتھی) پل کے لیے ایگریس گیٹ سے داخل کی جاتی ہے۔

ٹرمنل امیج معاہدہ — bash موجود؛ git، curl، socat پہلے سے انسٹال یا ایک Debian/Ubuntu apt بیس (انکلوژر پہلے آغاز پر وہ تینوں اور GitHub ہوسٹڈ رنر جیسی CLI ٹول سیٹ انسٹال کرتا ہے: کمپائلرز، Python 3، jq، آرکائیو ٹولز، rsync۔ لینگویج ٹول کیشز اور Docker انسٹال نہیں ہوتے)۔

براؤزر امیج معاہدہ — ایک Debian/Ubuntu apt بیس (یا پہلے سے انسٹال پیکجز) جس میں bash اور socat ہوں، نیز ایک chromium بائنری جسے سرور خود chromium --headless=new کے طور پر لانچ کرتا ہے، گیسٹ لوپ بیک 9223 پر DevTools کے ساتھ، جو گیسٹ پورٹ 9222 پر ریلے ہوتا ہے۔ آڈیو لین کے لیے پہلے آغاز پر PulseAudio اور ffmpeg انسٹال ہوتے ہیں۔ FROM chromedp/headless-shell سے بلڈ نہ کریں: اپ اسٹریم headless.gn ALSA اور PulseAudio دونوں کو باہر کر کے کمپائل کرتا ہے، اس لیے وہ بائنری آواز پیدا نہیں کر سکتی۔ اوور رائیڈ صرف Chromium رگز پر لاگو ہوتا ہے — جس ورک لوڈ کمانڈ سے یہ بوٹ ہوتی ہے وہ Chromium کی ہے، اور اسے Firefox یا WebKit کو دینا ایسی بائنری لانچ کرنا ہوگا جو وہاں موجود ہی نہیں۔ Firefox یا WebKit رگ اسے زوردار طریقے سے نظر انداز کرتی ہے اور اپنی پن شدہ امیج بوٹ کرتی ہے۔

آٹومیشن پورٹس — ہر براؤزر مشین میزبان کے بالکل ایک لوپ بیک پورٹ کو گیسٹ 9222 پر فارورڈ کرتی ہے۔ اس کے پیچھے: Chromium کے DevTools اور Firefox کا ریموٹ ایجنٹ گیسٹ لوپ بیک 9223 پر ہوتے ہیں جن کے آگے ایک socat ریلے ہوتا ہے (دونوں بغیر شرط لوپ بیک پر بائنڈ کرتے ہیں)؛ WebKit کا ڈرائیور ایک --host لیتا ہے اور خود گیسٹ NIC پر بائنڈ کرتا ہے۔ Firefox مزید یہ کہ Host ہیڈر کو اپنے ہی پورٹ کے خلاف توثیق کرتا ہے، اس لیے کلائنٹ گیسٹ والی اتھارٹی بھیجتا ہے، نہ کہ وہ جس پر اس نے ڈائل کیا۔

ہر ایکشن مکمل طور پر پارس ہوتا ہے: خراب پے لوڈ فیلڈ کا نام لے کر ایک پیغام واپس کرتا ہے، کبھی استثناء نہیں۔ مشاہدے والے فعل (○ سے نشان زد) جب تک کوئی انسان کنٹرول تھامے رکھتا ہے اجازت یافتہ رہتے ہیں؛ تبدیلی کرنے والے فعل مسترد کر دیے جاتے ہیں۔

screenshot○، cursor_position○، mouse_move، left_click، right_click، middle_click، double_click، triple_click، left_mouse_down، left_mouse_up، left_click_drag، scroll، key، hold_key (0–60 s)، type، wait○ (0–60 s)، set_display، clipboard_read○، clipboard_write۔

کوآرڈینیٹس گیسٹ کے موجودہ موڈ میں گیسٹ پکسلز ہیں؛ ہر اسکرین شاٹ ڈسپلے کا سائز بتاتا ہے۔ کلیدوں کے امتزاج X11 ہجے استعمال کرتے ہیں (ctrl+s، alt+Tab، Return)۔

clipboard_read ایک selection لیتا ہے: clipboard (وہ جو ctrl+C بھرتا ہے، ڈیفالٹ)، primary (X11 منتخب کر کے کاپی) یا xdnd (جاری ڈریگ)۔ خالی نتیجہ تینوں کے لیے ایک معمول کا جواب ہے۔ clipboard_write صرف text لیتا ہے — تصاویر اور فائلیں فائل لین پر سفر کرتی ہیں، کیونکہ ایک ایکشن کے آرگیومنٹس آڈٹ لاگ میں محفوظ ہو جاتے ہیں اور امیج بائٹس کا وہاں کوئی کام نہیں۔ کلپ بورڈ کا مواد ناقابل اعتماد ڈیٹا کے طور پر باڑ میں لگا کر واپس آتا ہے۔

navigate (صرف http/https)، reload (hard اختیاری)، stop_loading، click (سلیکٹر یا کوآرڈینیٹ)، fill، type، key (DOM کلید نام)، scroll، mouse_move، drag، left_mouse_down، left_mouse_up، extract○ (a11y | dom | console)، screenshot○ (full_page اختیاری)، set_viewport (کم از کم 320×240)، history، wait_for○ (سلیکٹر، 0.1–30 s)، clipboard_read○، clipboard_write۔

ایکسٹریکٹ شدہ صفحہ مواد ناقابل اعتماد ڈیٹا کے طور پر باڑ میں لگا کر واپس آتا ہے۔

براؤزر کے پاس بالکل ایک ہی کلپ بورڈ ہوتا ہے، اس لیے clipboard_read کوئی selection نہیں لیتا۔ کلپ بورڈ کے دونوں فعل محفوظ کانٹیکسٹ مانگتے ہیں: سادہ http:// پر پیش کیا گیا صفحہ کلپ بورڈ API بالکل نہیں رکھتا، اور فعل خالی کلپ بورڈ بتانے کے بجائے یہی بتا دیتا ہے — وہاں type استعمال کریں، جو کلپ بورڈ سے گزرے بغیر کیریٹ پر داخل کرتا ہے۔

tap، swipe (50–5000 ms)، type، key (عرفی نام back، home، recents، enter، delete، backspace، tab، escape، search، menu، volume_up، volume_down، power، یا کوئی بھی KEYCODE_*)، screenshot○، ui_dump○، install_apk (رگ کے worktree اور سرور ڈیٹا ڈائریکٹری تک محدود)، start_app، stop_app، clear_app_data، uninstall_app، open_url، اور shell۔ shell ایک argv فہرست لیتا ہے اور Android کے اندر چلتا ہے، کبھی میزبان شیل کے ذریعے نہیں؛ یہ logcat، dumpsys اور pm grant جیسی ڈیویلپر تشخیص کا احاطہ کرتا ہے۔

mobile_use میں کلپ بورڈ کے فعل نہیں۔ Android 10 سے صرف فوکس شدہ ایپ ہی کلپ بورڈ پڑھ سکتی ہے۔

tap، swipe (50–5000 ms)، type، key (enter، backspace، tab، escape، ایرو کلیدیں یا ایک قابلِ طبع حرف؛ اختیاری command، control، option اور shift موڈیفائرز)، home، lock، unlock، screenshot○، ui_dump○، install_app (سمیولیٹر .app ڈائریکٹری جو رگ worktree یا سرور ڈیٹا ڈائریکٹری تک محدود ہو)، start_app، stop_app، uninstall_app، open_url، اور spawn۔ spawn argv لیتا ہے اور simctl کے ذریعے سمیولیٹر کے اندر چلتا ہے؛ یہ کبھی میزبان شیل نہیں بلاتا۔

کوآرڈینیٹس iOS اسکرین کے پوائنٹس ہیں، اسکرین شاٹ پکسلز نہیں۔ لائیو اسٹریم سمیولیٹر کا مقرر سائز برقرار رکھتا ہے اور آلے کا سائز بدلنے کے بجائے اسے لیٹر باکس کر دیتا ہے۔ میزبان سے سمیولیٹر اور سمیولیٹر سے میزبان تک متنی کلپ بورڈ کی منتقلی دیگر رگز کی طرح ہی فی صارف، فی سمت اجازت پالیسی استعمال کرتی ہے؛ iOS پیسٹ بورڈ لین فائلیں اور تصاویر قبول نہیں کرتی۔

ہر رگ اپنی ملکیت والا CoreSimulator آلہ اور WebDriverAgent سیشن بناتی ہے۔ اسے بند کرنا WebDriverAgent روکتا ہے، اُس آلے کو بند اور حذف کرتا ہے، اور اس کا رجسٹری اندراج ہٹا دیتا ہے۔ iOS رگز صرف ایسے macOS سرور پر چلتی ہیں جہاں Xcode، ایک انسٹال شدہ iOS رن ٹائم اور پن شدہ آٹومیشن برج موجود ہو۔ یہ کوئی آڈیو، مائیکروفون، فائل ڈراپ، میزبان شیل یا بند نیٹ ورک کی ضمانت فراہم نہیں کرتیں۔

ٹول تفصیل
rig_list کسی ورک اسپیس کی رگز، سطح، اسٹیٹس، ڈسپلے اور کنٹرولر کے ساتھ فہرست کریں
rig_close ایک رگ تباہ کریں اور اس کی ڈسک ضائع کر دیں
مرحلہ مطلب
provisioning بوٹ ہو رہی ہے؛ اسٹیٹس تفصیل موجودہ قدم حرف بہ حرف بتاتی ہے
ready قابلِ رسائی اور ایکشنز قبول کر رہی ہے
parked آئیڈل پارک شدہ: vCPUs رکے ہوئے، RAM پھر بھی موجود؛ اگلا ایکشن اسے جگا دیتا ہے
closing بند ہو رہی ہے
closed ختم؛ قطار آڈٹ ٹریل کے لیے باقی رہتی ہے
failed مر گئی یا کبھی اوپر نہ آئی؛ الگ پہچانی جا سکتی ہے تاکہ UI دوبارہ کوشش پیش کر سکے
بندش کی وجہ کب عمل میں آتی ہے
requested کسی شخص یا ایجنٹ نے مانگا
idleTimeout آئیڈل ونڈو سے 2× زیادہ آئیڈل، یا میموری کی وجہ سے نکالی گئی
ttlExpired سخت عمر ختم ہو گئی
conversationEnded مالک گفتگو ختم ہو گئی
workspaceGone ورک اسپیس حذف ہو گیا یا رکنیت ختم ہو گئی
serverShutdown سرور بند ہو رہا ہے
backendFailure اس کے نیچے ہائپر وائزر مر گیا
قدر ٹرمنل براؤزر کمپیوٹر موبائل
میموری 512 MB 2048 MB (Chromium)؛ 2560 MB (Firefox، WebKit) 4096 MB 4096 MB
vCPUs 2 2 4 4
سخت TTL 8 h 2 h 2 h 2 h
آئیڈل ونڈو 45 min 15 min 15 min 15 min
بوٹ ڈسپلے — 1280×800 1280×800 1080×1920
  • ایجنٹ لین کی اسٹل تصاویر 1280×800 پر محدود ہیں؛ انسانی لین زیادہ سے زیادہ 2560×1600 تک طے کرتی ہے۔
  • تمام رگز کے لیے میزبان کا رہائشی میموری بجٹ ڈیفالٹ کے طور پر 12 GB ہے، جو رہائشی میگا بائٹس میں گنا جاتا ہے (پارک شدہ VM پھر بھی اپنی RAM رکھتی ہے)۔ نکالنا سب سے کم حالیہ استعمال شدہ کی بنیاد پر ہوتا ہے اور کبھی ایسی مشین نہیں لے جاتا جسے کوئی چلا رہا ہو، دیکھ رہا ہو، یا جس میں کسی کا ٹرمنل کھلا ہو۔
  • کھلا ٹرمنل یا دیکھنے والا ناظر رگ کو پارک ہونے اور آئیڈل ریپنگ سے روکے رکھتا ہے؛ سخت TTL پھر بھی لاگو رہتا ہے۔
پورٹ کہاں کس کے لیے مختص
7911 ٹرمنل گیسٹ وہ پورٹ ملٹی پلیکسر جس پر ہر فارورڈ سوار ہوتا ہے
9222، 9223 براؤزر گیسٹ آٹومیشن ریلے اور اینڈ پوائنٹ (WebKit براہِ راست 9222 پر بائنڈ کرتا ہے اور کوئی ریلے استعمال نہیں کرتا)
80، 443 براؤزر گیسٹ لوپ بیک ڈیو ڈومین کی HTTP/HTTPS لینیں
  • دریافت سرور کی طرف سے ہر ~4 سیکنڈ میں ٹرمنل گیسٹ کے سننے والے TCP پورٹس پول کرتی ہے۔
  • فی رگ زیادہ سے زیادہ 16 پورٹس خودکار طور پر فارورڈ ہوتے ہیں؛ اس سے زیادہ لاگ میں فہرست ہو جاتے ہیں، فارورڈ نہیں ہوتے۔
  • میزبان والا فارورڈ لوپ بیک پر بائنڈ کرتا ہے، اور گیسٹ کا اپنا پورٹ نمبر ترجیح دیتا ہے؛ مقامی نیٹ ورک پر شیئر کریں OS کے تفویض کردہ ایک LAN پورٹ کا اضافہ کرتا ہے۔
  • ڈیو ڈومینز کو name.test یا name.localhost سے مطابقت رکھنی چاہیے (چھوٹے حروف، زیادہ سے زیادہ 63 حروف کا لیبل)۔ ایک ڈومین ایک پورٹ پر نقشہ بناتا ہے۔
  • ڈیو ڈومین کا HTTPS سرور کی مقامی CA استعمال کرتا ہے (EC P-256، <dataDir>/rigs/tls/ کے نیچے، کلیدیں 0600 اور کبھی کسی گیسٹ میں نہیں) جس میں *.test / *.localhost کے لیے ایک وائلڈ کارڈ لیف ہوتا ہے۔ میزبان پر openssl نہ ہونے کا مطلب ہے کوئی HTTPS لین نہیں؛ سادہ HTTP پھر بھی روٹ ہوتا ہے۔
سطح ڈیفالٹ اجازت فہرست
ٹرمنل سینڈ باکس ڈیویلپر بیس لائن (فورجیز، پیکیج رجسٹریاں، ماڈل فراہم کنندگان) + Ubuntu apt مررز + خود worktree کا فورج میزبان
براؤزر usectrl.dev (پروڈکٹ سائٹ) — نیز ہر انجن کے پہلے بوٹ پر Debian آرکائیوز، جب وہ اپنے پیکجز انسٹال کرتا ہے۔ ہوم پیج ایک مقامی file:// دستاویز ہے اور اسے کسی ایگریس کی ضرورت نہیں
کمپیوٹر خالی — سب کچھ مسترد — جب تک کوئی کالر میزبان نہ دے
موبائل نافذ نہیں (ایمولیٹر کے زیرِ انتظام نیٹ ورکنگ)

ہر microVM کو اضافی طور پر اپنی امیج کے رجسٹری میزبان ملتے ہیں، صرف پل کے لیے۔ کریڈینشل بروکر کے اجازت یافتہ میزبانوں کا مجموعہ اسی اجازت فہرست سے ماخوذ ہے: ایسے میزبان کے لیے کوئی ٹوکن جاری نہیں کیا جاتا جہاں گیسٹ پہنچ ہی نہ سکے۔

کاپی/پیسٹ کی دونوں سمتیں، اور فائلیں اندر باہر گھسیٹنا۔ یہ ایسے شخص کے لیے دستیاب ہے جو رگ چلا رہا ہو؛ ایجنٹ کو کلپ بورڈ اوپر والے فعلوں کے ذریعے ملتا ہے اور فائل کی منتقلی بالکل نہیں (اس کے پاس انکلوژر کے اندر پہلے ہی ایک شیل موجود ہے)۔

کلپ بورڈ کا عبور فی صارف اور فی سمت ہے۔ میزبان سے رگ میں پیسٹ ڈیفالٹ کے طور پر اجازت یافتہ ہے؛ رگ سے میزبان کو کاپی پوچھتی ہے (دس منٹ کی اجازت، یا ترتیبات → سرور → رگز → کلپ بورڈ تک رسائی کے تحت ہمیشہ اجازت دیں)۔ دونوں انتخاب آزاد ہیں اور کبھی ورک اسپیس کی ترتیب نہیں ہوتے۔

لین راستہ کیا لے جاتی ہے
کلپ بورڈ GET/POST /rig/clipboard/<rigId> متن، ایک PNG/JPEG (≤16 MB)، اور کلپ بورڈ پر موجود فائلوں کے گیسٹ پاتھ
فائلیں POST /rig/files/<rigId> زیادہ سے زیادہ 64 فائلیں، ہر ایک ≤256 MB اور فی ڈراپ ≤512 MB، اختیاری گیسٹ پکسل ڈراپ پوائنٹ کے ساتھ
فائلیں GET /rig/files/<rigId>?p=<base64url path> ایک فائل کے بائٹس، واپس باہر
  • HTTP، RPC نہیں۔ RPC ساکٹ 256 KB سے بڑے آنے والے فریم پر کنکشن بند کر دیتا ہے — یہ ایک DoS گارڈ ہے جو JSON کمانڈز کے لیے درست ہے اور پیسٹ شدہ اسکرین شاٹ کے لیے مہلک۔ بائٹس اُسی طرح کے راستے پر سوار ہوتے ہیں جس پر رگ فریم اور میٹنگ آڈیو پہلے ہی سوار ہوتے ہیں۔
  • تصدیق دستخط شدہ ہدف rig-files:<workspaceId>/<rigId> کے ساتھ ورک اسپیس رکنیت ہے — یہ اپنا الگ ہدف ہے، اس لیے کسی مشین کو دیکھنے کے لیے جاری کیا گیا URL اس میں فائلیں لکھ بھی نہیں سکتا۔
  • ٹیک اوور لاگو ہوتا ہے۔ کلپ بورڈ لکھنا اور فائلیں گرانا تبدیلی کرنے والے عمل ہیں اور جب کوئی اور کنٹرول تھامے ہو تو مسترد کر دیے جاتے ہیں؛ کلپ بورڈ پڑھنا اور فائل باہر پڑھنا مشاہدہ ہے اور ایسا نہیں۔
  • ڈراپ کہاں اترتے ہیں: ~/Drops (ڈیسک ٹاپ)، ~/drops (ٹرمنل — worktree کے ساتھ ساتھ، کبھی اس کے اندر نہیں، تاکہ ڈراپ کبھی غیر ٹریک شدہ تبدیلی کے طور پر ظاہر نہ ہو)، /tmp/cc-drops (براؤزر)۔ ڈائریکٹری سرور چنتا ہے؛ کوئی کالر اس کا نام نہیں رکھ سکتا۔ موجودہ فائلیں کبھی اوور رائٹ نہیں ہوتیں — ٹکرانے والا نام 2-name.ext کے طور پر اترتا ہے۔
  • گیسٹ کو کیا بتایا جاتا ہے: براؤزر صفحے کو مطلوبہ مقام پر ایک حقیقی ڈراپ ایونٹ ملتا ہے (Input.dispatchDragEvent)؛ ڈیسک ٹاپ کو فائلیں اور ان کے URIs اس کے کلپ بورڈ پر ملتے ہیں، کیونکہ کوئی میزبان گیسٹ کے اندر پرائیویلجڈ ڈیمن کے بغیر کسی من مانی ٹول کٹ میں XDND ڈریگ ترکیب نہیں کر سکتا۔ جواب بتاتا ہے کہ دونوں میں سے کیا ہوا۔
  • باہر گھسیٹنا صرف ڈیسک ٹاپ پر ہے اور ڈریگ جاری ہونے کے دوران گیسٹ کی XdndSelection پڑھتا ہے۔ ایسا پے لوڈ جو گیسٹ کے پاس دباؤ شروع ہونے کے وقت پہلے سے موجود تھا، ختم ہو چکے ڈریگ کی پرانی سلیکشن سمجھا جاتا ہے، نئی نہیں — X میں “ڈریگ ختم ہو گیا” کا کوئی مرحلہ نہیں ہوتا۔
  • امیج کی شرائط: ڈیسک ٹاپ امیج پروٹوکول 2 یا اس سے بعد کی ہونی چاہیے (کلپ بورڈ سپورٹ آنے کے بعد بنی ہوئی)۔ پرانی امیج 404 جواب دیتی ہے اور ایپ خراب مشین بتانے کے بجائے اسے دوبارہ بنانے کو کہتی ہے۔
  • آڈٹ لاگ شکل درج کرتا ہے، کبھی مواد نہیں: clipboard_read، clipboard_write، drop_files اور read_file قطاریں گنتی، سائز اور پاتھ رکھتی ہیں۔ کلپ بورڈ وہ جگہ ہے جہاں کریڈینشلز چند سیکنڈ کے لیے رہتے ہیں، اور اس میں سے کچھ بھی لکھا نہیں جاتا۔
  • رگ ٹولز enclosureControl ایکشن کلاس قرار دیتے ہیں (نیز استعمال والے ٹولز پر networkEgress اور processSpawn؛ mobile_use اور ios_use مزید packageInstall بھی قرار دیتے ہیں)۔ rig_close، enclosureControl قرار دیتا ہے؛ rig_list کچھ قرار نہیں دیتا۔ ڈیفالٹ کے طور پر اجازت یافتہ؛ صرف پڑھنے والے موڈز اسے یکسر مسترد کرتے ہیں؛ فی اسپیس خود مختاری ڈائل اسے پہلے پوچھنے تک گھٹا سکتا ہے۔
  • ڈومین ایونٹس: RigClosedEvent (اپنی بندش کی وجہ کے ساتھ)، RigControlChanged (ٹیک اوور / کنٹرول واپسی)، RigReaped (آئیڈل، TTL یا میموری نکالنا، چلانے والے ایجنٹ کے ساتھ)۔ رگ کھولنا کوئی ایونٹ نہیں۔ دیکھیں ڈومین ایونٹس۔
  • اسٹوریج: ہر ورک اسپیس ڈیٹا بیس میں rig_sessions اور rig_action_log۔ ایکشن لاگ ہر اِن پٹ ایونٹ کو اس کے پرنسپل اور فی رگ ایک مونوٹونک ترتیب کے ساتھ درج کرتا ہے؛ ٹائپ کیا گیا متن لکھے جانے سے پہلے ایک طوالت اور ہیش تک محدود کر دیا جاتا ہے۔
  • ڈیٹا ڈائریکٹری: rigs/images/ (درآمد شدہ qcow2 امیجز)، rigs/smolvm/ (فی رگ رن ٹائم حالت)، rigs/smolvm-packs/ (پہلے سے نکالے گئے مشین پیک)، rigs/tls/ (ڈیو ڈومین CA)، rigs/run/ (QEMU اوورلے اور سیڈز)۔
  • راستے: لائیو ویو کسی اسپیس یا PR صفحے کا ایک ٹیب ہے؛ /settings/server/rigs رگز کی سیٹنگز اسکرین ہے۔