Μετάβαση στο περιεχόμενο

Χώροι εργασίας και απομόνωση

Ένας χώρος εργασίας είναι ο μισθωτής απομόνωσης ανώτατου επιπέδου στο Control Center. Ομαδοποιεί πράκτορες, αποθετήρια, χώρους, εισιτήρια, μνήμη, pipeline και μέλη σε ένα οριοθετημένο πλαίσιο. Ό,τι συμβαίνει μέσα σε έναν χώρο εργασίας παραμένει μέσα σε αυτόν.

Ένας τυπικός χώρος εργασίας αντιστοιχίζεται σε ένα έργο ή μία βάση κώδικα. Μπορεί να έχετε ξεχωριστούς χώρους εργασίας για τα «api-service», «frontend-v2» και «infrastructure».

Οι εγγραφές ενός χώρου εργασίας ζουν στο δικό του αρχείο SQLite, στο <dataDir>/<workspaceId>/workspace.db. Κάθε χώρος εργασίας παίρνει έναν κατάλογο αντί για ένα σκέτο αρχείο, επειδή ένας χώρος εργασίας συσσωρεύει περισσότερα από μια βάση δεδομένων — worktrees ανά συνομιλία, τα αρχεία πράκτορα και δεξιοτήτων, διαπιστευτήρια chat bot — και το να του δώσετε φάκελο σημαίνει ότι όλα αυτά ζουν και διαγράφονται μαζί.

Οντότητα Εμβέλεια
Πράκτορες Ανήκουν σε ακριβώς έναν χώρο εργασίας
Αποθετήρια Καταχωρίζονται σε έναν χώρο εργασίας (δείτε παρακάτω)
Χώροι, συνομιλίες και μηνύματα Εμβέλεια χώρου εργασίας
Εισιτήρια, έργα, σχέδια, ενορχηστρώσεις Εμβέλεια χώρου εργασίας
Γεγονότα μνήμης, πολιτικές, τομείς, παραχωρήσεις πρόσβασης Εμβέλεια χώρου εργασίας
Εκτελέσεις pipeline, πρότυπα, ενεργοποιητές Εμβέλεια χώρου εργασίας
Κατάσταση pull request, χώροι ελέγχου, κοόρτες ελέγχου Εμβέλεια χώρου εργασίας
Αρχεία καταγραφής εκτελέσεων πράκτορα και μνήμη εργασίας Εμβέλεια χώρου εργασίας
Μέλη, προσκλήσεις, παραχωρήσεις ανά αποθετήριο Εμβέλεια χώρου εργασίας
Σύμβολα και ακμές του γραφήματος κώδικα Εμβέλεια κατά repoId μέσα στο αρχείο του χώρου εργασίας

Οι περισσότερες από αυτές τις εγγραφές φέρουν στήλη workspaceId· ξεχωριστά αρχεία βάσης δεδομένων επιβάλλουν την απομόνωση. Δείτε την αναλλοίωτη συνθήκη απομόνωσης παρακάτω.

Τα αποθετήρια έχουν εμβέλεια χώρου εργασίας· η ταυτότητα μεταξύ χώρων εργασίας είναι κατά διαδρομή

Ενότητα με τίτλο «Τα αποθετήρια έχουν εμβέλεια χώρου εργασίας· η ταυτότητα μεταξύ χώρων εργασίας είναι κατά διαδρομή»

Μια εγγραφή αποθετηρίου ζει στο δικό του αρχείο βάσης δεδομένων του χώρου εργασίας — το αρχείο είναι η εμβέλεια, οπότε ο πίνακας δεν έχει στήλη workspaceId ούτε πίνακα συνένωσης.

Προσθέτετε ένα αποθετήριο σε έναν χώρο εργασίας στις Ρυθμίσεις → Χώρος εργασίας → Αποθετήρια. Η καταχώριση του ίδιου checkout σε δύο χώρους εργασίας δημιουργεί δύο ανεξάρτητες εγγραφές με δύο αναγνωριστικά· η ταυτότητα του αποθετηρίου μεταξύ χώρων εργασίας είναι κατά διαδρομή συστήματος αρχείων (ή κατά ιδιοκτήτη/όνομα στο GitHub), ποτέ κατά αναγνωριστικό.

