Σταθμοί
Μόνο γεγονότα. Για το μοντέλο πίσω από αυτά, διαβάστε Σταθμοί και περιβλήματα· για να ανοίξετε μια μηχανή, ακολουθήστε τον οδηγό.
Επιφάνειες και υποσυστήματα
Ενότητα με τίτλο «Επιφάνειες και υποσυστήματα»| Επιφάνεια | Οδηγεί | Υποσύστημα | Τιμή | Περιορισμένη εξερχόμενη κίνηση |
|---|---|---|---|---|
| Τερματικό (exec) | Ένα κέλυφος πάνω από το κανάλι εκτέλεσης της VM | microVM | smolvm |
Ναι |
| Περιηγητής | Headless 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 | Screencast — ο περιηγητής σπρώχνει καρέ καθώς η σελίδα επαναζωγραφίζεται | JPEG |
| Firefox | firefox |
WebDriver BiDi | Ακίνητες εικόνες με δειγματοληψία (το BiDi δεν έχει screencast), με ανώτατο όριο 6 fps | JPEG |
| WebKit | webkit |
W3C WebDriver (κλασικό) | Ακίνητες εικόνες με δειγματοληψία, με κωδικοποίηση από το ffmpeg του ξενιστή | PNG |
Ένας σταθμός εκτελεί μία μηχανή σε όλη του τη ζωή. Μία συνομιλία μπορεί να κρατά έναν σταθμό ανά μηχανή, κι αυτό είναι που κάνει δυνατή τη σύγκριση δίπλα-δίπλα: το άνοιγμα του «Firefox (VM)» δίπλα στο «Chromium (VM)» είναι δύο μηχανές, και το κλείσιμο της μίας αφήνει την άλλη σε λειτουργία.
Περάστε το engine στο rig.open ή στο εργαλείο browser_use. Ένα άγνωστο
όνομα απορρίπτεται αντί να πέσει στην προεπιλογή — το να ζητήσετε έναν
περιηγητή και να πάρετε σιωπηλά έναν άλλον απαντά σε ένα ερώτημα συμβατότητας
με λάθος απάντηση.
Όρια ειδικά για κάθε μηχανή, που δηλώνονται αντί να παρακάμπτονται:
- Ο Firefox δεν έχει επαναφόρτωση με παράκαμψη της κρυφής μνήμης
(απορρίπτει ευθέως το
ignoreCacheτου BiDi), οπότε μια σκληρή επαναφόρτωση είναι μια απλή επαναφόρτωση. - Το WebKit δεν έχει ούτε αυτό επαναφόρτωση με παράκαμψη της κρυφής
μνήμης, ούτε ροή κονσόλας (η έξοδος συλλαμβάνεται με άγκιστρο στο
console.*μετά από κάθε πλοήγηση, οπότε ό,τι καταγράφεται κατά τη φόρτωση χάνεται — κάθε εξαγωγή κονσόλας το δηλώνει), και χρειάζεταιffmpegστον ξενιστή για τη ζωντανή προβολή του. - Καμία από τις δύο δεν εκθέτει δέντρο προσβασιμότητας της πλατφόρμας
μέσω του πρωτοκόλλου της, οπότε το
extract (a11y)επιστρέφει μια προσέγγιση που παράγεται από το DOM, χαρακτηρισμένη ως τέτοια. - Καμία από τις δύο δεν δέχεται πραγματική απόθεση αρχείου· μια είσοδος αρχείου μπορεί ωστόσο να δείξει σε διαδρομές μέσα στη μηχανή.
Εικόνες μηχανής
Ενότητα με τίτλο «Εικόνες μηχανής»| Επιφάνεια | Εικόνα | Λήψη |
|---|---|---|
| Τερματικό | ubuntu:24.04, καθηλωμένη σε digest |
Αυτόματα στην πρώτη εκκίνηση, μέσω του δικού της φραγμένου δικτύου της μηχανής |
| Περιηγητής (Chromium, Firefox, WebKit) | debian:trixie-slim, καθηλωμένη σε digest, συν τα δικά της πακέτα της μηχανής |
Αυτόματα στην πρώτη εκκίνηση και μετά στην προσωρινή μνήμη ως προθερμασμένο πακέτο |
| Υπολογιστής | Μια εικόνα επιφάνειας εργασίας qcow2 με Chromium, Firefox, WebKit και την ίδια βάση CLI τύπου runner φιλοξενημένου στο GitHub που προθερμαίνει το τερματικό | Εισαγωγή στις Ρυθμίσεις → Διακομιστής → Σταθμοί (λήψεις καθηλωμένες σε άθροισμα ελέγχου όπου δημοσιεύονται) |
| Android | Οι εικόνες συστήματος της Google | Μέσω του Android SDK |
| iOS | Ένα runtime του Προσομοιωτή Xcode συν WebDriverAgent καθηλωμένο σε άθροισμα ελέγχου | Το runtime μέσω Xcode· η γέφυρα αυτοματοποίησης από τις Ρυθμίσεις → Διακομιστής → Σταθμοί |
Μετά την πρώτη εκκίνηση κάθε είδους microVM, ο διακομιστής αποθηκεύει
προσωρινά ένα προ-εξαγμένο αντίγραφο στον κατάλογο δεδομένων και εκκινεί κάθε
επόμενη μηχανή από αυτό — συμπεριλαμβανομένων προθερμασμένων εικόνων με τα
πακέτα ήδη εγκατεστημένα. Το τερματικό προθερμαίνει ένα σύνολο εργαλείων CLI
τύπου runner φιλοξενημένου στο GitHub (git, gcc, python3, jq, rsync,
εργαλεία αρχειοθέτησης και την υπόλοιπη βάση του apt· όχι Docker ή toolcache
γλωσσών). Το qcow2 του Υπολογιστή ενσωματώνει τα ίδια ονόματα CLI κατά την
κατασκευή της εικόνας, δίπλα στο 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 |
Την εικόνα του Περιηγητή (VM) Chromium |
Γράφονται μέσω της αποθήκης ρυθμίσεων χώρου εργασίας που ελέγχεται από διαχειριστή (Ρυθμίσεις → Διακομιστής → Σταθμοί → Προσαρμοσμένες εικόνες (αυτός ο χώρος εργασίας)). Η τιμή πρέπει να είναι αναφορά registry — τοπικές διαδρομές, αρχεία αρχειοθέτησης και συμβολοσειρές που μοιάζουν με σημαίες απορρίπτονται, και στο πεδίο και πάλι στην εκκίνηση. Μια άκυρη αποθηκευμένη τιμή αγνοείται με θόρυβο και αντί γι’ αυτής εκκινεί η προεπιλογή. Το δικό της registry της εικόνας (συν γνωστούς συνοδούς blob-CDN για Docker Hub, GHCR, Quay, GitLab και GCR) γίνεται δεκτό μέσω της πύλης εξερχόμενης κίνησης για το pull.
Σύμβαση εικόνας τερματικού — παρουσία του bash· τα git, curl,
socat προεγκατεστημένα ή μια βάση apt Debian/Ubuntu (το περίβλημα
εγκαθιστά αυτά τα τρία συν ένα σύνολο εργαλείων CLI τύπου runner φιλοξενημένου
στο GitHub στην πρώτη εκκίνηση: μεταγλωττιστές, Python 3, jq, εργαλεία
αρχειοθέτησης, rsync. Toolcache γλωσσών και Docker δεν εγκαθίστανται).
Σύμβαση εικόνας περιηγητή — μια βάση apt Debian/Ubuntu (ή τα πακέτα ήδη
εγκατεστημένα) με bash και socat, συν ένα δυαδικό chromium που ο
διακομιστής εκκινεί μόνος του ως chromium --headless=new με το DevTools στο
loopback του φιλοξενούμενου 9223, αναμεταδιδόμενο στη θύρα 9222 του
φιλοξενούμενου. Τα PulseAudio και ffmpeg εγκαθίστανται στην πρώτη εκκίνηση για
τη δίοδο ήχου. Μην κάνετε build FROM chromedp/headless-shell: το
headless.gn των ανάντη αποκλείει κατά τη μεταγλώττιση και το ALSA και το
PulseAudio, οπότε αυτό το δυαδικό δεν μπορεί να βγάλει ήχο. Η παράκαμψη ισχύει
μόνο για σταθμούς Chromium — η εντολή φόρτου που εκκινεί είναι του
Chromium, και το να τη δώσετε σε Firefox ή WebKit θα εκκινούσε ένα δυαδικό που
δεν υπάρχει. Ένας σταθμός Firefox ή WebKit την αγνοεί με θόρυβο και εκκινεί
την καθηλωμένη του εικόνα.
Θύρες αυτοματοποίησης — κάθε μηχανή περιηγητή προωθεί ακριβώς μία θύρα
loopback του ξενιστή στη θύρα 9222 του φιλοξενούμενου. Πίσω από αυτήν: το
DevTools του Chromium και ο απομακρυσμένος πράκτορας του Firefox βρίσκονται
στο loopback του φιλοξενούμενου 9223 με ένα ρελέ socat μπροστά (και τα δύο
δεσμεύουν το loopback χωρίς όρους)· ο οδηγός του WebKit δέχεται ένα --host
και δεσμεύει ο ίδιος την κάρτα δικτύου του φιλοξενούμενου. Ο Firefox επιπλέον
επικυρώνει την κεφαλίδα Host ως προς τη δική του θύρα, οπότε ο πελάτης
στέλνει το authority της πλευράς του φιλοξενούμενου αντί για εκείνο στο οποίο
κατέφυγε.
Ρήματα ενεργειών
Ενότητα με τίτλο «Ρήματα ενεργειών»Κάθε ενέργεια αναλύεται ολικά: ένα κακοσχηματισμένο φορτίο επιστρέφει ένα μήνυμα που ονομάζει το πεδίο, ποτέ μια εξαίρεση. Τα ρήματα παρατήρησης (σημειωμένα με ○) παραμένουν επιτρεπτά όσο ένας άνθρωπος κρατά τον έλεγχο· τα μεταλλακτικά ρήματα απορρίπτονται.
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 s), type, wait○ (0–60 s), set_display,
clipboard_read○, clipboard_write.
Οι συντεταγμένες είναι pixel του φιλοξενούμενου στην τρέχουσα λειτουργία του
φιλοξενούμενου· κάθε στιγμιότυπο δηλώνει το μέγεθος της οθόνης. Οι συνδυασμοί
πλήκτρων χρησιμοποιούν τη γραφή του X11 (ctrl+s, alt+Tab, Return).
Το clipboard_read δέχεται ένα selection: clipboard (ό,τι γεμίζει το
ctrl+C, η προεπιλογή), primary (επιλογή-για-αντιγραφή του X11) ή xdnd (ένα
σύρσιμο σε εξέλιξη). Ένα κενό αποτέλεσμα είναι κανονική απάντηση και για τα
τρία. Το clipboard_write δέχεται μόνο text — οι εικόνες και τα αρχεία
ταξιδεύουν στη δίοδο αρχείων, επειδή τα ορίσματα μιας ενέργειας διατηρούνται
στο μητρώο ελέγχου και τα byte μιας εικόνας δεν έχουν καμία δουλειά εκεί. Το
περιεχόμενο του προχείρου επιστρέφει περιφραγμένο ως μη αξιόπιστα δεδομένα.
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 s), clipboard_read○, clipboard_write.
Το περιεχόμενο της εξαγόμενης σελίδας επιστρέφει περιφραγμένο ως μη αξιόπιστα δεδομένα.
Ο περιηγητής έχει ακριβώς ένα πρόχειρο, οπότε το clipboard_read δεν δέχεται
selection. Και τα δύο ρήματα του προχείρου χρειάζονται ασφαλές
περιβάλλον: μια σελίδα που σερβίρεται μέσω απλού http:// δεν έχει καθόλου
API προχείρου, και το ρήμα το λέει αντί να αναφέρει ένα κενό — χρησιμοποιήστε
εκεί το type, που εισάγει στο σημείο του κέρσορα χωρίς να περάσει από
πρόχειρο.
mobile_use
Ενότητα με τίτλο «mobile_use»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, μόνο η εφαρμογή
που έχει την εστίαση μπορεί να διαβάσει το πρόχειρο.
ios_use
Ενότητα με τίτλο «ios_use»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· δεν καλεί ποτέ κέλυφος του ξενιστή.
Οι συντεταγμένες είναι points της οθόνης iOS, όχι pixel του στιγμιότυπου. Η ζωντανή ροή διατηρεί το σταθερό μέγεθος του προσομοιωτή και τον τοποθετεί με letterbox αντί να αλλάξει το μέγεθος της συσκευής. Η μεταφορά κειμένου προχείρου από τον ξενιστή στον προσομοιωτή και αντίστροφα χρησιμοποιεί την ίδια πολιτική άδειας ανά χρήστη και ανά κατεύθυνση όπως οι άλλοι σταθμοί· αρχεία και εικόνες δεν γίνονται δεκτά από τη δίοδο pasteboard του iOS.
Κάθε σταθμός δημιουργεί μια συσκευή CoreSimulator που του ανήκει και μια συνεδρία WebDriverAgent. Το κλείσιμό του σταματά το WebDriverAgent, τερματίζει και διαγράφει αυτή τη συσκευή και αφαιρεί την καταχώρισή της από το μητρώο. Οι σταθμοί iOS εκτελούνται μόνο σε διακομιστή macOS με Xcode, εγκατεστημένο runtime iOS και την καθηλωμένη γέφυρα αυτοματοποίησης. Δεν παρέχουν εγγύηση για ήχο, μικρόφωνο, απόθεση αρχείων, κέλυφος ξενιστή ή περίκλειστο δίκτυο.
Εργαλεία διαχείρισης
Ενότητα με τίτλο «Εργαλεία διαχείρισης»| Εργαλείο | Περιγραφή |
|---|---|
rig_list |
Παραθέτει τους σταθμούς ενός χώρου εργασίας με επιφάνεια, κατάσταση, οθόνη και ελεγκτή |
rig_close |
Καταστρέφει έναν σταθμό και απορρίπτει τον δίσκο του |
Κύκλος ζωής
Ενότητα με τίτλο «Κύκλος ζωής»| Φάση | Σημασία |
|---|---|
provisioning |
Εκκίνηση· η λεπτομέρεια κατάστασης μεταφέρει το τρέχον βήμα αυτολεξεί |
ready |
Προσβάσιμος και δέχεται ενέργειες |
parked |
Σε παύση αδράνειας: οι vCPU σταματούν, η RAM παραμένει στη μνήμη· η επόμενη ενέργεια τον ξυπνά |
closing |
Τερματισμός |
closed |
Έφυγε· η εγγραφή επιβιώνει για το ίχνος ελέγχου |
failed |
Πέθανε ή δεν ξεκίνησε ποτέ· ξεχωρίζει ώστε η διεπαφή να μπορεί να προσφέρει επανάληψη |
| Αιτία κλεισίματος | Ενεργοποιείται όταν |
|---|---|
requested |
Το ζήτησε ένας άνθρωπος ή ένας πράκτορας |
idleTimeout |
Αδράνεια πέραν του διπλάσιου του παραθύρου αδράνειας, ή αποβολή λόγω μνήμης |
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, μετρημένο σε megabyte που παραμένουν δεσμευμένα (μια σταθμευμένη VM κρατά ακόμη τη RAM της). Η αποβολή γίνεται με κριτήριο τη λιγότερο πρόσφατη χρήση και δεν παίρνει ποτέ μια μηχανή που κάποιος οδηγεί, παρακολουθεί ή έχει ανοιχτό τερματικό μέσα της.
- Ένα ανοιχτό τερματικό ή μια δίοδος παρακολούθησης καθηλώνει τον σταθμό ώστε να μην παρκάρει και να μη συγκομίζεται λόγω αδράνειας· το σκληρό TTL ισχύει ακόμη.
Θύρες και domains ανάπτυξης
Ενότητα με τίτλο «Θύρες και domains ανάπτυξης»| Θύρα | Πού | Δεσμευμένη για |
|---|---|---|
7911 |
Φιλοξενούμενο τερματικού | Τον πολυπλέκτη θυρών πάνω στον οποίο ταξιδεύει κάθε προώθηση |
9222, 9223 |
Φιλοξενούμενο περιηγητή | Το ρελέ και το τελικό σημείο αυτοματοποίησης (το WebKit δεσμεύει απευθείας το 9222 και δεν χρησιμοποιεί ρελέ) |
80, 443 |
Loopback φιλοξενούμενου περιηγητή | Τις διόδους HTTP/HTTPS των domains ανάπτυξης |
- Η ανακάλυψη δειγματοληπτεί τις θύρες TCP σε ακρόαση του φιλοξενούμενου τερματικού κάθε ~4 s, στην πλευρά του διακομιστή.
- Το πολύ 16 θύρες προωθούνται αυτόματα ανά σταθμό· περισσότερες καταγράφονται στο αρχείο καταγραφής, δεν προωθούνται.
- Η προώθηση στην πλευρά του ξενιστή δεσμεύει loopback, προτιμώντας τον ίδιο αριθμό θύρας του φιλοξενούμενου· η Κοινή χρήση στο τοπικό δίκτυο προσθέτει μια θύρα LAN που εκχωρεί το λειτουργικό σύστημα.
- Τα domains ανάπτυξης πρέπει να ταιριάζουν με
name.testήname.localhost(πεζά, ετικέτα έως 63 χαρακτήρες). Ένα domain αντιστοιχίζεται σε μία θύρα. - Το HTTPS των domains ανάπτυξης χρησιμοποιεί μια τοπική για τον διακομιστή
αρχή έκδοσης πιστοποιητικών (EC P-256, κάτω από
<dataDir>/rigs/tls/, κλειδιά 0600 και ποτέ μέσα σε φιλοξενούμενο) με ένα φύλλο μπαλαντέρ για*.test/*.localhost. Χωρίςopensslστον ξενιστή δεν υπάρχει δίοδος HTTPS· το απλό HTTP δρομολογείται ακόμη.
Προεπιλογές εξερχόμενης κίνησης
Ενότητα με τίτλο «Προεπιλογές εξερχόμενης κίνησης»| Επιφάνεια | Προεπιλεγμένη λίστα επιτρεπόμενων |
|---|---|
| Τερματικό | Η βασική γραμμή του προγραμματιστή στο sandbox (κεντρικοί υπολογιστές κώδικα, μητρώα πακέτων, πάροχοι μοντέλων) + οι καθρέφτες apt του Ubuntu + ο δικός του κεντρικός υπολογιστής κώδικα του worktree |
| Περιηγητής | usectrl.dev (ο ιστότοπος του προϊόντος) — συν τα αποθετήρια Debian στην πρώτη εκκίνηση κάθε μηχανής, όσο εγκαθιστά τα πακέτα της. Η αρχική σελίδα είναι ένα τοπικό έγγραφο file:// και δεν χρειάζεται εξερχόμενη κίνηση |
| Υπολογιστής | Κενή — απόρριψη όλων — μέχρι ο καλών να παραχωρήσει κεντρικούς υπολογιστές |
| Κινητό | Δεν επιβάλλεται (δικτύωση διαχειριζόμενη από τον εξομοιωτή) |
Κάθε microVM παίρνει επιπλέον τους κεντρικούς υπολογιστές του registry της εικόνας του, μόνο για το pull. Το σύνολο επιτρεπόμενων κεντρικών υπολογιστών του μεσίτη διαπιστευτηρίων προκύπτει από την ίδια λίστα επιτρεπόμενων: δεν εκδίδεται token για κεντρικό υπολογιστή που το φιλοξενούμενο δεν μπορεί να προσεγγίσει.
Πρόχειρο και μεταφορά αρχείων
Ενότητα με τίτλο «Πρόχειρο και μεταφορά αρχείων»Και οι δύο κατευθύνσεις αντιγραφής/επικόλλησης, καθώς και το σύρσιμο αρχείων μέσα και έξω. Διαθέσιμα σε έναν άνθρωπο που οδηγεί έναν σταθμό· ένας πράκτορας παίρνει το πρόχειρο μέσα από τα παραπάνω ρήματα και καμία μεταφορά αρχείων (έχει ήδη ένα κέλυφος μέσα στο περίβλημα).
Η διέλευση του προχείρου είναι ανά χρήστη και ανά κατεύθυνση. Η επικόλληση από τον ξενιστή στον σταθμό επιτρέπεται εξ ορισμού· η αντιγραφή από τον σταθμό στον ξενιστή ζητά επιβεβαίωση (παραχώρηση δέκα λεπτών ή «Να επιτρέπεται πάντα» στις Ρυθμίσεις → Διακομιστής → Σταθμοί → Πρόσβαση στο πρόχειρο). Οι δύο επιλογές είναι ανεξάρτητες και δεν αποτελούν ποτέ ρύθμιση χώρου εργασίας.
| Δίοδος | Διαδρομή | Μεταφέρει |
|---|---|---|
| Πρόχειρο | GET/POST /rig/clipboard/<rigId> |
Κείμενο, ένα PNG/JPEG (≤16 MB) και τις διαδρομές των αρχείων στο πρόχειρο μέσα στο φιλοξενούμενο |
| Αρχεία | POST /rig/files/<rigId> |
Έως 64 αρχεία, ≤256 MB το καθένα και ≤512 MB ανά απόθεση, με προαιρετικό σημείο απόθεσης σε pixel του φιλοξενούμενου |
| Αρχεία | GET /rig/files/<rigId>?p=<base64url path> |
Τα byte ενός αρχείου, προς τα έξω |
- HTTP, όχι RPC. Η υποδοχή RPC κλείνει μια σύνδεση σε εισερχόμενο πλαίσιο πάνω από 256 KB — έναν φραγμό DoS σωστό για εντολές JSON και θανάσιμο για ένα επικολλημένο στιγμιότυπο. Τα byte ταξιδεύουν στο ίδιο είδος διαδρομής που χρησιμοποιούν ήδη τα καρέ των σταθμών και ο ήχος των συσκέψεων.
- Επαλήθευση ταυτότητας είναι ο υπογεγραμμένος στόχος
rig-files:<workspaceId>/<rigId>συν η ιδιότητα μέλους του χώρου εργασίας — ένας δικός του στόχος, ώστε ένα URL που εκδόθηκε για να παρακολουθεί μια μηχανή να μην μπορεί επίσης να γράψει αρχεία μέσα της. - Η ανάληψη ελέγχου ισχύει. Η εγγραφή στο πρόχειρο και η απόθεση αρχείων είναι μεταλλακτικές και απορρίπτονται όσο κάποιος άλλος κρατά τον έλεγχο· η ανάγνωση του προχείρου και η ανάγνωση ενός αρχείου προς τα έξω είναι παρατήρηση και δεν απορρίπτονται.
- Πού προσγειώνονται οι αποθέσεις:
~/Drops(επιφάνεια εργασίας),~/drops(τερματικό — δίπλα στο worktree, ποτέ μέσα του, ώστε μια απόθεση να μην εμφανίζεται ποτέ ως μη παρακολουθούμενη αλλαγή),/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(συγκομιδή λόγω αδράνειας, TTL ή μνήμης, μαζί με τον πράκτορα που το οδηγούσε). Το άνοιγμα ενός σταθμού δεν είναι γεγονός. Δείτε τα γεγονότα τομέα. - Αποθήκευση:
rig_sessionsκαιrig_action_logστη βάση δεδομένων κάθε χώρου εργασίας. Το αρχείο καταγραφής ενεργειών καταγράφει κάθε συμβάν εισόδου με την οντότητα που το προκάλεσε και μια μονότονη ακολουθία ανά σταθμό· το κείμενο που πληκτρολογήθηκε αποκρύπτεται σε ένα μήκος και ένα hash πριν γραφτεί. - Κατάλογος δεδομένων:
rigs/images/(εισηγμένες εικόνες qcow2),rigs/smolvm/(κατάσταση χρόνου εκτέλεσης ανά σταθμό),rigs/smolvm-packs/(προ-εξαγμένα πακέτα μηχανής),rigs/tls/(η αρχή έκδοσης πιστοποιητικών των domains ανάπτυξης),rigs/run/(overlay και seeds του QEMU). - Διαδρομές: η ζωντανή προβολή είναι μια καρτέλα σε έναν χώρο ή σε μια σελίδα
PR· το
/settings/server/rigsείναι η οθόνη ρυθμίσεων των Σταθμών.