المنصات
حقائق فقط. للنموذج الذي يقف خلفها، اقرأ المنصات والحاويات المعزولة، ولفتح آلة اتبع الدليل.
الأسطح والخلفيات
قسم بعنوان “الأسطح والخلفيات”| السطح | ما يقوده | الخلفية | القيمة | الخروج المحصور |
|---|---|---|---|---|
| الطرفية (exec) | صدفة عبر قناة التنفيذ في الآلة الافتراضية | microVM | smolvm |
نعم |
| المتصفح | Chromium بلا واجهة (CDP)، أو Firefox (WebDriver BiDi)، أو WebKit (W3C WebDriver) | microVM | smolvm |
نعم |
| الحاسوب | سطح مكتب X11: الإدخال عبر مراقب الأجهزة الافتراضية، والالتقاط عبر برنامج الضيف | QEMU | qemu-hvf (macOS)، وqemu-kvm (Linux)، وqemu-tcg (احتياط بلا تسريع، ولا يُختار تلقائيًا أبدًا) |
نعم |
| Android | Android عبر ADB | محاكي Google | android-emulator |
لا. يدير المحاكي شبكته بنفسه |
| iOS | محاكي iOS عبر WebDriverAgent | CoreSimulator | ios-simulator |
لا. تتبع الشبكة جهاز Mac المضيف |
تشترك الطرفية وسطح computer_use في قيمة السطح computer. تُميَّز الطرفية بعلامة صورة التنفيذ، ولا تُعاد استخدامها سطح مكتب قابلًا للقيادة، ولا يُعاد استخدام سطح المكتب طرفية. تعيد المحادثة الواحدة استخدام آلة طرفية واحدة.
محركات المتصفح
قسم بعنوان “محركات المتصفح”| المحرك | القيمة | البروتوكول | العرض الحي | اللقطات الثابتة |
|---|---|---|---|---|
| Chromium | chromium (الافتراضي) |
Chrome DevTools Protocol | بث شاشة: يدفع المتصفح الإطارات كلما أعادت الصفحة الرسم | JPEG |
| Firefox | firefox |
WebDriver BiDi | لقطات ثابتة بالاستطلاع (لا يملك BiDi بث شاشة)، بسقف 6 إطارات في الثانية | JPEG |
| WebKit | webkit |
W3C WebDriver (الكلاسيكي) | لقطات ثابتة بالاستطلاع، يعيد ترميزها ffmpeg على المضيف | PNG |
تشغّل المنصة محركًا واحدًا طوال عمرها. تستطيع المحادثة الواحدة أن تحمل منصة واحدة لكل محرك، وهذا ما يجعل المقارنة جنبًا إلى جنب ممكنة: فتح Firefox (VM) إلى جانب Chromium (VM) يعني آلتين، وإغلاق إحداهما يُبقي الأخرى تعمل.
مرّر engine إلى rig.open أو إلى أداة browser_use. يُرفض الاسم غير المعروف بدل أن يُفترَض افتراضيًا: طلب متصفح ثم الحصول على غيره بصمت يجيب عن سؤال التوافق بجواب خاطئ.
حدود تخص المحرك، تُقال ولا يُلتف عليها:
- Firefox لا يملك إعادة تحميل تتجاوز الذاكرة المؤقتة (يرفض
ignoreCacheفي BiDi رفضًا صريحًا)، فإعادة التحميل القسرية إعادة تحميل عادية. - WebKit لا يملك إعادة تحميل تتجاوز الذاكرة المؤقتة أيضًا، ولا تغذية لوحدة التحكم (يُلتقط المخرج بتعليق
console.*بعد كل انتقال، فيفوت ما سُجّل أثناء التحميل، ويصرّح كل استخراج لوحدة التحكم بذلك)، ويحتاجffmpegعلى المضيف لعرضه الحي. - لا Firefox ولا WebKit يعرض شجرة إمكانية وصول النظام عبر بروتوكوله، فيعيد
extract (a11y)تقريبًا مشتقًا من DOM، وموسومًا بأنه كذلك. - لا Firefox ولا WebKit يقبل إفلات ملف حقيقيًا، ويمكن مع ذلك توجيه حقل ملف إلى مسارات داخل الآلة.
صور الآلات
قسم بعنوان “صور الآلات”| السطح | الصورة | الجلب |
|---|---|---|
| الطرفية | ubuntu:24.04، مثبّتة على بصمة محتواها |
تلقائيًا عند أول إقلاع، عبر شبكة الآلة المبوَّبة |
| المتصفح (Chromium وFirefox وWebKit) | debian:trixie-slim، مثبّتة على بصمة محتواها، مع حزم المحرك نفسه |
تلقائيًا عند أول إقلاع، ثم تُخزَّن حزمة مسخَّنة |
| الحاسوب | صورة سطح مكتب qcow2 تضم Chromium وFirefox وWebKit وخط أساس سطر الأوامر نفسه، على طراز مشغّل مستضاف على GitHub، الذي تسخّنه الطرفية | استيراد تحت الإعدادات ← الخادم ← المنصات (تنزيلات مثبّتة على مجموعها الاختباري حيث تُنشر) |
| Android | صور نظام Google | عبر حزمة تطوير Android |
| iOS | بيئة تشغيل محاكي Xcode مع WebDriverAgent مثبّت على مجموع اختباري | بيئة التشغيل عبر Xcode، وجسر الأتمتة من الإعدادات ← الخادم ← المنصات |
بعد أول إقلاع لكل نوع من microVM يخزّن الخادم نسخة مستخرجة سلفًا تحت دليل البيانات، ويُقلع كل آلة لاحقة منها، بما فيها الصور المسخَّنة سلفًا وحزمها مثبّتة. تسخّن الطرفية مجموعة أدوات سطر أوامر على طراز مشغّل مستضاف على GitHub (git وgcc وpython3 وjq وrsync وأدوات الأرشفة وبقية خط أساس apt، من دون Docker أو ذاكرات أدوات اللغة). تخبز صورة qcow2 للحاسوب أسماء سطر الأوامر نفسها عند بناء الصورة، إلى جانب XFCE والمتصفحات الثلاثة. يسخّن كل متصفح محركه. تشترك المحركات الثلاثة في أساس Debian ولا تشترك في حزمة أبدًا: مفتاح الذاكرة المؤقتة هو الصورة والمحرك ومراجعة الصوت (audio-v1-<engine>)، لأن آلة سُخّنت لمحرك واحد، أو قبل أن يصير PulseAudio وffmpeg جزءًا من الحمل، لا تحمل ما يخص الحالة الأخرى. مفتاح حزمة الطرفية مراجعة مجموعة الأدوات (tools-v1) للسبب نفسه: حزمة سُخّنت قبل أن يصير المصرّف جزءًا من الصورة لا يجوز أن تخدم آلة يُفترض أن تملكه.
لا توجد صورة أتمتة مخبوزة تستحق الاعتماد. يُبنى chromedp/headless-shell الخاص بـ Chromium وقد أُخرج منه ALSA وPulseAudio، فلا يصدر صوتًا أبدًا. صورة Firefox الوحيدة التي تُصان حجمها 33 ضعف أساس Debian، وما زالت تُشحَن بلا socat. ولا توجد صورة WebKit مصانة أصلًا. لذلك يُثبَّت كل محرك عند أول تشغيل (chromium أو firefox-esr أو webkit2gtk-driver) ويبلغ أرشيفات Debian (deb.debian.org وsecurity.debian.org وcloudfront.debian.net) في أثناء ذلك. Chromium هو ثنائي التوزيعة، ويُطلَق بالأمر chromium --headless=new.
صور مخصصة لكل مساحة عمل
قسم بعنوان “صور مخصصة لكل مساحة عمل”| مفتاح الإعداد | ما يستبدله |
|---|---|
rigs.smolvm.execImage |
صورة الطرفية (VM) |
rigs.smolvm.browserImage |
صورة متصفح Chromium (VM) |
تُكتب عبر مخزن إعدادات مساحة العمل المقيّد بالمشرف (الإعدادات ← الخادم ← المنصات ← صور مخصصة (مساحة العمل هذه)). يجب أن تكون القيمة مرجع سجل صور. تُرفض المسارات المحلية والأرشيفات والسلاسل التي تشبه الأعلام، عند الحقل ومرة أخرى عند الإقلاع. القيمة المخزَّنة غير الصالحة تُتجاهل مع إبلاغ صريح، ويُقلع الافتراضي بدلها. يُسمَح لسجل الصورة نفسه (ولمضيفات CDN المعروفة لكتلها لدى Docker Hub وGHCR وQuay وGitLab وGCR) عبر بوابة الخروج، من أجل السحب.
عقد صورة الطرفية. يوجد bash، وتكون git وcurl وsocat مثبّتة سلفًا أو يتوفر أساس apt من Debian أو Ubuntu (تثبّت الحاوية المعزولة هذه الثلاثة مع مجموعة أدوات سطر أوامر على طراز مشغّل مستضاف على GitHub عند أول تشغيل: المصرّفات، وPython 3، وjq، وأدوات الأرشفة، وrsync. لا تُثبَّت ذاكرات أدوات اللغة ولا Docker).
عقد صورة المتصفح. أساس apt من Debian أو Ubuntu (أو الحزم مثبّتة سلفًا) مع bash وsocat، وثنائي chromium يطلقه الخادم بنفسه بالأمر chromium --headless=new مع DevTools على الاسترجاع الحلقي للضيف 9223، مُرحَّلًا إلى منفذ الضيف 9222. يُثبَّت PulseAudio وffmpeg عند أول تشغيل لمسار الصوت. لا تبنِ الصورة FROM chromedp/headless-shell: يصرّف headless.gn في المنبع ALSA وPulseAudio خارج الثنائي، فلا يستطيع إصدار صوت. ينطبق التجاوز على منصات Chromium فقط. أمر الحمل الذي تُقلعه هو أمر Chromium، وتسليمه إلى Firefox أو WebKit يطلق ثنائيًا غير موجود هناك. تتجاهل منصة Firefox أو WebKit التجاوز مع إبلاغ صريح، وتُقلع صورتها المثبّتة.
منافذ الأتمتة. توجّه كل آلة متصفح منفذ استرجاع حلقي واحدًا على المضيف إلى منفذ الضيف 9222 بالضبط. خلفه يجلس DevTools في Chromium والوكيل البعيد في Firefox على الاسترجاع الحلقي للضيف 9223، وأمامهما مرحّل socat (كلاهما يربط الاسترجاع الحلقي بلا شرط). يأخذ مشغّل WebKit الوسيط --host ويربط واجهة شبكة الضيف بنفسه. يتحقق Firefox أيضًا من ترويسة Host مقابل منفذه، فيرسل العميل مرجع الجهة على جانب الضيف، لا الذي اتصل به.
أفعال الإجراء
قسم بعنوان “أفعال الإجراء”يُحلَّل كل إجراء تحليلًا كاملًا: الحمولة المشوّهة تعيد رسالة تسمّي الحقل، ولا ترفع استثناءً. تبقى أفعال الملاحظة (المعلَّمة بـ ○) مسموحة ما دام إنسان ممسكًا بالتحكم، وتُرفض الأفعال المغيِّرة.
computer_use
قسم بعنوان “computer_use”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 ثانية), type, wait○ (0–60 ثانية), set_display,
clipboard_read○, clipboard_write.
الإحداثيات بكسلات الضيف في وضعه الحالي، وتذكر كل لقطة شاشة مقاس العرض. تستخدم تركيبات المفاتيح تهجئة X11 (ctrl+s وalt+Tab وReturn).
يأخذ clipboard_read قيمة selection: clipboard (ما يملأه ctrl+C، وهو الافتراضي)، أو primary (التحديد للنسخ في X11)، أو xdnd (سحب ما يزال جاريًا). النتيجة الفارغة جواب طبيعي للثلاثة. يأخذ clipboard_write قيمة text فقط. تسلك الصور والملفات مسار الملفات، لأن وسيطات الإجراء تُحفظ في سجل التدقيق، وبايتات الصورة لا مكان لها هناك. يعود محتوى الحافظة محاطًا بسياج بوصفه بيانات غير موثوقة.
browser_use
قسم بعنوان “browser_use”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 ثانية), clipboard_read○, clipboard_write.
يعود محتوى الصفحة المستخرج محاطًا بسياج بوصفه بيانات غير موثوقة.
للمتصفح حافظة واحدة بالضبط، فلا يأخذ clipboard_read قيمة selection. يحتاج فعلا الحافظة سياقًا آمنًا: الصفحة التي تُخدَّم عبر http:// العادي لا تملك واجهة حافظة أصلًا، ويقول الفعل ذلك بدل أن يبلّغ عن حافظة فارغة. استخدم type هناك، فهو يدرج النص عند المؤشر من غير المرور بحافظة.
mobile_use
قسم بعنوان “mobile_use”tap, swipe (50–5000 مللي ثانية), type, key (أسماء مستعارة: back وhome و
recents وenter وdelete وbackspace وtab وescape وsearch و
menu وvolume_up وvolume_down وpower، أو أي KEYCODE_*),
screenshot○, ui_dump○, install_apk
(محصور بشجرة عمل المنصة ودليل بيانات الخادم), start_app,
stop_app, clear_app_data, uninstall_app, open_url، وshell.
يأخذ shell قائمة argv ويعمل داخل Android، ولا يمر أبدًا بصدفة المضيف. يغطي تشخيصات المطوّر مثل logcat وdumpsys وpm grant.
لا يملك mobile_use أفعال حافظة. منذ Android 10 لا يقرأ الحافظة إلا التطبيق الذي يملك التركيز.
ios_use
قسم بعنوان “ios_use”tap, swipe (50–5000 مللي ثانية), type, key (enter وbackspace وtab و
escape، أو مفاتيح الأسهم، أو حرف واحد قابل للطباعة، مع المعدِّلات الاختيارية
command وcontrol وoption وshift), home, lock, unlock,
screenshot○, ui_dump○, install_app (دليل .app للمحاكي
محصور بشجرة عمل المنصة أو دليل بيانات الخادم), 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 |
إيقاف مؤقت للخمول: تتوقف المعالجات الافتراضية وتبقى الذاكرة مقيمة، ويوقظها الإجراء التالي |
closing |
قيد الإغلاق |
closed |
زالت، ويبقى الصف لأجل أثر التدقيق |
failed |
تعطّلت أو لم تقم أصلًا، وتُميَّز حتى تعرض الواجهة إعادة المحاولة |
| سبب الإغلاق | متى يُطلَق |
|---|---|
requested |
طلب شخص أو وكيل |
idleTimeout |
خمول تجاوز ضعف نافذة الخمول، أو إخلاء من أجل الذاكرة |
ttlExpired |
انتهت المهلة القصوى الصارمة |
conversationEnded |
انتهت المحادثة المالكة |
workspaceGone |
حُذفت مساحة العمل أو فُقدت العضوية |
serverShutdown |
الخادم يتوقف |
backendFailure |
تعطّل مراقب الأجهزة الافتراضية من تحتها |
القيم الافتراضية والسقوف
قسم بعنوان “القيم الافتراضية والسقوف”| القيمة | الطرفية | المتصفح | الحاسوب | الجوال |
|---|---|---|---|---|
| الذاكرة | 512 MB | 2048 MB (Chromium)، و2560 MB (Firefox وWebKit) | 4096 MB | 4096 MB |
| المعالجات الافتراضية | 2 | 2 | 4 | 4 |
| المهلة القصوى الصارمة | 8 ساعات | ساعتان | ساعتان | ساعتان |
| نافذة الخمول | 45 دقيقة | 15 دقيقة | 15 دقيقة | 15 دقيقة |
| عرض الإقلاع | — | 1280×800 | 1280×800 | 1080×1920 |
- لقطات مسار الوكيل الثابتة سقفها 1280×800، ويتفاوض مسار الإنسان حتى 2560×1600.
- ميزانية الذاكرة المقيمة على المضيف لكل المنصات افتراضيًا 12 GB، تُحسب بالميجابايت المقيمة (الآلة الموقوفة مؤقتًا ما زالت تحتفظ بذاكرتها). الإخلاء للأقل استخدامًا مؤخرًا، ولا يأخذ أبدًا آلة يقودها أحد أو يشاهدها أو له طرفية مفتوحة فيها.
- الطرفية المفتوحة أو مسار المشاهدة يثبّت المنصة ضد الإيقاف المؤقت وكنس الخمول، وتبقى المهلة القصوى الصارمة سارية.
المنافذ ونطاقات التطوير
قسم بعنوان “المنافذ ونطاقات التطوير”| المنفذ | الموضع | محجوز لـ |
|---|---|---|
7911 |
ضيف الطرفية | مجمّع المنافذ الذي يسلكه كل توجيه |
9222 و9223 |
ضيف المتصفح | مرحّل الأتمتة ونقطة النهاية (يربط WebKit المنفذ 9222 مباشرة ولا يستخدم مرحّلًا) |
80 و443 |
الاسترجاع الحلقي لضيف المتصفح | مسارا HTTP وHTTPS لنطاق التطوير |
- يستطلع الاكتشاف منافذ TCP التي يصغي إليها ضيف الطرفية كل 4 ثوانٍ تقريبًا، من جهة الخادم.
- يُوجَّه تلقائيًا 16 منفذًا كحد أقصى لكل منصة، ويُذكر ما زاد في السجل من غير توجيه.
- يربط التوجيه من جهة المضيف الاسترجاع الحلقي، ويفضّل رقم منفذ الضيف نفسه، وتضيف المشاركة على الشبكة المحلية منفذ شبكة محلية يعيّنه نظام التشغيل.
- يجب أن تطابق نطاقات التطوير
name.testأوname.localhost(بأحرف صغيرة، ووسم لا يتجاوز 63 حرفًا). النطاق الواحد يقابل منفذًا واحدًا. - يستخدم HTTPS لنطاق التطوير مرجع شهادات محليًا على الخادم (EC P-256، تحت
<dataDir>/rigs/tls/، والمفاتيح 0600 ولا تدخل أي ضيف) مع شهادة ورقة بدل واحدة لـ*.testو*.localhost. إن غابopensslعلى المضيف غاب مسار HTTPS، ويبقى HTTP العادي يُوجَّه.
الخروج الافتراضي
قسم بعنوان “الخروج الافتراضي”| السطح | قائمة السماح الافتراضية |
|---|---|
| الطرفية | خط أساس المطوّر في البيئة المعزولة (مضيفات الشفرة، وسجلات الحزم، ومزوّدو النماذج) مع مرايا apt في Ubuntu ومضيف الشفرة الخاص بشجرة العمل |
| المتصفح | usectrl.dev (موقع المنتج)، مع أرشيفات Debian عند أول إقلاع لكل محرك، أثناء تثبيت حزمه. الصفحة الرئيسية مستند file:// محلي ولا تحتاج خروجًا |
| الحاسوب | فارغة، ويُرفض كل شيء، إلى أن يمنح المستدعي مضيفين |
| الجوال | غير مفروض (الشبكة يديرها المحاكي) |
يحصل كل microVM أيضًا على مضيفات سجل صورته، للسحب فقط. تُشتق مجموعة المضيفين المسموح بها لدى وسيط بيانات الاعتماد من قائمة السماح نفسها: لا يُصدَر رمز لمضيف لا يبلغه الضيف.
الحافظة ونقل الملفات
قسم بعنوان “الحافظة ونقل الملفات”النسخ واللصق في الاتجاهين، وسحب الملفات دخولًا وخروجًا. متاح للشخص الذي يقود المنصة. يحصل الوكيل على الحافظة عبر الأفعال أعلاه، ولا يحصل على نقل ملفات أبدًا (عنده صدفة داخل الحاوية المعزولة أصلًا).
عبور الحافظة لكل مستخدم ولكل اتجاه. اللصق من المضيف إلى المنصة مسموح افتراضيًا، والنسخ من المنصة إلى المضيف يسأل (السماح لمدة 10 دقائق، أو السماح دائمًا تحت الإعدادات ← الخادم ← المنصات ← الوصول إلى الحافظة). الخياران مستقلان، وليسا إعداد مساحة عمل أبدًا.
| المسار | الطريق | ما يحمله |
|---|---|---|
| الحافظة | 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، وهو حارس ضد الحرمان من الخدمة يناسب أوامر JSON ويقضي على لقطة شاشة ملصوقة. تسلك البايتات طريقًا من النوع نفسه الذي تسلكه إطارات المنصة وصوت الاجتماعات.
- المصادقة هي الهدف الموقَّع
rig-files:<workspaceId>/<rigId>مع عضوية مساحة العمل، وهو هدف قائم بذاته، فعنوان صُكّ للمشاهدة لا يستطيع أيضًا أن يكتب ملفات في الآلة. - التولّي يسري. كتابة الحافظة وإفلات الملفات إجراءان مغيّران ويُرفضان ما دام غيرك ممسكًا بالتحكم. قراءة الحافظة وقراءة ملف إلى الخارج ملاحظة، ولا تُرفضان.
- أين تستقر الإفلاتات:
~/Drops(سطح المكتب)، و~/drops(الطرفية، إلى جانب شجرة العمل لا داخلها، فلا يظهر الإفلات تغييرًا غير متتبَّع)، و/tmp/cc-drops(المتصفح). يختار الخادم الدليل، ولا يستطيع المستدعي تسميته. لا تُستبدل الملفات القائمة أبدًا، والاسم المتصادم يُكتَب2-name.ext. - ما يُبلَّغ به الضيف: تتلقى صفحة المتصفح حدث إفلات حقيقيًا عند النقطة المطلوبة (
Input.dispatchDragEvent)، ويحصل سطح المكتب على الملفات مع معرّفات URI على حافظته، لأن المضيف لا يستطيع اصطناع سحب 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(خمول أو مهلة قصوى أو إخلاء ذاكرة، مع الوكيل الذي يقود). فتح المنصة ليس حدثًا. انظر أحداث النطاق. - التخزين:
rig_sessionsوrig_action_logفي قاعدة بيانات كل مساحة عمل. يسجّل سجل الإجراءات كل حدث إدخال مع طرفه وتسلسل رتيب خاص بالمنصة، ويُختزل النص المكتوب إلى طول وتجزئة قبل الكتابة. - دليل البيانات:
rigs/images/(صور qcow2 المستوردة)، وrigs/smolvm/(حالة التشغيل لكل منصة)، وrigs/smolvm-packs/(حزم الآلات المستخرجة سلفًا)، وrigs/tls/(مرجع شهادات نطاق التطوير)، وrigs/run/(تراكبات QEMU والبذور). - المسارات: العرض الحي لسان في صفحة مساحة أو طلب سحب، و
/settings/server/rigsهو مسار شاشة إعدادات المنصات.