Η καταχώριση είναι αυστηρή: η διαδρομή πρέπει να βρίσκεται μέσα σε ένα δέντρο εργασίας git, πρέπει να έχει ένα απομακρυσμένο origin και αυτό το απομακρυσμένο να δείχνει σε έναν υποστηριζόμενο κεντρικό υπολογιστή κώδικα (github.com, gitlab.com ή bitbucket.org). Ο κεντρικός υπολογιστής κώδικα διαβάζεται από το απομακρυσμένο και αποθηκεύεται στο αποθετήριο, οπότε ένας χώρος εργασίας μπορεί να κρατά αποθετήρια και από τους τρεις. Οτιδήποτε άλλο απορρίπτεται. Ο περιηγητής φακέλων από τον οποίο επιλέγετε απαριθμεί το σύστημα αρχείων του κεντρικού υπολογιστή του διακομιστή, περιορισμένος στη λίστα επιτρεπόμενων --repo-roots του διακομιστή (η οποία έχει ως προεπιλογή τον αρχικό κατάλογο του χρήστη του διακομιστή).

Η αφαίρεση ενός αποθετηρίου από έναν χώρο εργασίας διαγράφει την εγγραφή οριστικά και συμπαρασύρει τα σύμβολα κώδικα, τις ακμές, τα αρχεία, τα σημεία ελέγχου του ευρετηρίου και τις παραχωρήσεις ανά μέλος. Το checkout στον δίσκο μένει άθικτο.

Το γράφημα κώδικα ζει στο ίδιο αρχείο, με κλειδί το repoId, επειδή διαφορετικοί χώροι εργασίας μπορεί να έχουν το ίδιο αποθετήριο σε διαφορετικούς κλάδους με διαφορετικό κώδικα.

Οι διαρροές δεδομένων μεταξύ χώρων εργασίας αντιμετωπίζονται ως σφάλματα. Η απομόνωση είναι δομική και επιβάλλεται σε πολλά επίπεδα:

  • Επίπεδο βάσης δεδομένων. Κάθε χώρος εργασίας έχει το δικό του αρχείο SQLite, που το παραχωρεί το WorkspaceDatabaseManager.of(workspaceId). Μια βάση δεδομένων χώρου εργασίας δεν δηλώνει τους πίνακες users, workspaces ή οποιουδήποτε άλλου χώρου εργασίας, οπότε μια ανάγνωση μεταξύ χώρων εργασίας δεν είναι σφάλμα που μπορείτε να γράψετε — δεν μεταγλωττίζεται. Τα αποθετήρια επιλύουν το DAO τους ανά κλήση αντί να το αποθηκεύουν στην προσωρινή μνήμη και, επειδή κάθε μέθοδος αποθετηρίου παίρνει υποχρεωτικό workspaceId, ο χώρος εργασίας δεν μπορεί ποτέ να συναχθεί ούτε να λάβει προεπιλεγμένη τιμή.
  • Το αναγνωριστικό του χώρου εργασίας είναι τμήμα διαδρομής. Επειδή το αναγνωριστικό γίνεται όνομα καταλόγου, πρέπει να ταιριάζει με ένα ασφαλές μοτίβο ενός μόνο τμήματος (ξεκινά με αλφαριθμητικό, μετά αλφαριθμητικά, τελείες, κάτω παύλες, παύλες· όχι ..). Τα αναγνωριστικά είναι UUID παντού στο προϊόν. Οτιδήποτε άλλο πετάει εξαίρεση αντί να καθαριστεί — αυτός είναι ο φύλακας κατά της διαπέρασης διαδρομών και αποτυγχάνει θορυβωδώς αντί να γράψει τα δεδομένα ενός χώρου εργασίας σε διαδρομή που διάλεξε κάποιος άλλος.
  • Άμυνα σε βάθος. Οι στήλες workspaceId είναι ακόμη εκεί και εξακολουθούν να γράφονται. Πλεονασματικές μέσα σε ένα αρχείο, κρατούν αμετάβλητους τους ενεργοποιητές της ροής συγχρονισμού, τα ευρετήρια FTS και τα υπάρχοντα σχήματα εγγραφών, και κάνουν ένα αρχείο αυτοπεριγραφόμενο όταν εξετάζεται μόνο του — κάτι στο οποίο βασίζονται η εξαγωγή και η εισαγωγή.
  • Επίπεδο τομέα. Οι υπηρεσίες που μεταβάλλουν οντότητες κατά αναγνωριστικό επικυρώνουν το entity.workspaceId == workspaceId σε ένα μόνο σημείο ελέγχου πριν προχωρήσουν και πετούν WorkspaceMismatchException σε περίπτωση ασυμφωνίας — η θορυβώδης αποτυχία για ένα αναγνωριστικό που έφτασε από λάθος πλαίσιο. Η θορυβώδης άρνηση έχει σημασία: μια σιωπηλή ενέργεια που δεν κάνει τίποτα κρύβει το σφάλμα, ενώ η συνέχιση προκαλεί διαρροή.
  • Επίπεδο RPC. Ο αποστολέας repo-RPC είναι το σημείο ελέγχου. Κάθε ενέργεια με εμβέλεια χώρου εργασίας πρέπει να φέρει workspace_id στα δικά της ορίσματα — δεν υπάρχει «τρέχων χώρος εργασίας» ανά συνεδρία για να διαρρεύσει, και ένα άγνωστο αναγνωριστικό απορρίπτεται ως μη βρέθηκε πριν ανοίξει οτιδήποτε βάση δεδομένων, ώστε ένα κακό αναγνωριστικό να μην μπορεί να υλοποιήσει ένα φάντασμα workspace.db. Γνήσια καθολικές ενέργειες (η ροή ειδήσεων, η ουρά του στόλου) δηλώνουν τον εαυτό τους χωρίς εμβέλεια ως ρητή απόφαση που έχει περάσει από έλεγχο. Τα εργαλεία MCP ακολουθούν τον ίδιο κανόνα: κάθε εργαλείο που αγγίζει δεδομένα με εμβέλεια χώρου εργασίας απαιτεί workspace_id.
  • Η διασπορά μεταξύ χώρων εργασίας είναι απαριθμήσιμη. Η απάντηση σε μια ερώτηση για πολλούς χώρους εργασίας σημαίνει άνοιγμα πολλών βάσεων δεδομένων. Αυτή η διασπορά περιορίζεται σε ένα βοηθητικό στοιχείο, το CrossWorkspaceQueries, ώστε ο πλήρης κατάλογος των πραγμάτων που διαπερνούν νόμιμα το όριο να βρίσκεται στα σημεία κλήσης ενός αρχείου αντί να διαχέεται πίσω από σχόλια τεκμηρίωσης. Τα σημεία κλήσης αυτά είναι: συγκέντρωση σε επίπεδο διακομιστή, εργασίες συμφιλίωσης κατά την εκκίνηση, σαρώσεις διατήρησης και GC, δημιουργία αντιγράφων ασφαλείας, δρομολογητές γεγονότων — και η αναζήτηση μέλους παρακάτω.
  • Η πρόσβαση μόνο με αναγνωριστικό δεν αρκεί. Η αναζήτηση μιας οντότητας με το UUID της δεν αποδεικνύει ότι ανήκει στον χώρο εργασίας του καλούντος. Ο διαχωρισμός αρχείων κάνει το λάθος αρχείο μη προσπελάσιμο· η επικύρωση στο επίπεδο τομέα πιάνει ένα λάθος αναγνωριστικό που φτάνει μέσα από ένα νόμιμο αρχείο.

Η ιδιότητα μέλους, όχι το κλειδί σύζευξης, είναι αυτό που παραχωρεί πρόσβαση

Ενότητα με τίτλο «Η ιδιότητα μέλους, όχι το κλειδί σύζευξης, είναι αυτό που παραχωρεί πρόσβαση»

Η κατοχή ενός διαπιστευτηρίου συσκευής επαληθεύει την ταυτότητα μιας συσκευής. Δεν εξουσιοδοτεί τίποτα μέσα σε έναν χώρο εργασίας. Κάθε ενέργεια με εμβέλεια χώρου εργασίας επιλύει τον ρόλο μέλους του καλούντος και επιβάλλει ένα κατώτατο όριο που προκύπτει από το είδος της ενέργειας — η ανάγνωση χρειάζεται guest, μια μετάλλαξη χρειάζεται member, μια καταστρεπτική ενέργεια χρειάζεται admin — και οι ενέργειες που εκθέτουν περιεχόμενο αποθετηρίου ελέγχουν επιπλέον την παραχώρηση του καλούντος ανά αποθετήριο. Ένα έγκυρο κλειδί σύζευξης χωρίς ιδιότητα μέλους λαμβάνει Not a member of this workspace.

Η συνέπεια για την απομόνωση είναι κομψή: οι εγγραφές των μελών ζουν στο δικό του αρχείο του χώρου εργασίας, οπότε το «ποιοι είναι σε αυτόν τον χώρο εργασίας;» είναι μια συνηθισμένη ανάγνωση με εμβέλεια. Η αντίστροφη ερώτηση — «σε ποιους χώρους εργασίας βρίσκομαι;» — είναι εξ ορισμού κατανεμημένη σε πολλά αρχεία, οπότε είναι μία από τις λίγες εγκεκριμένες διασπορές του CrossWorkspaceQueries και είναι αυτή που εκτελεί ο επιλογέας χώρου εργασίας πριν επιλεγεί οποιοσδήποτε χώρος εργασίας.

Δείτε τη Συνεργασία και παρουσία για την κλίμακα ρόλων και τις παραχωρήσεις αποθετηρίων.

Δεν έχουν όλα εμβέλεια χώρου εργασίας. Μια δεύτερη βάση δεδομένων, το <dataDir>/global.db, περιέχει ό,τι είναι γνήσια σε επίπεδο διακομιστή:

  • το μητρώο χώρων εργασίας, ώστε ο εναλλαγέας να μπορεί να απαριθμεί κάθε χώρο εργασίας χωρίς να ανοίξει ούτε ένα αρχείο χώρου εργασίας — και ώστε το όνομα, το λογότυπο, ο ιδιοκτήτης, η χειροκίνητη σειρά και ο δείκτης μαλακής διαγραφής ενός χώρου εργασίας να βρίσκονται έξω από το αρχείο που περιγράφουν;
  • ταυτότητα: χρήστες, προτιμήσεις χρήστη και συζευγμένες συσκευές, επειδή ένας άνθρωπος είναι ένας χρήστης σε κάθε χώρο εργασίας και μια συζευγμένη συσκευή επιβιώνει από τη διαγραφή ενός χώρου εργασίας;
  • την ουρά του στόλου (εργάτες, εργασίες, αρχείο καταγραφής τοποθέτησης), της οποίας ο χρονοπρογραμματιστής αντιπαραβάλλει ολόκληρη την ουρά με κάθε εργάτη σε κάθε κύκλο;
  • τη ροή ειδήσεων, η οποία είναι ανά χρήστη (όχι ανά χώρο εργασίας) — η προσθήκη μιας ροής σας ακολουθεί σε κάθε χώρο εργασίας;
  • το workspace_routes, το ευρετήριο πριν από τον έλεγχο ταυτότητας που απαντά «ποιος χώρος εργασίας κατέχει αυτό το κλειδί;» για σημεία εισόδου που φτάνουν με τίποτα άλλο παρά ένα μυστικό ή ένα αδιαφανές αναγνωριστικό (έναν κατακερματισμό πρόσκλησης, ένα token webhook, έναν βαθύ σύνδεσμο) και χωρίς χώρο εργασίας. Μια αστοχία εκεί είναι μη βρέθηκε· σκόπιμα δεν υπάρχει εφεδρική σάρωση;
  • ρυθμίσεις και ταυτότητα σε επίπεδο εγκατάστασης: το αναγνωριστικό της εγκατάστασης, ρυθμίσεις σε επίπεδο κεντρικού υπολογιστή, συνδέσεις SSO και πολιτικές διαχειριζόμενων ενεργειών (ένας περιορισμός σε επίπεδο εγκατάστασης που μπορεί μόνο να στενέψει τους περιορισμούς του χώρου εργασίας).

Η εκκίνηση ανοίγει μόνο αυτό το αρχείο. Τα αρχεία χώρων εργασίας ανοίγουν καθυστερημένα με το πρώτο άγγιγμα, ώστε το κόστος εκκίνησης να μένει σταθερό ανεξάρτητα από το πόσο ιστορικό συσσωρεύουν οι χώροι εργασίας και το quick_check ανά αρχείο να πληρώνεται με την πρώτη χρήση και όχι στη διαδρομή προς το πανό ετοιμότητας.

Ένα αρχείο χώρου εργασίας φέρει μόνο ένα workspace_meta μιας εγγραφής για αυτοπροσδιορισμό (το αναγνωριστικό του, την εγκατάσταση που το δημιούργησε, την έκδοση σχήματος με την οποία δημιουργήθηκε, πότε). Όλα τα περιγραφικά στοιχεία ενός χώρου εργασίας βρίσκονται στο μητρώο.

Η δημιουργία ενός χώρου εργασίας κάνει περισσότερα από το να εισάγει μια εγγραφή στο μητρώο. Σε μία ενέργεια, ο διακομιστής σφραγίζει τον χρήστη που δημιουργεί ως ownerUserId, καταγράφει την ιδιότητα μέλους του χρήστη αυτού με ρόλο ιδιοκτήτη και δημοσιεύει ένα γεγονός τομέα WorkspaceCreated. Οι ακροατές αυτού του γεγονότος τροφοδοτούν κατόπιν, με τρόπο ιδιοδύναμο και στο παρασκήνιο:

  • έναν πράκτορα CEO και τέσσερις ειδικούς — qa, architect, engineer, librarian — με τους ειδικούς να αναφέρονται στον CEO;
  • τα ενσωματωμένα πρότυπα pipeline και τους ενεργοποιητές τους (οι ενεργοποιητές γεγονότος και οι χειροκίνητοι παραδίδονται ενεργοποιημένοι· οι προγραμματισμένοι είναι προαιρετικοί, εκτός από τη νυχτερινή σάρωση GC των worktrees);
  • τις αρχικές σουίτες αξιολόγησης.

Αυτό συμβαίνει για κάθε χώρο εργασίας, όχι μόνο για τον πρώτο. Οι πράκτορες που εφοδιάζονται δημιουργούνται χωρίς προσαρμογέα, οπότε εκτελούνται στο Control Center (built-in) με το προεπιλεγμένο μοντέλο της Anthropic (claude-opus-4-8, εκτός αν ορίσετε κάποιο άλλο) μέχρι να ορίσετε προσαρμογέα και μοντέλο ανά πράκτορα στις Ρυθμίσεις → Χώρος εργασίας → Πράκτορες. Δείτε Το μοντέλο πρακτόρων.

Η εγγραφή της ιδιότητας μέλους του ιδιοκτήτη έχει μεγαλύτερη σημασία απ’ ό,τι φαίνεται: χωρίς αυτήν, ο νεοδημιουργημένος χώρος εργασίας δεν θα είχε μέλη και κάθε κλήση με εμβέλεια χώρου εργασίας που θα έκανε στη συνέχεια ο δημιουργός θα απορριπτόταν.

Η διαγραφή ενός χώρου εργασίας σημαδεύει την εγγραφή του μητρώου και αποσυνδέει τον κατάλογο. Ο χώρος εργασίας εξαφανίζεται από κάθε λίστα και κάθε αναζήτηση. Η εγγραφή του μητρώου παραμένει (μαλακά διαγραμμένη) ώστε το αναγνωριστικό να είναι ακόμη γνωστό στο αντίγραφο ασφαλείας και στη συντήρηση, αλλά το workspace.delete απορρίπτει αμέσως τον κατάλογο αυτού του χώρου εργασίας — βάση δεδομένων, worktrees, αρχεία πράκτορα και τα λοιπά — μέσω του WorkspaceDatabaseManager.dropAndClose. Μόνο ο ιδιοκτήτης του χώρου εργασίας μπορεί να τον διαγράψει.

Επειδή ένας χώρος εργασίας είναι ένα αρχείο, το να δώσετε έναν χώρο εργασίας αλλού είναι λειτουργία αρχείου και όχι εξαγωγή πίνακα προς πίνακα:

  • το workspace.export είναι ένα μόνο VACUUM INTO — ένα συνεπές, αποσυμπιεσμένο στιγμιότυπο που λαμβάνεται μέσα σε συναλλαγή ανάγνωσης ενώ ο διακομιστής συνεχίζει να εξυπηρετεί.
  • το workspace.import υιοθετεί ένα τέτοιο αρχείο, αντικαθιστώντας ό,τι κρατά αυτή τη στιγμή ο χώρος εργασίας-στόχος. Το ενσωματωμένο workspace_meta επιτρέπει σε μια εισαγωγή να ξεχωρίσει το «δικό μου αρχείο, που υιοθετήθηκε ξανά» από «ένα αρχείο από άλλη εγκατάσταση» (το δεύτερο επιτρέπεται, αλλά καταγράφεται αντί να μένει αόρατο).
  • το server.backupNow αποτυπώνει ολόκληρη την εγκατάσταση σε έναν κατάλογο με χρονοσφραγίδα που καθρεφτίζει τον ζωντανό κατάλογο δεδομένων — manifest.json, global.db και ένα <workspaceId>/workspace.db ανά χώρο εργασίας — ώστε η επαναφορά να είναι αντιγραφή του πίσω.
  • το server.listBackups διαβάζει πίσω αυτόν τον κατάλογο, από το νεότερο προς το παλαιότερο, με το μέγεθος και τη λίστα χώρων εργασίας κάθε στιγμιότυπου. Ένα στιγμιότυπο του οποίου το manifest λείπει ή ονομάζει αρχεία που δεν υπάρχουν εξακολουθεί να αναφέρεται, επισημασμένο ως ελλιπές — το να το κρύψετε είναι ο τρόπος με τον οποίο ένας διαχειριστής φτάνει να πιστεύει ότι έχει ένα αντίγραφο ασφαλείας που δεν έχει.

Οι λειτουργίες αντιγράφων ασφαλείας βρίσκονται στις Ρυθμίσεις → Διακομιστής → Αντίγραφο ασφαλείας και επαναφορά: το Αντίγραφο ασφαλείας τώρα λαμβάνει ένα στιγμιότυπο της εγκατάστασης, η λίστα δείχνει ποια στιγμιότυπα είναι πλήρη και επιτρέπει στον ιδιοκτήτη της εγκατάστασης να διαγράψει ένα μετά από επιβεβαίωση, και κάθε χώρος εργασίας προσφέρει εξαγωγή και εισαγωγή. Το ενσωματωμένο pipeline Workspace backup παίρνει μόνο τη βάση δεδομένων αυτού του χώρου εργασίας σε εβδομαδιαίο πρόγραμμα και διαγράφει τα δικά του αντίγραφα ασφαλείας που είναι παλαιότερα από τη διαμορφωμένη ηλικία διατήρησης. Η επαναφορά ενός χώρου εργασίας από ένα στιγμιότυπο εγκατάστασης είναι workspace.import στραμμένο στο <workspaceId>/workspace.db του στιγμιότυπου· η επαναφορά ολόκληρης της εγκατάστασης παραμένει αντιγραφή προς τα πίσω του καταλόγου του στιγμιότυπου με τον διακομιστή σταματημένο.

Αυτό που δεν μεταφέρει κανένα από αυτά είναι ο υπόλοιπος κατάλογος του χώρου εργασίας. Ένας χώρος εργασίας συσσωρεύει περισσότερα από μια βάση δεδομένων — επικολλημένες εικόνες, αρχεία δεξιοτήτων και πρακτόρων, διαπιστευτήρια chat, worktrees — και η εξαγωγή και η εισαγωγή μετακινούν το αρχείο, οπότε ό,τι βρίσκεται δίπλα του μένει εκεί που είναι. Αυτό είναι σκόπιμο για τα διαπιστευτήρια και αναλώσιμο για τα worktrees· για τα υπόλοιπα είναι ένας περιορισμός που πρέπει να γνωρίζετε και όχι ένα χαρακτηριστικό. Η αναφορά αντιγράφων ασφαλείας έχει τον πλήρη πίνακα.

Μετακίνηση αντιγράφου ασφαλείας μεταξύ του διακομιστή και της συσκευής σας

Ενότητα με τίτλο «Μετακίνηση αντιγράφου ασφαλείας μεταξύ του διακομιστή και της συσκευής σας»

Κάθε ενέργεια παραπάνω μιλά με διαδρομές στον διακομιστή, που είναι πλήρης απάντηση μόνο όταν ο διακομιστής είναι το δικό σας μηχάνημα. Τρεις υπογεγραμμένες διαδρομές HTTP — /backup/workspace, /backup/snapshot και /backup/restore — μεταφέρουν τα byte για κάθε άλλη τοπολογία, στην ίδια πιστοποιημένη λωρίδα που χρησιμοποιούν ήδη ο μεσολαβητής πολυμέσων και η αποθήκη εικόνων. Στη σελίδα αυτό είναι ένα κουμπί Λήψη δίπλα σε κάθε εξαγωγή και κάθε στιγμιότυπο (επιλέγετε πού θα καταλήξει) και Επιλογή αρχείου και μεταφόρτωση για επαναφορά από αρχείο που βρίσκεται στο μηχάνημα που χρησιμοποιείτε. Η μεταφόρτωση είναι εκείνη που λειτουργεί όταν ο διακομιστής δεν είναι το μηχάνημά σας: το workspace.import χρειάζεται το αρχείο να βρίσκεται ήδη στο μηχάνημα-διακομιστή, και έτσι φτάνει εκεί.

Τρία χαρακτηριστικά αξίζει να γνωρίζετε:

  • Η λήψη παράγει ένα φρέσκο αντίγραφο και ο διακομιστής δεν κρατά τίποτα από αυτό. Η λήψη δεν είναι «πάρε το αρχείο που έφτιαξε το κουμπί εξαγωγής» — εξάγει ξανά, μεταδίδει αυτό και το διαγράφει. Η απόκριση είναι no-store με Accept-Ranges: none για τον ίδιο λόγο: ένα συνεχιζόμενο range θα συνέραπτε δύο διαφορετικές εξαγωγές σε ένα αρχείο που φαίνεται έγκυρο και δεν είναι.
  • Η μεταφόρτωση γίνεται με ροή προς τον δίσκο, ποτέ με ενδιάμεση αποθήκευση, και στα δύο άκρα, και το σταθμευμένο αντίγραφο διαγράφεται σε κάθε διαδρομή εξόδου — ακόμη και σε άρνηση. Μια βάση δεδομένων χώρου εργασίας δεν είναι στιγμιότυπο οθόνης.
  • Μια αναμεταδιδόμενη σύνδεση δεν έχει προέλευση HTTP, οπότε τα στοιχεία ελέγχου μεταφοράς είναι απενεργοποιημένα εκεί, με σημείωση που εξηγεί γιατί. Ό,τι μιλά με διαδρομές στην πλευρά του διακομιστή συνεχίζει να λειτουργεί μέσω της αναμετάδοσης· μόνο οι λωρίδες byte χρειάζονται άμεση σύνδεση.

Μπορείτε να εκτελέσετε πολλούς χώρους εργασίας παράλληλα. Καθένας λειτουργεί ανεξάρτητα: οι πράκτορες σε έναν χώρο εργασίας δεν μπορούν να στείλουν μήνυμα σε πράκτορες άλλου, δεν μπορούν να διαβάσουν τη μνήμη άλλου χώρου εργασίας και δεν μπορούν να δουν τα εισιτήριά του. Η επίλυση παραληπτών για μηνύματα πράκτορα προς πράκτορα είναι ακριβής και δεν διαπερνά ποτέ έναν χώρο εργασίας.

Δεν υπάρχει πίνακας ελέγχου μεταξύ χώρων εργασίας. Η επιφάνεια αναλυτικών στοιχείων στο /workspaces/:workspaceId/observability συνδρομείται σε μια οριοθετημένη καθολική ροή πρόσφατων εκτελέσεων και αμέσως την περιορίζει στον ενεργό χώρο εργασίας, οπότε αυτό που βλέπετε εκεί είναι ένας χώρος εργασίας τη φορά. Οι μόνες γνήσια επιφάνειες πολλών χώρων εργασίας που αγγίζει ένας άνθρωπος είναι ο επιλογέας χώρου εργασίας και ο εναλλαγέας.

Ένα πρακτικό όριο που αξίζει να γνωρίζετε: ένας χώρος εργασίας που τον χρησιμοποιεί κάποιος μένει ανοιχτός — δεν υπάρχει LRU. Πάνω από 32 από αυτούς, ο διακομιστής προειδοποιεί αντί να αρνείται, επειδή κάθε ανοιχτό αρχείο κρατά ένα isolate παρασκηνίου και μια προσωρινή μνήμη σελίδων. Η διασπορά μεταξύ χώρων εργασίας ανοίγει αρχεία παροδικά και τα κλείνει μετά, αν δεν τα έχει διεκδικήσει κάτι άλλο.