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

Work: απομονωμένοι χώροι εργασίας

Το Work είναι η εγγενής επιφάνεια coding-agent του Libre WebUI. Κάθε εργασία συνδυάζει μόνιμη συνομιλία, ρητή διαδρομή παρόχου και dedicated filesystem στο /workspace. Το μοντέλο εξετάζει/επεξεργάζεται αρχεία, εκτελεί εντολές σε task-scoped Docker container ή Kubernetes Pod και ξεκινά browser preview.

Υλοποιείται απευθείας στο Libre WebUI, χωρίς Libre Claw ή άλλο agent daemon.

Μόνο έμπιστοι χρήστες

Κάθε Work API απαιτεί πιστοποιημένο account με πρόσβαση. Default μόνο admins, που μπορούν να το ανοίξουν σε ενεργούς χρήστες από την καρτέλα User Management στις Ρυθμίσεις. Host-folder spaces μένουν admin-only επειδή bind-mountάρουν server paths. Το Work σκόπιμα επιτρέπει arbitrary shell commands σε sandbox και network egress εκτός αν named runtime policy το απενεργοποιεί. Όποιος έχει πρόσβαση είναι trusted runtime operator, όχι απλός chat user.

Κύρια σημεία έκδοσης

  • Ξεχωριστά Work και Chat actions στην κύρια sidebar.
  • Εργασίες στην κανονική sidebar με σταθερές θέσεις και άμεση διαγραφή.
  • Dedicated sandbox identity και μόνιμο Docker volume ή Kubernetes PVC ανά εργασία.
  • Μόνιμη συνομιλία, run state, tool activity, model, ownership στη βάση.
  • Live authenticated stream για assistant text, exposed reasoning, tools/results, usage, worker skills και αλλαγές state.
  • Server-owned skills που διδάσκουν inspection, editing, verification και preview χωρίς control files.
  • Tool-capable Ollama, Ollama Cloud και provider plugins.
  • Responsive Conversation/Workspace split με drag/keyboard και switcher σε μικρές οθόνες.
  • Files, Activity, Git, Terminal, Preview και Screen· Screen είναι ο Work Computer.
  • Light/dark syntax, formatting, conflict detection και temporary drafts.
  • Dismissible disclosure ανά χρήστη για remote provider.
  • Μεταφράσεις Work σε 25 locales, μαζί με Arabic RTL ενώ code/paths/IDs/output μένουν LTR.

Η μόνιμη μονάδα είναι το workspace, όχι continuously running container. Το Libre ξεκινά, σταματά ή αναδημιουργεί container διατηρώντας volume.

Αρχιτεκτονική

Το Libre, όχι model/browser, επιλέγει sandbox/workspace names, image, mount, user, limits, network mode και preview port. Το μοντέλο παίρνει μόνο:

  • list_files
  • read_file
  • write_file
  • delete_file
  • move_file
  • search_files
  • run_command
  • start_preview
  • stop_preview

delete_file και move_file είναι path-guarded: δεν βγαίνουν, δεν ακολουθούν symlink, ζητούν recursive flag για directory και δεν overwriteάρουν destination. Μέσω file helper λειτουργούν όταν preview τρέχει και run_command μπλοκάρεται.

Model requests γίνονται από backend, όχι Work container και ανεξάρτητα από network policy.

Απαιτήσεις

  • Docker backend: εγκατεστημένο Docker, reachable daemon και δικαίωμα εκτέλεσης docker ή WORK_DOCKER_COMMAND.
  • Kubernetes: API credentials, namespace Role/RoleBinding, sandbox namespace και NetworkPolicies από Helm με work.enabled=true.
  • Tool-capable μοντέλο από υγιές Ollama/Ollama Cloud ή ενεργό plugin με ακριβές model και admin credentials.
  • Storage για image, projects και dependencies.
  • Authenticated account. Default admin-only, προαιρετικά όλοι οι ενεργοί χρήστες.

Το Libre ελέγχει advertised Ollama capabilities και απορρίπτει χωρίς tools. Plugin πρέπει να υποστηρίζει tool protocol. Απόρριψη remote model αποτυγχάνει χωρίς σιωπηρή αλλαγή.

Τοπική έναρξη

docker info
npx libre-webui@latest

Ανοίξτε http://localhost:8080, συνδεθείτε admin, επιλέξτε Work, συμβατό model και περιγράψτε έργο.

Αν Docker λείπει/σταματά/δεν προσπελαύνεται, εμφανίζεται Runtime unavailable και disable Run. Ποτέ fallback σε host commands. Το runtime image ελέγχεται και κατεβαίνει στην πρώτη χρήση, που μπορεί να αργήσει.

Χρήση της διεπαφής Work

Δημιουργία και επιστροφή

Επιλέξτε Work, instruction, model, Run. Το πρώτο μήνυμα δημιουργεί εργασία, run, provider route και persistent workspace.

Η εργασία μένει στη sidebar. Reopen επαναφέρει conversation, Files, provider/model και workspace. Παλιά μηνύματα φορτώνονται σε pages. Μετονομασία και μόνιμη διαγραφή από menu/sidebar. Μόνο ένα active run· επόμενη instruction χρησιμοποιεί ίδια συνομιλία/filesystem.

Ο composer δέχεται dictation: browser speech API ή configured STT και προσθέτει transcript στο υπάρχον κείμενο. Δημιουργημένα/μετακινημένα αρχεία εμφανίζονται ως clickable chips κάτω από το tool activity και ανοίγουν Files (και workspace σε στενή οθόνη). Chips μόνο από mutating tools, άρα 20 reads/1 write δείχνει ένα artifact.

Πρόσληψη agent

Με περσόνες, Hire as an agent δημιουργεί μόνιμο named agent. Η persona διατηρείται μεταξύ runs· name/system prompt προηγούνται του Work prompt αλλά runtime contract πάντα υπερισχύει. Agents καρφιτσώνονται στην ομάδα Agents με avatar, indicator και status. Όταν το sidebar είναι σε compact μορφή, μένουν στη ράγα μόνο αυτά τα καρφιτσωμένα avatar agent· οι μεμονωμένες εργασίες Work επανεμφανίζονται όταν το sidebar ανοίξει.

Το status έχει δύο tiers. Για hired agent, ένα φθηνό no-tools call στο τέλος ζητά περίπου 8 λέξεις ("Inbox at zero. 2 replies ready."), μία γραμμή 90 chars. Failure/timeout πέφτει στην πρώτη γραμμή τελικής απάντησης. Ad hoc/failed μόνο deterministic και WORK_STATUS_BLURB_MODEL=0 απενεργοποιεί το call. Unread indicator χρησιμοποιεί μονότονο per-task seen marker synchronized σε συσκευές και δείχνει dot για terminal run μετά marker.

Ειδοποιήσεις: work-run-finished, work-run-attention, work-takeover. Το banner φαίνεται μόνο στο Screen, το push φτάνει αλλού και συνδέει στον agent.

Μπορείτε να προσλάβετε δική ή shared persona χωρίς να βλέπετε μνήμες ιδιοκτήτη. Αν διαγραφεί, agent συνεχίζει με warning. API δέχεται personaId, isAgent και persona σημαίνει agent.

Καρτέλα Agent

  • Identity: avatar, όνομα, activity, status.
  • Screen: με Work Computer, μικρό live view-only thumbnail, πραγματικός viewer που μετρά στο budget· click ανοίγει full Screen με takeover, teach, audio.
  • Routines: automations δεμένες στην εργασία. Κάθε fire χρησιμοποιεί ίδιο workspace/conversation/model/runtime, όχι νέα εργασία. Rows δείχνουν schedule και pause/resume, + Routine ήδη bound. Αν agent busy, αποτυγχάνει work-task-busy αντί queue.
  • Auto Review: ο διακόπτης εγκρίσεων του agent και οι κανόνες Always-allow που έχει συγκεντρώσει (αφαίρεση κανόνα κλείνει ξανά το εύρος του). Όταν η πολιτική της εργασίας επιβάλλει έλεγχο, ο διακόπτης κλειδώνει ανοιχτός.
  • Taught skills με enable/disable.

Συνδεδεμένα εργαλεία (διακομιστές MCP και OpenAPI)

Οι agents Work καλούν τους ίδιους διακομιστές εργαλείων που ρυθμίζονται για το chat — MCP ή OpenAPI, καταχωρισμένους από διαχειριστή στις Ρυθμίσεις → Εργαλεία. Στον agent εμφανίζονται με τα namespaced ονόματά τους (server__tool) και οι κλήσεις τρέχουν από το backend του Libre WebUI μέσω της θωρακισμένης πύλης εργαλείων (έξοδος με προστασία SSRF, διαπιστευτήρια ανά χρήστη, όρια μεγέθους και χρόνου), ποτέ μέσα από το sandbox.

Η προσφορά είναι ειλικρινής για το τι μπορεί πράγματι να χρησιμοποιήσει μια αυτόνομη εκτέλεση:

  • Offline εργασία δεν προσφέρει κανένα: με ή χωρίς έξοδο από το backend, εργασία χωρίς δίκτυο μένει offline — το ίδιο σκεπτικό με το web_search.
  • Διακομιστής που απαιτεί προσωπικό διαπιστευτήριο το οποίο ο χρήστης δεν έχει αποθηκεύσει φιλτράρεται κατά την προσφορά, γιατί μια αυτόνομη εκτέλεση δεν μπορεί να σταματήσει για να το ζητήσει. Προσθέστε το στις Ρυθμίσεις → Εργαλεία και η επόμενη εκτέλεση τον προσφέρει.
  • Ο τρόπος πρόσβασης εργαλείων (μόνο διαχειριστές ή όλοι) και η ορατότητα ανά διακομιστή ισχύουν ακριβώς όπως στο chat, ενώ οι δεσμεύσεις διακομιστών μιας περσόνας περιορίζουν ποιους διακομιστές βλέπει ο μισθωμένος agent της.
  • Με ενεργές εγκρίσεις, τα συνδεδεμένα εργαλεία που ο διακομιστής ταξινομεί ως με παρενέργεια παύουν για την απόφασή σας όπως κάθε ελεγχόμενη ενέργεια· τα μόνο για ανάγνωση τρέχουν χωρίς ερώτηση.

Ανάθεση μεταξύ agents (@-mentions)

Οι μισθωμένοι agents μπορούν να περνούν δουλειά ο ένας στον άλλο. Πληκτρολογήστε @ στο πλαίσιο σύνταξης του Work για να αναφέρετε άλλον agent σας· ο τρέχων agent βλέπει στις οδηγίες του τη λίστα των peers (ονόματα και status lines) και αναθέτει τα σχετικά αιτήματα με το εργαλείο message_agent. Η ανάθεση είναι συντονισμός με μηνύματα, σκόπιμα όχι με κοινούς υπολογιστές: κάθε agent κρατά δικό του απομονωμένο workspace και sandbox, και ο παραλήπτης δεν βλέπει τη συνομιλία που ανέθεσε — το αίτημα πρέπει να φέρει το δικό του context.

Η ανάθεση είναι ασύγχρονη. Το εργαλείο επιστρέφει αμέσως, ο agent-στόχος τρέχει στη δική του εργασία (η συνομιλία του δείχνει το αίτημα με ετικέτα Delegated by τον αποστολέα) και όταν τελειώσει — ολοκληρωμένο, χρειάζεται input, απέτυχε ή ακυρώθηκε — η τελική του απάντηση παραδίδεται πίσω στη συνομιλία του agent που ανέθεσε, ως μήνυμα με ετικέτα Report from τον συγκεκριμένο agent. Αν ο αναθέτων εκτελείται ακόμη, η αναφορά φτάνει στο μοντέλο του στον επόμενο γύρο· αν είναι αδρανής, απλώς περιμένει στη συνομιλία — μια αναφορά ποτέ δεν ξεκινά μόνη της εκτέλεση, οπότε δύο agents δεν μπορούν να ping-pong μεταξύ τους. Οι ανατεθειμένες εκτελέσεις δεν αναθέτουν παραπέρα, ένας απασχολημένος στόχος αποτυγχάνει ειλικρινά αντί να μπει σε ουρά, και με ενεργές εγκρίσεις το message_agent παύει για έλεγχο όπως κάθε ενέργεια με παρενέργεια (ο κανόνας Always-allow περιορίζεται σε εκείνον τον έναν agent-στόχο).

Εγκρίσεις ενεργειών (Auto Review)

Οι ενέργειες με παρενέργεια μπορούν να παύσουν για την απόφασή σας πριν εκτελεστούν. Όταν οι εγκρίσεις είναι ενεργές για μια εργασία — η πολιτική Work ορίζει Require approval for side-effecting actions ή ο διακόπτης Auto Review του agent είναι ανοιχτός — η εκτέλεση σταματά πριν από run_command, computer_act, delete_file, move_file ή message_agent και δείχνει κάρτα απόφασης στη συνομιλία: Allow once, Always allow ή Deny.

  • Allow once εκτελεί ακριβώς αυτή την κλήση και ρωτά ξανά την επόμενη φορά.
  • Always allow εκτελεί την κλήση και αποθηκεύει κανόνα στην εργασία: για όλο το εργαλείο στις ενέργειες αρχείων και υπολογιστή, περιορισμένο στο πρόγραμμα της εντολής (το πρώτο της token) για run_command — η έγκριση του npm run build προεγκρίνει μελλοντικές εντολές npm, όχι όλο το shell — και περιορισμένο στον έναν agent-στόχο για message_agent. Οι κανόνες εμφανίζονται στην ενότητα Auto Review της καρτέλας Agent και αφαιρούνται από εκεί.
  • Deny απορρίπτει την κλήση. Το μοντέλο ενημερώνεται ότι ο χρήστης αρνήθηκε την ενέργεια και δεν πρέπει να την επαναλάβει ως έχει· η εκτέλεση συνεχίζει με αυτή την απάντηση.

Μια εκκρεμής έγκριση παράγει και ειδοποίηση (in-app και web push όταν είναι ενεργό), γιατί η εκτέλεση μπορεί να δουλεύει ήδη λεπτά χωρίς επίβλεψη όταν φτάσει στο σημείο ελέγχου. Αν κανείς δεν αποφασίσει μέσα σε πέντε λεπτά, το αίτημα λήγει, η ενέργεια δεν εκτελείται και η εκτέλεση τελειώνει ως Needs input με κανονική παράδοση αντί να εξαντλήσει το budget της.

Οι εγκρίσεις ελέγχουν ενέργειες, όχι ορατότητα: το write_file και τα μόνο για ανάγνωση εργαλεία μένουν εκτός ελέγχου, και κάθε απόφαση καταγράφεται στο αρχείο ελέγχου ασφάλειας.

Κατάσταση εργασίας

UI statusBackend stateΧρώμα
Αδρανέςidlergb(255, 255, 255)
Σκέψηpreparing ή runningrgb(48, 121, 255)
Ολοκληρώθηκεcompletedrgb(76, 212, 117)
Χρειάζεται inputneeds_input ή cancelledrgb(255, 204, 0)
Σφάλμαfailedrgb(255, 61, 129)

Stop active run → Needs input με αρχεία. Εξάντληση round/tool budget επίσης Needs input μετά τελικό no-tools handoff, ποτέ Complete για ελλιπές.

Active run δεν κλειδώνει conversation: μήνυμα εισέρχεται αμέσως και φτάνει στο επόμενο round για steering. Stop παραμένει δίπλα στο send.

Αλλαγή μεγέθους

Στο xl, draggable split Conversation/Workspace:

  • Default conversation 45 %, preferred 30–70 % με minimum widths.
  • Ratio ανά signed-in user/browser.
  • Βέλη 2 %, Shift 10 %, Home/End min/max, Enter/double-click reset.

Ακολουθεί writing direction: στα αραβικά Conversation δεξιά, Workspace αριστερά και resize οπτικά σωστό. Σε μικρά screens χρησιμοποιήστε header switcher.

Αρχεία

Files περιηγείται direct children /workspace, ανοίγει αυστηρά valid UTF-8 και γράφει στο volume. Invalid bytes απορρίπτονται χωρίς lossy replacement.

  • Syntax highlight light/dark για κοινές γλώσσες.
  • Cmd/Ctrl+S save, Shift+Alt+F format.
  • Optimistic conflict detection.
  • Task/path-scoped drafts στο browser session και navigation warnings.

Highlight παύει πάνω από 8.000 chars/400 lines. Formatting έως 100.000/4.000 για JS/JSX, TS/TSX, JSON, CSS/SCSS/Less, HTML, Markdown/MDX, YAML.

Αν model αλλάξει open file, Files δείχνει red/green Changes από αρχή σειράς, folds unchanged, toggle diff/editor και counters +added −removed. Baseline είναι το τελευταίο content πριν τη σειρά· αρχείο που ανοίγει μετά δεν έχει diff.

Drafts είναι convenience, όχι backup· καθαρίζονται μετά save/delete ή τέλος session.

Δραστηριότητα

Activity δείχνει tool calls/results, file operations, command output, errors. Metadata expand στο conversation. Output μένει LTR σε RTL UI.

Active run ανοίγει authenticated SSE με:

  • snapshot, αλλαγές run_state·
  • reasoning_delta όταν εκτίθεται·
  • assistant_delta·
  • tool_call, tool_result·
  • usage·
  • skill_loaded·
  • terminal error ή done.

Reasoning εξαρτάται από model/provider. Το Libre δείχνει μόνο ό,τι επιστρέφει API, δεν ανακτά hidden chain-of-thought και ορισμένα μοντέλα δεν έχουν stream. Text/tools stream ανεξάρτητα. Output είναι bounded· truncation δεν αποδεικνύει ότι δεν υπήρχε άλλο.

Git

Το Git προσφέρει τοπικά operations στο /workspace:

  • init repository main, porcelain status, ahead/behind και 20 commits·
  • bounded diff, stage έως 200 paths, commit με admin identity/no-reply·
  • local branch μετά πρώτο commit και switch με clean worktree.

Είναι local-only: χωρίς clone/fetch/pull/push/remotes/arbitrary Git/token/SSH/PR. Χρειάζεται ξεχωριστό trusted credential broker, ιδανικά GitHub App token για ένα repo και operation. Μην βάζετε long-lived credentials στο workspace, env ή config.

Reads επιτρέπονται idle/active. Writes απορρίπτονται όταν model, terminal ή preview κατέχει container και branch switch θέλει clean tree, αποτρέποντας races.

Κάθε UI command είναι fixed args ως UID/GID 1000:1000, ποτέ shell input. Απενεργοποιούνται system/global config, prompts, hooks, credential helpers, signing, submodules, external diff, textconv και network protocols. Απορρίπτεται repo με worktree όχι ακριβώς /workspace ή Git/common dir έξω. Writes μπλοκάρονται με executable filters.

Αυτά προστατεύουν Git API. Admin Terminal και model run_command μπορούν ακόμη κανονικό Git· sandbox/deployment μένουν boundary.

Ενσωματωμένες worker skills

Κάθε run λαμβάνει server-owned οδηγό για /workspace, read-only root, temporary process//tmp, network, limits και preview lifecycle. Καθοδηγεί το μοντέλο να:

  • ελέγχει instructions, manifests, lockfiles, scripts και repo πριν edits·
  • διατηρεί άσχετη εργασία και ομαδοποιεί ανεξάρτητα reads/searches·
  • συνεχίζει implementation αντί να σταματά στο plan·
  • κάνει focused verification πριν ευρύτερα checks·
  • διαγιγνώσκει αποτυχία αντί blind retry·
  • επαληθεύει app πριν preview ως τελικό long-lived process.

Υπάρχει μόνο σε model context. Δεν δημιουργείται AGENTS.md ή skill directory και project instructions δεν παρακάμπτουν security boundary.

Terminal

Συνδέει interactive shell στο ίδιο sandbox για admin inspection/build/debug. Ίδια πολιτική: unprivileged 1000:1000, /workspace, hardened dropped-capability container. Δεν δίνει privilege πέρα από run_command.

  • Authentication — Authorization ανταλλάσσεται μέσω HTTP με short-lived one-use ticket δεμένο σε protocol/task. Μόνο ticket/ID στο /ws/work-terminal. Πριν κάθε input επανελέγχονται account, access, existence, ownership· revoke κλείνει και ελευθερώνει lease.
  • Origin — με CORS_ORIGIN/BASE_URL, browser upgrades πρέπει να ταιριάζουν. Originless Electron ακόμη θέλει ticket/live auth. Χρησιμοποιήστε TLS/firewall/proxy.
  • Admission — terminal παίρνει runtime lease και μετρά στο WORK_MAX_ACTIVE_RUNTIMES_*.
  • Lifetime — κρατά container και εμποδίζει idle stop.
  • ConcurrencyWORK_TERMINAL_MAX_SESSIONS_PER_TASK default 2.
  • IdleWORK_TERMINAL_IDLE_TIMEOUT_MS default 15 λεπτά.
  • Active run — περιμένει να τελειώσει η σειρά.

Μιλά απευθείας με Docker Engine API για hijacked TTY stream. Χρησιμοποιεί WORK_DOCKER_SOCKET, αλλιώς DOCKER_HOST (unix:// ή plain HTTP tcp:// proxy με Connection: Upgrade) ή /var/run/docker.sock. Unsupported ssh:// ή TLS tcp:// αναφέρει unavailable χωρίς fallback. Σε Kubernetes χρησιμοποιεί exec WebSocket API με resize.

Οι terminal sessions δεν καταγράφονται και commands δεν μπαίνουν Activity.

Preview

Ξεκινά, σταματά, ενσωματώνει και ανοίγει web app. Με κενό command:

  • root package.json dev με host/port·
  • root index.html με bundled static server· ή
  • ίδιο για μία nested app.

Root υπερισχύει. Πολλαπλές nested ή χωρίς entry δίνουν actionable error αντί άσχετο npm. Για άλλες layouts εισάγετε command πριν Start preview. Ξεκινά /workspace, π.χ. cd apps/web && npm run dev -- --host 0.0.0.0 --port 4173, πρέπει να ακούει 0.0.0.0/WORK_PREVIEW_PORT, timeout 15 s.

Το μοντέλο χρησιμοποιεί start_preview, τη μόνη supported μέθοδο να αφήσει process. Τα run_command καθαρίζουν background descendants.

Οθόνη (Work Computer)

Παρακολουθήστε έναν agent Libre WebUI Work να ερευνά εικόνες και να δημιουργεί διαδραστική διαστημική συλλογή

Δείτε ολόκληρη την επίδειξη: πραγματική, μη επεξεργασμένη εκτέλεση (30× και μετά πραγματικός χρόνος), όπου agent περιηγείται στις συλλογές NASA στη δική του οθόνη, επιλέγει φωτογραφίες και δημιουργεί/δοκιμάζει διαδραστική συλλογή Three.js — από ένα prompt.

Εργασία με πολιτική Work Computer αποκτά Screen: live παράθυρο σε virtual desktop στο ίδιο sandbox — window manager, dock και Chromium σε 1280×800. Μπορείτε να παρακολουθείτε, να αναλαμβάνετε mouse/keyboard, να ακούτε ήχο και να διδάσκετε με demonstration. Το άνοιγμα ξεκινά on-demand GUI (τίποτε πριν κάποιος κοιτάξει) και συνδέει VNC-over-WebSocket viewer.

Ο admin το ενεργοποιεί με ένα click: η landing page δείχνει κάρτα Work Computer με Enable. Χτίζει το bundled GUI image στον Docker daemon της εγκατάστασης (πρώτη φορά λίγα λεπτά) και δημιουργεί έτοιμη policy, χωρίς manual docker build ή fields. Πίσω από filtered Docker API proxy το build endpoint απαγορεύεται· κάντε pull στον host (ghcr.io/libre-webui/libre-work-computer, tag libre-work-computer:latest) ή build από deploy/work-computer/. Το Enable τότε παραλείπει build. Οι εργασίες χρειάζονται network access επειδή η οθόνη χρησιμοποιεί loopback-published port όπως preview.

Ασφάλεια: ο VNC server δένει localhost πίσω από δύο per-session passwords — view-only για authorized watchers και full-control μόνο στον current takeover lease holder — ώστε τα inputs άλλων να μένουν inert. Το WebSocket bridge είναι η μόνη επιφάνεια, published μόνο στο loopback του Docker host. Κάθε viewer πιστοποιείται με one-use ticket δεμένο σε session/task, όπως Terminal, και Work access επανελέγχεται σε κάθε σύνδεση. Revoke κόβει άμεσα. Έως τέσσερις viewers, και viewing μετρά ως activity στο idle sweep.

Viewing και running δεν ανταγωνίζονται: άνοιγμα mid-run συνδέεται στο sandbox του run, δεν εμποδίζει το επόμενο και επιβιώνει μετά το τέλος, ακόμη σε team με separate worker. Το profile browser μένει στο /workspace/.browser-profile, άρα logins επιβιώνουν restart.

Έλεγχος agent: δύο επιπλέον εργαλεία. computer_observe επιστρέφει full screenshot, cursor, active window, current URL, αν το page ή chrome UI έχει keyboard focus, compact descriptor focused element και screenshot hash. Τα semantic signals έρχονται από DevTools endpoint στο loopback και μπορεί να λείπουν σε παλιά GUI images. computer_act εκτελεί batch έως 24 mouse/keyboard actions (move, click, double/right click, type, key chords, scroll, wait) και επιστρέφει settled screenshot.

Τρεις runtime guards: type/key μπορούν να φέρουν assertion focus και fail closed αν το πεδίο δεν έχει focus, ώστε κείμενο να μην πάει omnibox. Batch σταματά νωρίς αν εμφανιστεί window, αλλάξει title ή μετακινηθεί focus, επειδή οι υπόλοιπες coordinates στόχευαν παλιά οθόνη. Μπορεί να δηλώσει expected outcome (title, URL, changed region), που επαληθεύεται με adaptive deadline — "pending" σημαίνει μη παρατηρημένο, όχι success. Μετά batch η οθόνη settleάρει με polling, όχι fixed delay.

Κάθε result έχει evidence: click receipt για αλλαγή pixels, scroll_until προς κείμενο ή edge με visibility report και diff από προηγούμενη observation ώστε unchanged να δηλώνεται. Ένα subgoal μίας γραμμής αποθηκεύεται ως checkpoint και επαναλαμβάνεται σε recovery prompts.

Ο agent loop ανιχνεύει grounding stall (τρεις ίδιες actions σε unchanged screen δίνουν μία recovery notice, επανάληψη τελειώνει ζητώντας input αντί να καίει rounds) και compounding ambiguity (διαδοχικά unverified expectations δίνουν re-grounding notice). Telemetry rounds, latency, screenshots, fences και verdicts γράφεται σε κάθε tool record και συνοψίζεται στο τέλος.

Screenshots φτάνουν ως πραγματικό image content σε Ollama, Anthropic, Gemini και OpenAI-compatible Chat/Responses, άρα προτιμήστε vision model. Αν text-only provider απορρίψει εικόνα, η εκτέλεση δεν αποτυγχάνει: screenshots αφαιρούνται για το υπόλοιπο, το μοντέλο χρησιμοποιεί text observations και σημείωση εξηγεί degradation. Χωρίς όραση η επαλήθευση είναι πολύ χειρότερη. Μόνο πρόσφατα screenshots μένουν live context και persistent transcript κρατά μόνο text, ποτέ image bytes.

Ο browser έχει content blocking: uBlock Origin Lite για ads/trackers (pinned και checksum-verified στο image build, filtering mode μέσω managed policy) και auto-dismiss cookie banners, επειδή σπαταλούν screenshots, tokens, clicks. Γνωστά ad scripts γίνονται ακίνδυνα local stubs ώστε οι σελίδες να λειτουργούν. Ο agent δεν εισάγει credentials ούτε ολοκληρώνει CAPTCHA/2FA· αναφέρει blocker. Για untrusted tasks συνδυάστε GUI με filtering DNS resolver. Desktop browser κάνει το egress policy πιο σημαντικό.

Ήχος: muted από default (browser απαιτεί click). Speaker button streamάρει ήχο. Μέσα, PulseAudio παίζει σε null sink, ο monitor καταγράφεται raw PCM και σερβίρεται από δεύτερο authenticated loopback WebSocket bridge με ίδιο ticket, access check και viewer cap. Απαιτεί image από deploy/work-computer/ αυτής ή νεότερης έκδοσης.

Takeover: Take over δίνει mouse/keyboard για login, CAPTCHA ή απαγορευμένο βήμα και I'm done επιστρέφει. Μία VNC session έχει full-control και view-only password, generated ανά session, ποτέ logged. Watchers παίρνουν μόνο view και full μόνο lease holder. Lease TTL (εγκαταλειμμένο λήγει σε δύο λεπτά), ανανεώνεται όσο UI ανοικτό και δεν αρπάζεται από άλλο χρήστη.

Policy μπορεί να απενεργοποιήσει takeover μέσω Allow screen takeover. Tasks κρύβουν Take over/Teach, endpoint αρνείται και request_takeover αναφέρει ότι δεν παραδίδεται control· watching μένει. Όσο άνθρωπος ελέγχει, computer_observe και computer_act μπλοκάρονται, άρα agent ούτε μάχεται ούτε screenshotάρει όσα γράφετε. Ο agent μπορεί να ζητήσει takeover με banner/reason και να περιμένει hand-back. Credentials πάνε direct keyboard→page, ποτέ model/transcript. Παλιά images μένουν view-only.

Teach mode: Teach a task καταγράφει demonstration. Ελέγχετε πραγματική οθόνη με visible indicator και actions σε coordinates. Κάθε click αγκυρώνεται από read-only probe σε element tag/id/visible label και URL, ώστε τα steps να ονομάζουν στόχο — "Click "button#submit (Place order)"" — και coordinates να είναι hints.

Save δημιουργεί playbook deterministically, χωρίς model στον βρόχο: keystrokes ομαδοποιούνται, click-vs-drag threshold 8 pixels, pauses wait steps και text με secret vocabulary ή credential shape (8+ chars, 3 classes) redacted και αντικαθίσταται με request_takeover.

Το playbook είναι natural-language procedure — anchored targets πρώτα, coordinates ως hints, reinterpretation με computer_observe — με when-to-use, inputs, steps, verification, allowed scope από hosts που επισκέφθηκε η επίδειξη (stop/ask πριν βγει· taught procedure δεν κληρονομεί περισσότερη authority), approval boundaries και stop-and-ask failure handling. Αποθηκεύεται ως skill με slug prefix taught-, εμφανίζεται στο Skills με versioning/editing/sharing.

Computer-enabled runs φορτώνουν enabled taught skills του owner στο system prompt και τα αναφέρουν. Replay είναι κανονικό run που ταιριάζει procedure. Μετά run, skill chips δίνουν one-click worked/failed review που προσθέτει dated line στο Track record (νεότερα πρώτα, bounded, κάθε μία version). Μην γράφετε πραγματικούς κωδικούς στην καταγραφή· δείξτε μέχρι sign-in, save και αφήστε request_takeover για replay.

Πάροχοι, δρομολόγηση και γνωστοποίηση δεδομένων

Υποστηριζόμενες διαδρομές παρόχων

ΔιαδρομήΕπικύρωση και συμπεριφορά
Τοπικό OllamaΤο Ollama πρέπει να λειτουργεί κανονικά και το συγκεκριμένο μοντέλο να δηλώνει υποστήριξη εργαλείων.
Ollama CloudΔρομολογείται ρητά μέσω Ollama· τα μοντέλα με κατάληξη cloud εμφανίζουν τη γνωστοποίηση απομακρυσμένου παρόχου.
Πρόσθετο completion/chatΤο πρόσθετο πρέπει να είναι ενεργό, να παραθέτει το συγκεκριμένο μοντέλο και να διαθέτει διαπιστευτήριο για τον τρέχοντα διαχειριστή.
Πρόσθετο AnthropicΧρησιμοποιεί τον προσαρμογέα μηνυμάτων και χρήσης εργαλείων Anthropic του Work.
Πρόσθετο GeminiΧρησιμοποιεί τον προσαρμογέα περιεχομένου και κλήσης συναρτήσεων Gemini του Work.
Άλλα συμβατά πρόσθεταΧρησιμοποιούν τη μορφή αιτήματος μηνυμάτων, εργαλείων και επιλογής εργαλείου τύπου OpenAI.

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

Τι λαμβάνει ένας πάροχος

Σε κάθε γύρο του μοντέλου, ο επιλεγμένος πάροχος μπορεί να λάβει:

  • την προτροπή συστήματος του Work·
  • τις ενσωματωμένες δεξιότητες του worker και τα τρέχοντα όρια εκτέλεσης·
  • έως τα 30 πιο πρόσφατα μηνύματα χρήστη/βοηθού της συνομιλίας, με συνολικό όριο 256 KB·
  • τους ορισμούς εργαλείων του Work·
  • το ιστορικό κλήσεων εργαλείων του βοηθού· και
  • τα αποτελέσματα εργαλείων, τα οποία μπορεί να περιλαμβάνουν λίστες καταλόγων, περιεχόμενο αρχείων που ζητήθηκε, αποτελέσματα αναζήτησης, έξοδο εντολών και σφάλματα.

Ο ονομαστικός τόμος δεν αποστέλλεται ολόκληρος. Ωστόσο, κάθε περιεχόμενο αρχείου ή έξοδος εντολής που επιστρέφει ένα εργαλείο γίνεται μέρος της συνομιλίας του μοντέλου και αποστέλλεται στον επιλεγμένο πάροχο. Πριν χρησιμοποιήσετε ευαίσθητο πηγαίο κώδικα, ελέγξτε τις πολιτικές των απομακρυσμένων παρόχων για διατήρηση δεδομένων, εκπαίδευση, τιμολόγηση και χρήση.

Τα διαπιστευτήρια παρόχων παραμένουν στο backend του Libre WebUI, είτε έχουν ρυθμιστεί για όλη την εγκατάσταση είτε για μεμονωμένο χρήστη. Χρησιμοποιούνται για αιτήματα μοντέλων από το backend και δεν προσαρτώνται ποτέ στο container του Work.

Η κρυπτογράφηση διαπιστευτηρίων στο επίπεδο εφαρμογής δεν κρυπτογραφεί ολόκληρη την εργασία. Οι συνομιλίες Work, τα αποτελέσματα εργαλείων, η έξοδος εντολών και τα μεταδεδομένα εργασιών αποτελούν κανονικό περιεχόμενο της βάσης δεδομένων, ενώ τα αρχεία και οι εξαρτήσεις του χώρου εργασίας είναι κανονικά αρχεία στον τόμο Docker ή στο PVC Kubernetes της εργασίας. Χρησιμοποιήστε ελέγχους πρόσβασης του host και κρυπτογράφηση δίσκου όταν το μοντέλο απειλών της εγκατάστασης απαιτεί κρυπτογράφηση των αποθηκευμένων δεδομένων.

Γνωστοποίηση απομακρυσμένου παρόχου

Για σκοπούς γνωστοποίησης, το Work θεωρεί απομακρυσμένα τα μοντέλα προσθέτων και τα ονόματα Ollama που τελειώνουν σε :cloud ή -cloud. Η επιλογή τους ανοίγει μια ειδοποίηση που μπορεί να κλείσει, εξηγεί τη ροή δεδομένων προς τον πάροχο και προειδοποιεί ότι μπορεί να γίνουν πολλές χρεώσιμες κλήσεις. Η προτίμηση απόρριψης αποθηκεύεται ανά χρήστη Libre WebUI.

Όλες οι διαδρομές παρόχων χρησιμοποιούν το ίδιο όριο WORK_MAX_AGENT_ROUNDS, με προεπιλογή 48 γύρους. Δεν υπάρχει χωριστός περιορισμός 12 γύρων για πρόσθετα. Το όριο ασφαλείας κλήσεων εργαλείων είναι το μεγαλύτερο από 128 κλήσεις ή οκτώ κλήσεις ανά ρυθμισμένο γύρο. Όταν εξαντληθεί το όριο γύρων, το Libre WebUI ζητά από το μοντέλο μία τελευταία παράδοση χωρίς εργαλεία, η οποία περιγράφει την ολοκληρωμένη εργασία, τους ελέγχους, τα εμπόδια και τα βήματα που απομένουν. Έπειτα καταγράφει την τελική εκτέλεση ως Needs input, αντί να εμφανίζει ανεπεξέργαστη εξαίρεση ορίου ή να χαρακτηρίζει ολοκληρωμένη μια ημιτελή εργασία. Μια επόμενη εκτέλεση συνεχίζει στον ίδιο διατηρούμενο χώρο εργασίας. Μία εκτέλεση Work μπορεί παρ’ όλα αυτά να πραγματοποιήσει πολλά χρεώσιμα αιτήματα παρόχου.

Χώροι εργασίας σε φάκελο του host (προαιρετικοί)

Στο backend Docker, το /workspace μιας εργασίας είναι κανονικά ένας ονομαστικός τόμος που υπάρχει μόνο για αυτή την εργασία, επομένως το μοντέλο δεν μπορεί να προσπελάσει τα πραγματικά αρχεία σας. Μια εγκατάσταση Docker μπορεί αντί γι’ αυτό να επιτρέψει τη σύνδεση μιας εργασίας με πραγματικό φάκελο του host. Το Kubernetes απορρίπτει χώρους εργασίας από φάκελο host και χρησιμοποιεί PVC που ανήκει στην εργασία.

Ορίστε και τις δύο μεταβλητές και επανεκκινήστε το backend:

WORK_HOST_WORKSPACES_ENABLED=true
WORK_HOST_WORKSPACE_ROOTS=/Users/you/Projects

Το WORK_HOST_WORKSPACE_ROOTS είναι λίστα ριζικών καταλόγων χωρισμένη με :· η προεπιλογή είναι ο προσωπικός κατάλογος του χρήστη του server. Όταν η δυνατότητα είναι ενεργή, η αρχική οθόνη Work αποκτά προαιρετικό πεδίο Workspace folder. Αν το αφήσετε κενό, η εργασία συμπεριφέρεται όπως πριν, με δικό της απομονωμένο τόμο.

Πριν γίνει αποδεκτή μια διαδρομή, πρέπει να είναι απόλυτη, να υπάρχει, να είναι κατάλογος και —ακολουθώντας κάθε συμβολικό σύνδεσμο— να καταλήγει μέσα σε μία από τις ρυθμισμένες ρίζες. Κατάλογοι με όνομα .ssh, .gnupg, .aws, .config, .kube, .docker, .claude, .libre-webui ή node_modules απορρίπτονται χωρίς εξαίρεση. Η επιλυμένη διαδρομή αποθηκεύεται μαζί με την εργασία και εμφανίζεται στην κεφαλίδα της, ώστε να είναι πάντοτε σαφές σε ποιον φάκελο λειτουργεί.

Αυτό περιορίζει το sandbox

Ένας χώρος εργασίας host σημαίνει ότι το μοντέλο διαβάζει και γράφει στα πραγματικά αρχεία σας. Οι άλλες προστασίες του container —χρήστης χωρίς δικαιώματα root, αφαιρεμένες δυνατότητες και όρια πόρων— δεν παρεμβάλλονται πλέον ανάμεσα σε αυτό και τον κατάλογο. Διατηρήστε τη δυνατότητα απενεργοποιημένη αν δεν τη χρειάζεστε, περιορίστε όσο γίνεται τις ρίζες και προτιμήστε καταλόγους υπό έλεγχο εκδόσεων.

Διατήρηση δεδομένων και κύκλος ζωής εκτέλεσης

Το Libre WebUI διαχωρίζει τη διατηρούμενη κατάσταση από την κατάσταση εκτέλεσης:

ΚατάστασηΑποθήκευσηΔιάρκεια ζωής
Κάτοχος, τίτλος, πάροχος και κατάσταση εργασίαςΒάση δεδομένων Libre WebUIΈως τη διαγραφή της εργασίας ή του κατόχου της
Εκτελέσεις, σφάλματα, μηνύματα και δραστηριότητα εργαλείωνΒάση δεδομένων Libre WebUIΈως τη διαγραφή της εργασίας
Αρχεία χώρου εργασίαςΤόμος Docker ή PVC K8s της εργασίαςΕπιβιώνουν από ακύρωση εκτέλεσης, διακοπή προεπισκόπησης, επανεκκίνηση sandbox και εφαρμογής
Ριζικό σύστημα αρχείων και προσωρινά αρχείαContainer ή Pod της εργασίαςΑναλώσιμα· μπορούν να διακοπούν ή να δημιουργηθούν ξανά
Διεργασία προεπισκόπησηςΕνεργό sandbox εργασίαςΠροσωρινή· διατηρείται μόνο όσο επαληθεύεται ότι λειτουργεί σωστά
Μη αποθηκευμένο πρόχειρο του editorΑποθηκευτικός χώρος συνεδρίας browserΠροσωρινή ευκολία της συνεδρίας του browser

Κάθε εργασία λαμβάνει UUID που δημιουργείται στον server. Τα ονόματα του sandbox και του χώρου εργασίας παράγονται στο backend και δεν γίνονται ποτέ δεκτά από αίτημα browser. Το Libre WebUI δημιουργεί τους πόρους εκτέλεσης με ετικέτες διαχείρισης και κατοχής εργασίας. Πριν από επαναχρησιμοποίηση ή διαγραφή, επαληθεύει την ετικέτα κατοχής και αρνείται πόρο του οποίου η ετικέτα ανήκει σε άλλη εργασία.

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

Οι διαχειριστές μπορούν να ορίσουν επώνυμες πολιτικές εκτέλεσης από την καρτέλα User Management στις Ρυθμίσεις: προκαθορισμούς που συνδυάζουν image εκτέλεσης, όρια μνήμης/CPU/PID, μέγεθος χώρου εργασίας (Kubernetes), χρονικό όριο αδράνειας, προεπιλογή δικτύου και δύο διακόπτες δυνατοτήτων — Work Computer (GUI + browser), που δίνει στις εργασίες της πολιτικής εικονική επιφάνεια εργασίας και την καρτέλα Screen, και Allow screen takeover, που καθορίζει αν κάποιος άνθρωπος μπορεί να αναλάβει αυτές τις οθόνες (και, επειδή η διδασκαλία καταγράφεται μέσω ανάληψης, αν είναι διαθέσιμη η λειτουργία διδασκαλίας). Μια εργασία που δημιουργήθηκε με πολιτική εκτελείται με αυτή τη διαμόρφωση. Κάθε κενό πεδίο κληρονομεί τις καθολικές τιμές της εγκατάστασης, ενώ η διαγραφή της πολιτικής επιστρέφει τις εργασίες σε αυτές τις τιμές την επόμενη φορά που θα δημιουργηθεί ξανά το container. Οι πολιτικές προσαρμόζουν μόνο πόρους και αυτούς τους διακόπτες· το προφίλ θωράκισης (χωρίς root, ριζικό σύστημα αρχείων μόνο για ανάγνωση, αφαιρεμένες δυνατότητες, απομόνωση δικτύου) δεν είναι πεδίο πολιτικής και δεν μπορεί να αποδυναμωθεί ανά πολιτική.

Το WORK_RUNTIME_IDLE_TIMEOUT_MS περιορίζει τη διάρκεια ανοχής μιας προεπισκόπησης. Όταν οριστεί, μια περιοδική σάρωση σταματά κάθε sandbox χωρίς δραστηριότητα —χωρίς ολοκληρωμένη εντολή, συνδεδεμένο τερματικό ή αίτημα προεπισκόπησης μέσω του υπογεγραμμένου proxy— για τόσα χιλιοστά του δευτερολέπτου, ελευθερώνοντας τη θέση εισαγωγής του. Η διακοπή είναι οικονομική και ο χώρος εργασίας διατηρείται, επομένως μια προεπισκόπηση που τέθηκε σε αδράνεια επανεκκινείται στην επόμενη χρήση. Η προεπιλογή (0) διατηρεί τη σημερινή συμπεριφορά: η προεπισκόπηση εκτελείται μέχρι να διακοπεί ρητά.

Κατά την εκκίνηση του backend, οι ενεργές εκτελέσεις χαρακτηρίζονται αποτυχημένες και η κατάσταση προεπισκόπησης διαγράφεται — ο βρόχος του agent και ο proxy προεπισκόπησης τερματίστηκαν μαζί με τη διεργασία και δεν μπορούν να συνεχιστούν. Στη συνέχεια, ο επιλεγμένος driver παραθέτει τα διαχειριζόμενα containers ή Pod με ένα ερώτημα βάσει ετικέτας. Τα ενεργά sandbox γνωστών εργασιών σταματούν, επειδή μια διακοπείσα εντολή μπορεί να συνεχίζει χωρίς επόπτη· όσα είναι ήδη σταματημένα παραμένουν αμετάβλητα· και οι διαχειριζόμενοι χώροι των οποίων η εγγραφή εργασίας δεν υπάρχει πια αφαιρούνται. Η κατοχή προκύπτει από την ετικέτα εργασίας, ποτέ από το όνομα πόρου. Η αφαίρεση ορφανών πόρων προϋποθέτει ότι μία εγκατάσταση Libre WebUI κατέχει ένα namespace εκτέλεσης ή daemon Docker. Μην κατευθύνετε δύο εγκαταστάσεις στους ίδιους πόρους Work. Αν ο driver δεν μπορεί να αποδείξει τον καθαρισμό, το Work παραμένει κλειστό για λόγους ασφάλειας, δοκιμάζει ξανά κάθε 10 δευτερόλεπτα και μπλοκάρει νέες λειτουργίες μεταβολής μέχρι να αποκατασταθεί η πρόσβαση στο runtime.

Συμπεριφορά δικτύου

Επαληθεύστε την επιλεγμένη πολιτική δικτύου

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

Στο backend Docker, οι εργασίες με δίκτυο συνδέονται σε ειδικό διαχειριζόμενο δίκτυο bridge (libre-webui-work από προεπιλογή, WORK_NETWORK_NAME), το οποίο δημιουργείται με απενεργοποιημένη επικοινωνία μεταξύ container (com.docker.network.bridge.enable_icc=false). Αυτό έχει δύο συνέπειες:

  • ένα sandbox Work δεν μπορεί να συνδεθεί σε άλλο sandbox Work· και
  • ένα sandbox Work δεν μπορεί να φτάσει τα container της ίδιας εγκατάστασης στην κοινή προεπιλεγμένη γέφυρα Docker, όπως μια βάση δεδομένων ή ένα container Ollama που δεν έχει δημοσιευτεί σκόπιμα.

Το Libre WebUI αρνείται να ξεκινήσει δικτυωμένη εργασία αν υπάρχει ήδη δίκτυο με το ρυθμισμένο όνομα αλλά δεν είναι το διαχειριζόμενο, αντί να συνδέσει σιωπηρά τα sandbox στο δίκτυο κάποιου διαχειριστή.

Στο Kubernetes, το Pod του sandbox φέρει την ίδια ετικέτα ενεργού δικτύου. Το Helm chart εγκαθιστά NetworkPolicy προεπιλεγμένης άρνησης, ingress μόνο για προεπισκόπηση και έξοδο στο Internet μόνο για Pod με ενεργό δίκτυο, εξαιρώντας τα ρυθμισμένα work.networkPolicy.blockedEgressCidrs. Το NetworkPolicy είναι αποτελεσματικό μόνο αν το CNI του cluster το επιβάλλει· δείτε τον οδηγό Kubernetes.

Η έξοδος προς τον εξωτερικό κόσμο εξακολουθεί να επιτρέπεται, επειδή οι λήψεις πακέτων, οι απομακρυσμένες λειτουργίες Git και τα εξωτερικά API κάνουν το Work χρήσιμο. Δεν πρόκειται για εξερχόμενο firewall. Ο παραγόμενος κώδικας μπορεί ακόμη να φτάσει:

  • υπηρεσίες στον host Docker·
  • συστήματα στο τοπικό δίκτυο του host·
  • υπηρεσίες στο Internet· και
  • endpoints μεταδεδομένων υποδομής, ανάλογα με την εγκατάσταση.

Σημεία σύνδεσης πολιτικής εξερχόμενης κίνησης

Για αυστηρότερο όριο, χρησιμοποιήστε συνδυαστικά τα εξής:

  • WORK_RUNTIME_DNS (Docker) — διευθύνσεις resolver IPv4/IPv6 χωρισμένες με κόμματα, οι οποίες επιβάλλονται σε κάθε δικτυωμένο sandbox (--dns). Αν δείχνει σε resolver με φίλτρα, παρέχει λίστες επιτρεπόμενων/απαγορευμένων ονομάτων χωρίς τροποποίηση του Libre WebUI. Καταχωρίσεις που δεν είναι διευθύνσεις απορρίπτονται και καταγράφονται, ώστε η τιμή να μην μπορεί να εισαγάγει επιπλέον flags Docker.
  • Κανόνες firewall του host ή ανώτερου επιπέδου (Docker) στο subnet της διαχειριζόμενης γέφυρας, το οποίο παραμένει σταθερό επειδή το δίκτυο είναι επώνυμο και διαχειριζόμενο.
  • WORK_NETWORK_NAME (Docker) που δείχνει σε δίκτυο το οποίο δημιουργήσατε εκ των προτέρων με τις δικές σας επιλογές driver — το Libre WebUI επαληθεύει ότι φέρει τη διαχειριζόμενη ετικέτα και την επιλογή απενεργοποίησης ICC, επομένως δημιουργήστε το και με τα δύο.

Το φιλτράρισμα DNS περιορίζει την επίλυση ονομάτων, όχι την έξοδο προς απευθείας διευθύνσεις IP. Μια εγκατάσταση που πρέπει να εγγυάται ότι δεν υπάρχει απευθείας εξερχόμενη κίνηση IP χρειάζεται επίσης κανόνες firewall στον host, στο cluster ή σε ανώτερο επίπεδο.

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

Η πρόσβαση δικτύου δεν προσθέτει διαπιστευτήρια. Το Libre WebUI δεν προσαρτά κλειδιά SSH, διαπιστευτήρια cloud, προφίλ browser, τον προσωπικό κατάλογο του host ή το socket Docker στα container εργασιών. Ο κώδικας μπορεί πάντως να μεταδώσει οποιαδήποτε διαπιστευτήρια ή μυστικά γράψει ένας χρήστης ή ένα μοντέλο στο /workspace.

Αυτή η κίνηση του sandbox είναι χωριστή από την κίνηση του μοντέλου. Τα αιτήματα Ollama και προσθέτων αποστέλλονται πάντοτε από το backend Libre WebUI στη ρητά επιλεγμένη διαδρομή παρόχου.

Όριο ασφαλείας του sandbox

Ένα container Docker του Work:

  • εκτελείται με UID/GID χωρίς δικαιώματα root 1000:1000·
  • χρησιμοποιεί το /workspace ως κατάλογο εργασίας·
  • προσαρτά μόνο τον ονομαστικό τόμο της επιλεγμένης εργασίας στο /workspace·
  • χρησιμοποιεί ριζικό σύστημα αρχείων μόνο για ανάγνωση και περιορισμένο προσωρινό σύστημα αρχείων /tmp·
  • αφαιρεί όλες τις δυνατότητες Linux·
  • ενεργοποιεί no-new-privileges·
  • δεν είναι προνομιακό και χρησιμοποιεί διεργασία init·
  • εφαρμόζει όρια CPU, μνήμης, διεργασιών, χρόνου εντολών και εξόδου·
  • περιορίζει τη swap στο όριο μνήμης (--memory-swap ίσο με --memory), ώστε το όριο μνήμης να μην παρακάμπτεται μέσω swap·
  • συνδέεται στο διαχειριζόμενο δίκτυο sandbox με απενεργοποιημένη επικοινωνία μεταξύ container ή δεν συνδέεται σε κανένα δίκτυο· και
  • δημοσιεύει μόνο τη ρυθμισμένη θύρα προεπισκόπησης σε θύρα loopback του host που εκχωρεί το Docker.

Όλα αυτά επαληθεύονται ξανά με docker inspect πριν επαναχρησιμοποιηθεί ένα container και το πλήρες σύνολο κατακερματίζεται στην ετικέτα container ai.libre-webui.policy. Ένα container του οποίου η πολιτική προηγείται μιας αναβάθμισης Libre WebUI καταστρέφεται και δημιουργείται ξανά, ώστε κάθε αλλαγή θωράκισης να εφαρμόζεται αυτόματα και στις υπάρχουσες εργασίες.

Ο driver Kubernetes εφαρμόζει ισοδύναμο πλαίσιο ασφαλείας Pod: UID/GID χωρίς root, ριζικό σύστημα αρχείων μόνο για ανάγνωση, seccomp RuntimeDefault, χωρίς κλιμάκωση προνομίων, με όλες τις δυνατότητες αφαιρεμένες, περιορισμένο προσωρινό αποθηκευτικό χώρο, όρια πόρων, χωρίς token ServiceAccount και με PVC της εργασίας στο /workspace. Επαληθεύει τις ετικέτες εργασίας και το αποτύπωμα πολιτικής πριν επαναχρησιμοποιήσει ή διαγράψει Pod ή PVC.

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

Αυτοί οι έλεγχοι μειώνουν την τυχαία έκθεση του host· δεν μετατρέπουν το Work σε εικονική μηχανή ή σε ασφαλές περιβάλλον ανάλυσης κακόβουλου λογισμικού. Τα container μοιράζονται τον kernel του host εκτέλεσης. Μια ευπάθεια σε Docker, Kubernetes, runtime, image, εξάρτηση ή kernel μπορεί να διασχίσει το επιδιωκόμενο όριο.

Οι ονομαστικοί τόμοι Docker δεν έχουν ανεξάρτητο όριο δίσκου. Ένα παραγόμενο έργο ή μια εγκατάσταση πακέτου μπορεί να εξαντλήσει τον αποθηκευτικό χώρο Docker, επομένως παρακολουθείτε την αύξηση των τόμων και εφαρμόστε όρια αποθήκευσης στο επίπεδο host. Το Kubernetes ζητά μέγεθος PVC· η πραγματική επιβολή ορίου εξαρτάται από τον επιλεγμένο provisioner αποθήκευσης.

Λίστα ελέγχου θωράκισης Docker για παραγωγή

Αυτή η λίστα αφορά ειδικά το backend Docker. Οι διαχειριστές Kubernetes πρέπει επίσης να επικυρώσουν το RBAC περιορισμένο στο namespace, το πλαίσιο ασφαλείας Pod, την κλάση αποθήκευσης και την επιβολή CNI NetworkPolicy του chart, όπως περιγράφεται στον οδηγό Kubernetes.

Η εφαρμογή μπορεί να ορίζει flags container, να επικυρώνει διαδρομές χώρου εργασίας και να προστατεύει το δικό της API. Δεν μπορεί να επιβάλει την πολιτική firewall του host, τα όρια του driver αποθήκευσης ή το επίπεδο προνομίων του daemon Docker που της παρέχεται. Αντιμετωπίστε τα ως ρητές εργασίες εγκατάστασης για μια ιδιωτική παρουσία πελάτη.

1. Απομονώστε τον έλεγχο Docker

Το κύριο container Libre WebUI χρειάζεται έλεγχο του daemon για να δημιουργεί και να επιθεωρεί container Work. Συνεπώς, ένα προσαρτημένο socket Docker είναι διαπιστευτήριο επιπέδου ελέγχου και όχι συνηθισμένο mount δεδομένων: η παραβίαση της εφαρμογής web μπορεί να οδηγήσει σε παραβίαση του host Docker.

Το πρώτο μέτρο περιλαμβάνεται σε αυτό το repository: το docker-compose.socket-proxy.yml κρατά το socket εντελώς έξω από το container Libre WebUI. Ένας proxy socket διατηρεί το /var/run/docker.sock σε εσωτερικό δίκτυο και προωθεί μόνο τις ενότητες API που χρησιμοποιεί το Work — containers, images, volumes, networks, exec και info — ενώ τα endpoints swarm, secrets, configs, build, commit και system απορρίπτονται πριν φτάσουν στον daemon. Το Libre WebUI κατευθύνεται σε αυτό με DOCKER_HOST=tcp://docker-socket-proxy:2375 και δεν χρειάζεται mount socket ούτε συμμετοχή στην ομάδα του socket· το CLI, το διαδραστικό τερματικό και τα διαγνωστικά Docker ακολουθούν όλα αυτό το endpoint. Ο proxy περιορίζει την επιφάνεια API, όχι την έκταση ζημιάς των endpoints που προωθεί: όποιος μπορεί να δημιουργεί container μπορεί ακόμη να κάνει bind-mount διαδρομές host, επομένως το παρακάτω όριο εξακολουθεί να έχει σημασία.

Για ισχυρότερο όριο παραγωγής, εκτελέστε το Libre WebUI και τον daemon Work σε αποκλειστική VM χωρίς άσχετα φορτία. Ακόμη ισχυρότερα, δώστε στο Work αποκλειστικό rootless daemon Docker ή χωριστό host εκτέλεσης και εκθέστε μόνο αυτόν τον daemon στο Libre WebUI. Πριν τη διάθεση, επαληθεύστε την κατοχή αρχείων, τη δρομολόγηση προεπισκόπησης, τον καθαρισμό και την υποστήριξη τερματικού σε αυτόν τον daemon. Η απλή προσάρτηση του ίδιου rootful socket host ως μόνο για ανάγνωση δεν μετατρέπει το API Docker σε μόνο για ανάγνωση.

2. Αποκλείστε την πρόσβαση διαχείρισης από το sandbox προς τον host

Η απενεργοποίηση επικοινωνίας μεταξύ container εμποδίζει τα sandbox Work να επικοινωνούν μεταξύ τους· δεν τα εμποδίζει να φτάσουν υπηρεσίες που ακούν στον host Docker. Επιθεωρήστε την πραγματική διαχειριζόμενη γέφυρα και το subnet, αντί να υποθέτετε μια διεύθυνση:

docker network inspect libre-webui-work \
--format 'id={{.Id}} subnets={{range .IPAM.Config}}{{.Subnet}} {{end}}'
ss -lntup

Χρησιμοποιήστε τον μόνιμο διαχειριστή firewall του host για να απορρίπτετε κίνηση που φτάνει από αυτή τη γέφυρα προς υπηρεσίες διαχείρισης του host, ιδιαίτερα SSH, API Docker, βάσεις δεδομένων και θύρες παρακολούθησης/διαχείρισης. Δοκιμάστε τον κανόνα από αναλώσιμο container συνδεδεμένο στο libre-webui-work, δοκιμάστε τις επιτρεπόμενες λήψεις πακέτων και έπειτα κάντε τον κανόνα μόνιμο. Η αλυσίδα DOCKER-USER του Docker ελέγχει την προωθούμενη κίνηση· η κίνηση με προορισμό τον ίδιο τον host Docker μπορεί να χρειάζεται επίσης κανόνα INPUT/input-hook στη διεπαφή της γέφυρας.

3. Περιορίστε τους εξερχόμενους προορισμούς

Αποκλείστε endpoints μεταδεδομένων cloud, ιδιωτικά εύρη υποδομής και εύρη LAN πελατών από το subnet του Work, εκτός αν ένα έργο τα χρειάζεται ρητά. Συνδυάστε resolver με φίλτρα μέσω WORK_RUNTIME_DNS με κανόνες firewall host ή ανώτερου επιπέδου. Το φιλτράρισμα DNS παρακάμπτεται με κυριολεκτική διεύθυνση IP. Ένας HTTP proxy μόνος του επίσης δεν αρκεί όσο αυθαίρετες εντολές μπορούν να ανοίγουν άμεσες συνδέσεις δικτύου· επιβάλετε την πολιτική δρομολόγησης έξω από το container.

Διατηρήστε χωριστές επώνυμες πολιτικές εκτέλεσης όταν οι πελάτες χρειάζονται διαφορετική συμπεριφορά, όπως runtime εκτός σύνδεσης/χωρίς δίκτυο, runtime μόνο για registry πακέτων και runtime με ανοικτή έξοδο. Η επώνυμη πολιτική καθορίζει αν το Libre συνδέει το δίκτυο sandbox· οι εξωτερικοί κανόνες firewall και proxy εξακολουθούν να επιβάλλουν περιορισμούς προορισμού για πολιτική με ενεργό δίκτυο.

4. Επιβάλετε πραγματικά όρια αποθήκευσης

Τα όρια CPU, μνήμης, swap και PID δεν περιορίζουν τον ονομαστικό τόμο. Πριν εξυπηρετήσετε πολλούς πελάτες, επιλέξτε backend αποθήκευσης με επιβαλλόμενα όρια ανά χώρο εργασίας, όπως project quotas XFS, λογικούς τόμους με quota ή driver τόμου/PVC με όριο μεγέθους. Ο προεπιλεγμένος driver Docker local σε συνηθισμένο σύστημα αρχείων ext4 δεν αποκτά αξιόπιστο όριο ανά τόμο απλώς επειδή καταγράφηκε μια τιμή μεγέθους.

Παρακολουθείτε τόσο κάθε τόμο ai.libre-webui.managed=true όσο και τη ρίζα δεδομένων Docker, ειδοποιείτε πριν γεμίσει το σύστημα αρχείων και δοκιμάστε τη συμπεριφορά αποτυχίας. Ένας μετρητής UI ή περιοδικός έλεγχος du μπορεί να προειδοποιεί, αλλά δεν αποτελεί όριο επιβολής, επειδή ένα container μπορεί να καταναλώσει τον εναπομένοντα δίσκο ανάμεσα στους ελέγχους.

5. Επαληθεύστε την εφαρμοσμένη πολιτική

Μετά από κάθε αλλαγή image ή πολιτικής daemon, δημιουργήστε αναλώσιμη εργασία Work και επαληθεύστε την πραγματική κατάσταση με docker inspect: UID χωρίς root, ρίζα μόνο για ανάγνωση, όλες τις δυνατότητες αφαιρεμένες, no-new-privileges, όρια μνήμης/swap/CPU/PID, μόνο τον τόμο της εργασίας προσαρτημένο και το αναμενόμενο δίκτυο. Επαληθεύστε επίσης ότι το κύριο container Libre WebUI έχει μόνο τα προβλεπόμενα mounts και ότι η δημόσια εισερχόμενη κίνηση φτάνει στην εφαρμογή μέσω του πιστοποιημένου reverse proxy ή tunnel — όχι από κατά λάθος δημοσιευμένη θύρα Docker ή προεπισκόπησης.

Ασφάλεια και προσβασιμότητα προεπισκόπησης

Για εργασία Docker, ο driver δημοσιεύει τη ρυθμισμένη θύρα προεπισκόπησης σε δυναμικά εκχωρημένη θύρα του loopback του backend. Στο Kubernetes, το backend μέσα στο cluster στοχεύει απευθείας την IP του Pod sandbox. Ούτε το μοντέλο ούτε ο browser μπορούν να επιλέξουν αυθαίρετο upstream. Το Libre WebUI υπογράφει URL δυνατότητας για τη συγκεκριμένη εργασία και endpoint, επαληθεύει σε κάθε αίτημα ότι η προεπισκόπηση εξακολουθεί να εκτελείται και προωθεί κίνηση HTTP και WebSocket μέσω /api/work/previews. Η διακοπή ή επανεκκίνηση της προεπισκόπησης ανακαλεί το παλιό URL.

Οι αποκρίσεις προεπισκόπησης αφαιρούν τα διαπιστευτήρια Libre WebUI και τα cookies upstream. Το HTML περιορίζεται τόσο από sandbox iframe όσο και από CSP απόκρισης που επιτρέπουν scripts, φόρμες, διαλόγους και λήψεις χωρίς να παρέχουν πρόσβαση ίδιας προέλευσης. Το CSP προστατεύει επίσης προεπισκόπηση που ανοίγει σε χωριστή καρτέλα. Ο παραγόμενος κώδικας εφαρμογής παραμένει μη έμπιστος και μπορεί να χρησιμοποιήσει την εξερχόμενη πρόσβαση δικτύου για να μεταδώσει οτιδήποτε μπορεί να διαβάσει από τον δικό του χώρο εργασίας ή από εισόδους browser. Αντιμετωπίστε ένα ενεργό URL προεπισκόπησης ως βραχύβιο μυστικό και μην το μοιράζεστε.

Επειδή ο browser φορτώνει τον proxy από τη δημόσια προέλευση του ίδιου του Libre WebUI, οι απομακρυσμένοι browser και οι HTTPS reverse proxy λειτουργούν χωρίς έκθεση θυρών Docker ή IP Pod και χωρίς αποκλεισμό μικτού περιεχομένου. Οι reverse proxy πρέπει να διατηρούν τις αναβαθμίσεις WebSocket για /api/work/previews/· η παρεχόμενη ρύθμιση Nginx το κάνει.

Η κύρια εφαρμογή επιτρέπει μόνο τη δική της προέλευση και το Cloudflare Turnstile ως πηγές frame. Οι αποκρίσεις προεπισκόπησης παρακάμπτουν την κύρια πολιτική Helmet, ώστε να μπορούν να μεταδίδουν σώματα αιτημάτων και να εφαρμόζουν τη στενότερη πολιτική sandbox που περιγράφεται παραπάνω. Η πολιτική ενσωμάτωσης διαφορετικής προέλευσης παραμένει απενεργοποιημένη, επειδή οι παραγόμενοι dev servers συνήθως δεν εκπέμπουν συμβατές κεφαλίδες πόρων.

Πίνακας εγκαταστάσεων

Η διαθεσιμότητα του Work ακολουθεί το μηχάνημα και τη διεργασία όπου εκτελείται το backend Libre WebUI, όχι απλώς τον browser ή το περιβάλλον desktop.

ΕγκατάστασηΕκτελέσεις και αρχεία WorkΕνσωματωμένη προεπισκόπηση
npx libre-webui σε τοπικό υπολογιστήΥποστηρίζεται όταν το Docker είναι εγκατεστημένο, ενεργό και προσβάσιμο από τον χρήστη του backend.Υποστηρίζεται μέσω του υπογεγραμμένου proxy προέλευσης εφαρμογής.
Ανάπτυξη από source σε τοπικό υπολογιστήΥποστηρίζεται με τις ίδιες απαιτήσεις Docker και παρόχων.Υποστηρίζεται μέσω της προέλευσης API ανάπτυξης στη θύρα 3001.
Desktop client ElectronΥπό προϋποθέσεις. Το Electron χρησιμοποιεί εξωτερικό backend Libre WebUI και δεν παρέχει χωριστό runtime Work.Υποστηρίζεται μέσω του υπογεγραμμένου URL proxy αυτού του backend.
Backend σε bare-metal ή VM απομακρυσμένου hostΟι εκτελέσεις, τα αρχεία και οι κλήσεις παρόχων λειτουργούν όταν υπάρχει Docker σε αυτόν τον host.Υποστηρίζεται όταν ο δημόσιος reverse proxy διατηρεί κίνηση HTTP και WebSocket.
Τυπικό Docker Compose του repositoryΥποστηρίζεται από προεπιλογή σε Docker Desktop: το image περιέχει Docker CLI, το Compose προσαρτά το socket Docker του host και οι θύρες Work δρομολογούνται μέσω host.docker.internal. Ο native Docker Engine χρειάζεται επιπλέον προσβάσιμο μη δημόσιο WORK_PREVIEW_BIND.Υποστηρίζεται μέσω της ίδιας δημόσιας προέλευσης Libre WebUI.
Τρέχουσα εγκατάσταση Kubernetes/HelmΥποστηρίζεται με --set work.enabled=true: τα sandbox εκτελούνται ως Pod με χώρους PVC (εκτελέσεις, αρχεία, εντολές, git, διαδραστικά τερματικά και οθόνη/ήχο Work Computer στην IP του Pod), υπό Role περιορισμένο στο namespace και NetworkPolicies προεπιλεγμένης άρνησης — χωρίς socket Docker. Δείτε τον οδηγό Kubernetes.Υποστηρίζεται όταν το backend εκτελείται μέσα στο cluster: ο υπογεγραμμένος proxy στοχεύει απευθείας την IP του Pod sandbox.

Εκτέλεση Work όταν το ίδιο το Libre WebUI βρίσκεται σε Docker

Κάθε αρχείο Compose του repository ενεργοποιεί το Work: το image περιλαμβάνει Docker CLI και το αρχείο Compose προσαρτά το /var/run/docker.sock. Το Docker Desktop λειτουργεί με τις προεπιλογές δρομολόγησης που παρέχονται. Ο native Docker Engine χρειάζεται επιπλέον το WORK_PREVIEW_BIND σε μη δημόσια διεπαφή host, προσβάσιμη από sibling container, όπως περιγράφεται παρακάτω.

Το Work ελέγχει τον daemon του host μέσω αυτού του socket, επομένως τα container εργασιών είναι αδελφικά προς το container Libre WebUI και όχι παιδιά του. Εμφανίζονται στο docker ps του host και καθαρίζονται με τους ίδιους κανόνες κύκλου ζωής μιας εγγενούς εγκατάστασης.

Η προσάρτηση του socket Docker σε εφαρμογή web δίνει σε αυτό το container έλεγχο ισοδύναμο με root στον host Docker. Το Work δεν μπορεί να λειτουργήσει χωρίς αυτό, επομένως το Libre WebUI το ενεργοποιεί αντί να διαθέτει δυνατότητα που δεν κάνει τίποτα σιωπηρά. Η συνέπεια είναι ρητή: κάθε διαχειριστής Libre WebUI είναι ουσιαστικά διαχειριστής του host Docker. Οι διαχειριστές της εγκατάστασης αναλαμβάνουν τις συνέπειες για ασφάλεια daemon, δίκτυο, κύκλο ζωής, backup και έλεγχο πρόσβασης. Διαγράψτε τη γραμμή /var/run/docker.sock από το αρχείο Compose για να απενεργοποιήσετε το Work· τίποτε άλλο δεν εξαρτάται από αυτή.

Για να διατηρήσετε το Work χωρίς να παραδώσετε το socket στην εφαρμογή web, χρησιμοποιήστε το docker-compose.socket-proxy.yml: ένας proxy socket σε εσωτερικό δίκτυο κρατά το socket και προωθεί μόνο τις ενότητες API που χρησιμοποιεί το Work, ενώ το Libre WebUI τον προσεγγίζει μέσω DOCKER_HOST. Δείτε Απομονώστε τον έλεγχο Docker για όσα καλύπτει και δεν καλύπτει αυτό το όριο.

Πρέπει να ισχύουν τρεις προϋποθέσεις και ο πίνακας Work αναφέρει ποια αποτυγχάνει:

  1. Το Docker CLI πρέπει να υπάρχει στο image. Περιλαμβάνεται στο επίσημο image· ένα προσαρμοσμένο image χρειάζεται docker-cli ή WORK_DOCKER_COMMAND που δείχνει σε αυτό. Διαφορετικά: The "docker" CLI is not installed….
  2. Το socket πρέπει να έχει προσαρτηθεί. Διαφορετικά: No Docker daemon is reachable….
  3. Ο χρήστης του backend πρέπει να ανήκει στην ομάδα του socket. Το image εκτελείται ως nodejs (uid 1001) και το socket συνήθως ανήκει σε root ή docker, επομένως το Compose περνά group_add: ['${DOCKER_GID:-0}']. Η προεπιλογή είναι κατάλληλη για Docker Desktop· ένας host Linux χρειάζεται το δικό του αναγνωριστικό ομάδας. Διαφορετικά: The Docker socket is mounted but the Libre WebUI user cannot open it….
# Read the socket's group as seen INSIDE a container. A macOS host reports a
# different value, because Docker Desktop proxies the socket through a VM.
echo "DOCKER_GID=$(docker run --rm -v /var/run/docker.sock:/var/run/docker.sock \
alpine stat -c '%g' /var/run/docker.sock)" >> .env
docker compose up -d --force-recreate

Οι θύρες προεπισκόπησης εργασιών παραμένουν δεσμευμένες στο loopback του host Docker. Το Libre WebUI εκθέτει κάθε ενεργή προεπισκόπηση μέσω υπογεγραμμένου URL proxy ίδιας προέλευσης, συμπεριλαμβανομένων πόρων HTTP και αναβαθμίσεων WebSocket. Αυτό λειτουργεί πίσω από HTTPS και απομακρυσμένα tunnel χωρίς να ανοίγονται στο δίκτυο οι προσωρινές θύρες Docker. Τα έγγραφα προεπισκόπησης λαμβάνουν περιοριστική πολιτική sandbox browser και η διακοπή ή επανεκκίνηση μιας προεπισκόπησης ανακαλεί το προηγούμενο URL της.

Όταν το ίδιο το backend εκτελείται σε Docker, η δημοσίευση και η σύνδεση μπορεί να χρησιμοποιούν διαφορετικές διευθύνσεις. Διατηρήστε WORK_PREVIEW_BIND=127.0.0.1 για να μην εκθέτετε τις προσωρινές θύρες και ορίστε WORK_DOCKER_PUBLISHED_HOST στη διεύθυνση host Docker που είναι προσβάσιμη από το container του backend (host.docker.internal στο Docker Desktop). Τα ενσωματωμένα profiles Compose ορίζουν και τις δύο τιμές και αντιστοιχίζουν το όνομα host. Οι εγγενείς εγκαταστάσεις Linux πρέπει να αντικαθιστούν το WORK_PREVIEW_BIND με το gateway της γέφυρας Docker (ή άλλη ρητά προσβάσιμη, μη δημόσια διεπαφή host)· η αντιστοίχιση μόνο του host.docker.internal δεν κάνει προσβάσιμη μια υπηρεσία loopback του host. Ποτέ μη δεσμεύετε αυτές τις προσωρινές θύρες στο 0.0.0.0.

Ο ταυτόχρονος φόρτος περιορίζεται χωριστά: το WORK_MAX_ACTIVE_RUNTIMES_PER_USER έχει προεπιλογή 2 και το WORK_MAX_ACTIVE_RUNTIMES_GLOBAL 3, ώστε ένας διαχειριστής να μπορεί να εκτελεί δεύτερη εργασία όσο η πρώτη είναι απασχολημένη. Η απόκριση δυνατοτήτων αναφέρει και τα δύο όρια και την τρέχουσα πληρότητα. Αυξήστε τα αν ο host διαθέτει επαρκή μνήμη και CPU.

Για Kubernetes, εγκαταστήστε το chart με work.enabled=true αντί να εκθέσετε socket runtime του node. Το chart δημιουργεί το περιορισμένο RBAC, το namespace sandbox, τις πολιτικές δικτύου και τη διαμόρφωση Pod/PVC που περιγράφονται στον οδηγό Kubernetes.

Ρυθμίσεις runtime

Το Work διαβάζει τις παρακάτω μεταβλητές στη διεργασία backend:

ΜεταβλητήΠροεπιλογήΣκοπός
WORK_RUNTIME_BACKENDdockerDriver sandbox: docker ή kubernetes
WORK_RUNTIME_IMAGEnode:22.22-bookworm@sha256:2d178f2785b96dfbf62a416ca2e40f50e30150b4ff3320d706f0d96e90600eb3Image που χρησιμοποιείται για τα sandbox εργασιών
WORK_DOCKER_COMMANDdockerΕκτελέσιμο CLI για το backend Docker
WORK_COMMAND_TIMEOUT_MS120000Προεπιλεγμένο χρονικό όριο εντολής
WORK_MAX_OUTPUT_CHARS50000Μέγιστη καταγεγραμμένη έξοδος εντολής/αναζήτησης
WORK_MAX_AGENT_ROUNDS48Όριο γύρων μοντέλου/εργαλείων ανά εκτέλεση, ανεξάρτητα από πάροχο
WORK_MEMORY_LIMIT2gΌριο μνήμης ανά container
WORK_CPU_LIMIT2Όριο CPU ανά container
WORK_PIDS_LIMIT256Όριο διεργασιών ανά container
WORK_PREVIEW_PORT4173Θύρα στην οποία πρέπει να ακούει η εφαρμογή μέσα στο container
WORK_PREVIEW_BIND127.0.0.1Διεπαφή host όπου δημοσιεύεται η θύρα προεπισκόπησης
WORK_DOCKER_PUBLISHED_HOSTίδιο με WORK_PREVIEW_BINDHost/IP που καλεί το backend για δημοσιευμένες θύρες Work Docker
WORK_COMPUTER_SCREEN_PORT6080Θύρα WebSocket μέσα στο container για τη γέφυρα οθόνης
WORK_COMPUTER_AUDIO_PORT6081Θύρα WebSocket μέσα στο container για τη γέφυρα ήχου
WORK_RUN_LEASE_WAIT_MS60000Χρόνος αναμονής μιας εκτέλεσης για προσωρινό κάτοχο lease runtime
WORK_MAX_ACTIVE_RUNTIMES_GLOBAL3Ταυτόχρονες εργασίες με container ανά εγκατάσταση Libre WebUI
WORK_MAX_ACTIVE_RUNTIMES_PER_USER2Ταυτόχρονες εργασίες με container ανά διαχειριστή
WORK_MAX_TASKS_GLOBAL500Όριο αποθηκευμένων εργασιών Work ανά εγκατάσταση Libre WebUI
WORK_MAX_TASKS_PER_USER100Όριο αποθηκευμένων εργασιών Work ανά διαχειριστή
WORK_NETWORK_NAMElibre-webui-workΔιαχειριζόμενο δίκτυο γέφυρας sandbox για εργασίες με δίκτυο
WORK_RUNTIME_DNSμη ορισμένοIP resolver χωρισμένες με κόμματα για εργασίες με δίκτυο
WORK_DOCKER_SOCKETDOCKER_HOST αν είναι unix:// ή tcp://, αλλιώς /var/run/docker.sockEndpoint Docker Engine για διαδραστικά τερματικά
WORK_TERMINAL_MAX_SESSIONS_PER_TASK2Ταυτόχρονα διαδραστικά τερματικά ανά εργασία
WORK_TERMINAL_IDLE_TIMEOUT_MS900000Χρονικό όριο αδράνειας πριν κλείσει συνεδρία τερματικού
WORK_RUNTIME_IDLE_TIMEOUT_MS0 (απενεργοποιημένο)Διακοπή sandbox μετά από τόση αδράνεια (και προεπισκοπήσεων)
WORK_K8S_NAMESPACElibre-webui-workNamespace Pod/PVC sandbox Kubernetes
WORK_K8S_STORAGE_CLASSπροεπιλογή clusterStorageClass για PVC χώρου εργασίας Kubernetes
WORK_K8S_WORKSPACE_SIZE5GiΠροεπιλεγμένο μέγεθος PVC Kubernetes ανά εργασία
WORK_K8S_POD_READY_TIMEOUT_MS900000Μέγιστη αναμονή για να γίνει έτοιμο ένα Pod sandbox
WORK_K8S_POD_GONE_TIMEOUT_MS60000Μέγιστη αναμονή για εξαφάνιση διαγραμμένου Pod sandbox

Στην παραγωγή χρησιμοποιήστε σταθερή έκδοση ή digest image. Ένα μεταβλητό tag image μπορεί να αλλάξει τόσο τα διαθέσιμα εργαλεία γραμμής εντολών όσο και το όριο ασφαλείας χωρίς να αλλάξει το Libre WebUI.

Για απομακρυσμένο Docker μέσω TLS, η ανίχνευση λαμβάνει επίσης υπόψη το DOCKER_TLS_VERIFY.

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

Σταθερά όρια πρωτοκόλλου και UI

ΣτοιχείοΌριο
Μήνυμα νέας εργασίας ή εκτέλεσης65.536 χαρακτήρες και byte UTF-8
Αναγνωριστικό μοντέλου σε δημιουργία/ενημέρωση εργασίας500 χαρακτήρες και byte UTF-8
Αναγνωριστικό παρόχου προσθέτου200 χαρακτήρες
Ενεργές εκτελέσεις ανά εργασία1
Κείμενο εντολής20.000 χαρακτήρες
Χρονικό όριο εντολής που ζητά εργαλείο1 έως 600 δευτερόλεπτα
Ετοιμότητα προεπισκόπησης15 δευτερόλεπτα
Ανάγνωση/εγγραφή αρχείου2.000.000 byte κειμένου UTF-8
Άμεση λίστα καταλόγουΠρώτες 1.000 καταχωρίσεις
Σελίδα μηνυμάτωνΈως 200 μηνύματα και 1.000.000 byte
Μεμονωμένο αποθηκευμένο μήνυμα100 KB
Πλαίσιο συνομιλίας προς μοντέλοΤελευταία 30 μηνύματα χρήστη/βοηθού, έως 256 KB
Αποθηκευμένη έξοδος εργαλείουΠερίπου 20.000 χαρακτήρες πηγής συν δείκτη
Επισήμανση στον ενεργό editor8.000 χαρακτήρες και 400 γραμμές
Μορφοποίηση στην πλευρά browser100.000 χαρακτήρες και 4.000 γραμμές
Έξοδος κατάστασης Git2.000.000 καταγεγραμμένοι χαρακτήρες
Έξοδος διαφορών Git600.000 καταγεγραμμένοι χαρακτήρες
Ιστορικό Git20 τοπικά commit
Διαδρομές σε ένα αίτημα Git stage200
Μήνυμα commit Git4.000 χαρακτήρες
Βρόχος agent, κάθε διαδρομή παρόχου48 γύροι από προεπιλογή, ρυθμιζόμενοι με WORK_MAX_AGENT_ROUNDS
Όριο ασφαλείας κλήσεων εργαλείωνmax(128, configured rounds × 8) κλήσεις

Η πρόσβαση αρχείων αφορά κείμενο UTF-8. Ο ενσωματωμένος editor δεν επεξεργάζεται δυαδικά αρχεία και αρχείο μεγαλύτερο από 2 MB δεν ανοίγει μέσω του API αρχείων Work.

Σύνοψη API

Όλα τα endpoints βρίσκονται κάτω από /api/work και απαιτούν πιστοποίηση μαζί με τρέχουσα πρόσβαση Work από τη βάση δεδομένων. Από προεπιλογή το Work είναι μόνο για διαχειριστές· ένας διαχειριστής μπορεί να ανοίξει τις συνηθισμένες λειτουργίες εργασιών σε ενεργούς χρήστες. Η επιλογή φακέλου host και τα endpoints πολιτικής/πρόσβασης διαχειριστή παραμένουν μόνο για διαχειριστές.

ΜέθοδοςΔιαδρομήΣκοπός
GET/capabilitiesΔιαθεσιμότητα και όρια επιλεγμένου runtime/παρόχου
GET/tasksΛίστα εργασιών του τρέχοντος διαχειριστή
POST/tasksΔημιουργία εργασίας και πρώτης ασύγχρονης εκτέλεσης
GET/tasks/:idΦόρτωση κατάστασης εργασίας και πρόσφατων μηνυμάτων
GET/tasks/:id/messagesΣελιδοποίηση παλαιότερων μηνυμάτων
PATCH/tasks/:idΜετονομασία ή αλλαγή της ρητής διαδρομής μοντέλου
DELETE/tasks/:idΑφαίρεση εργασίας και διατηρούμενου χώρου εργασίας
POST/tasks/:id/runsΈναρξη επόμενης εκτέλεσης
POST/tasks/:id/messagesΑποστολή μηνύματος στον agent κατά ενεργή εκτέλεση
GET/tasks/:taskId/runs/:runId/eventsΡοή πιστοποιημένων ζωντανών συμβάντων μέσω SSE
POST/tasks/:id/cancelΑκύρωση ενεργής εκτέλεσης
GET/tasks/:id/approvalsΕκκρεμείς εγκρίσεις και κατάσταση Auto Review
PUT/tasks/:id/approvalsΕναλλαγή των εγκρίσεων ανά εργασία
POST/tasks/:id/approvals/:approvalIdΑπόφαση εκκρεμούς έγκρισης (μία φορά/πάντα, άρνηση)
DELETE/tasks/:id/approval-rules/:ruleIdΑφαίρεση κανόνα Always-allow
GET/computer/setupΚατάσταση ρύθμισης Work Computer (διαχειριστής)
POST/computer/setupΔημιουργία GUI image και πολιτικής (διαχειριστής)
POST/tasks/:id/computer/startΈναρξη συνεδρίας Work Computer της εργασίας
GET/tasks/:id/computer/controlΠοιος ελέγχει την οθόνη· αίτημα ανάληψης agent
POST/tasks/:id/computer/controlΑνάληψη ή ανανέωση ελέγχου της οθόνης
DELETE/tasks/:id/computer/controlΕπιστροφή της οθόνης στον agent
POST/tasks/:id/computer/teachΑποθήκευση επίδειξης ως διδαγμένη δεξιότητα
POST/tasks/:id/computer/anchorΕπίλυση στοιχείου κάτω από καταγεγραμμένο κλικ
POST/computer/skills/:slug/traceΠροσθήκη γραμμής επιτυχίας/αποτυχίας σε διδαγμένη δεξιότητα
GET/tasks/:id/filesΛίστα καταλόγου χώρου εργασίας
GET/tasks/:id/fileΑνάγνωση αρχείου κειμένου χώρου εργασίας
PUT/tasks/:id/fileΑποθήκευση αρχείου κειμένου χώρου εργασίας
GET/tasks/:id/gitΑνάγνωση προστατευμένης τοπικής κατάστασης/ιστορικού Git
GET/tasks/:id/git/diffΑνάγνωση περιορισμένου τοπικού diff
POST/tasks/:id/git/initΑρχικοποίηση τοπικού Git
POST/tasks/:id/git/stageΠροσθήκη ρητών διαδρομών χώρου εργασίας στο stage
POST/tasks/:id/git/commitCommit των αλλαγών του stage
POST/tasks/:id/git/branchesΔημιουργία τοπικού branch
POST/tasks/:id/git/switchΜετάβαση σε υπάρχον καθαρό τοπικό branch
POST/tasks/:id/preview/startΈναρξη διαχειριζόμενης προεπισκόπησης
POST/tasks/:id/preview/stopΔιακοπή διαχειριζόμενης προεπισκόπησης

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

Το schema ενημέρωσης εργασίας διατηρεί το πεδίο backend networkEnabled για εσωτερική συμβατότητα. Δεν εκτίθεται ως ανεξάρτητος έλεγχος στο UI Work. Επιλέξτε κατά τη δημιουργία επώνυμη πολιτική runtime με την επιθυμητή προεπιλογή δικτύου· μη χρησιμοποιείτε το ανεπεξέργαστο πεδίο ως API μόνιμης ρύθμισης.

Διαγραφή, αλλαγές λογαριασμού και backup

Διαγραφή εργασίας

Η διαγραφή εργασίας είναι σκόπιμα καταστροφική:

  1. Το backend χαρακτηρίζει την εργασία ως υπό απόσυρση, ώστε να μην ξεκινήσει νέα λειτουργία μεταβολής.
  2. Μια ενεργή εκτέλεση ακυρώνεται και το sandbox της εργασίας σταματά.
  3. Το Libre WebUI επικυρώνει τις ετικέτες κατοχής εργασίας στους πόρους runtime.
  4. Το container/Pod και ο ονομαστικός τόμος/PVC αφαιρούνται.
  5. Η εργασία διαγράφεται από τη βάση, μαζί με τις εκτελέσεις και τα μηνύματά της μέσω cascade.
  6. Τα πρόχειρα browser της εργασίας διαγράφονται μετά την επιτυχία του API.

Αν αποτύχει ο καθαρισμός runtime, το Libre WebUI διατηρεί την εγγραφή της εργασίας στη βάση και επιστρέφει σφάλμα, ώστε ο διαχειριστής να διορθώσει το backend Docker ή Kubernetes και να δοκιμάσει ξανά. Δεν διαγράφει σιωπηρά τα μεταδεδομένα αφήνοντας μη καταγεγραμμένο sandbox ή χώρο εργασίας.

Η διακοπή εκτέλεσης ή προεπισκόπησης διαφέρει από τη διαγραφή: σταματά την εκτέλεση αλλά διατηρεί τον ονομαστικό τόμο και τη συνομιλία.

Υποβιβασμός διαχειριστή και διαγραφή χρήστη

Όταν ένας διαχειριστής υποβιβάζεται, το Libre WebUI αποθηκεύει την ανάκληση ρόλου πριν βασιστεί στον καθαρισμό runtime. Κάθε επόμενο αίτημα Work ελέγχει τον τρέχοντα ρόλο και τρόπο πρόσβασης. Έπειτα, το backend αναστέλλει τις εργασίες Work του χρήστη όταν ο νέος ρόλος δεν έχει πρόσβαση και επιχειρεί να ακυρώσει ενεργές εκτελέσεις και να σταματήσει τα sandbox τους. Αν αποτύχει ο καθαρισμός, η ανακληθείσα πρόσβαση παραμένει ανακληθείσα και η ενημέρωση ρόλου αναφέρει την αποτυχία, ώστε ο διαχειριστής να αποκαταστήσει το runtime και να δοκιμάσει ξανά.

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

Backup ολόκληρης της εργασίας

Ένα πλήρες backup Work χρειάζεται και τα δύο:

  • τη βάση δεδομένων Libre WebUI, η οποία περιέχει την κατοχή εργασίας, τα ονόματα πόρων Docker ή Kubernetes, τη δρομολόγηση παρόχων, τις εκτελέσεις, τα μηνύματα και τη δραστηριότητα· και
  • κάθε τόμο Docker ή PVC Kubernetes με ετικέτα ai.libre-webui.managed=true, όπου βρίσκονται τα αρχεία Work.

Τα αναλώσιμα container και οι διεργασίες προεπισκόπησης δεν χρειάζονται backup. Για συνεπές αντίγραφο, σταματήστε τη νέα δραστηριότητα Work και το backend πριν αποτυπώσετε τη βάση και τους χώρους εργασίας. Ακολουθήστε τη διαδικασία snapshot για τόμους Docker ή για τον πάροχο αποθήκευσης Kubernetes του backend που χρησιμοποιείτε.

Επαναφέρετε τη βάση και τους αντίστοιχους χώρους εργασίας μαζί. Δημιουργήστε ξανά κάθε τόμο ή PVC με το ακριβές όνομα που έχει καταγραφεί στη βάση και επαναφέρετε τα μεταδεδομένα κατοχής εργασίας, συμπεριλαμβανομένων των ai.libre-webui.task=<task UUID> και ai.libre-webui.managed=true. Η αντιγραφή μόνο των αρχείων δεν διατηρεί τις ετικέτες Docker ή Kubernetes. Η επαναφορά μόνο της βάσης δημιουργεί εγγραφές εργασιών χωρίς τα αρχεία τους· η επαναφορά μόνο του αποθηκευτικού χώρου χάνει την κατοχή εργασίας και τα παραγόμενα ονόματα πόρων που χρησιμοποιεί το Libre WebUI για να τον βρει και να τον επικυρώσει.

Αν η εγκατάσταση χρησιμοποιεί επίσης κρυπτογραφημένα διαπιστευτήρια παρόχων, ακολουθήστε τις κύριες οδηγίες backup του Libre WebUI για τον κατάλογο δεδομένων και το κλειδί κρυπτογράφησης.

Τοπικοποίηση και αραβική διάταξη RTL

Ολόκληρο το περιβάλλον Work είναι μεταφρασμένο και στις 25 υποστηριζόμενες γλώσσες: Αγγλικά, Αραβικά, Μπενγκάλι, Τσεχικά, Δανικά, Γερμανικά, Ισπανικά, Γαλλικά, Χίντι, Ινδονησιακά, Ισλανδικά, Ιταλικά, Ιαπωνικά, Κορεατικά, Μαλαϊκά, Ολλανδικά, Πολωνικά, Πορτογαλικά, Ρωσικά, Σουηδικά, Ταϊλανδικά, Τουρκικά, Ουκρανικά, Βιετναμέζικα και Κινεζικά.

Τα Αραβικά εφαρμόζουν lang="ar" και dir="rtl" πριν αποδοθεί το React. Η πλαϊνή γραμμή μετακινείται δεξιά, η Conversation καταλαμβάνει τη δεξιά πλευρά του διαχωρισμένου desktop, το Workspace την αριστερή, τα κατευθυντικά εικονίδια καθρεφτίζονται, η πλοήγηση καρτελών ακολουθεί σειρά RTL και η αλλαγή μεγέθους με σύρσιμο ή πληκτρολόγιο χρησιμοποιεί την οπτική σημασιολογία RTL.

Το τεχνικό περιεχόμενο παραμένει από αριστερά προς τα δεξιά όπου η κατεύθυνση επηρεάζει την ορθότητα:

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

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

Αντιμετώπιση προβλημάτων

Το runtime δεν είναι διαθέσιμο με npx

Το npx libre-webui εκτελεί το backend στον host, αλλά δεν εγκαθιστά το Docker. Εκτελέστε docker info ως τον ίδιο χρήστη λειτουργικού συστήματος που ξεκινά το Libre WebUI. Αν η εντολή λείπει ή δεν μπορεί να φτάσει τον daemon, εγκαταστήστε/ξεκινήστε το Docker ή διορθώστε τα δικαιώματα του χρήστη στον daemon και επαναφορτώστε το Work.

Επιβεβαιώστε επίσης ότι είτε το Ollama λειτουργεί σωστά είτε τουλάχιστον ένα ενεργό πρόσθετο completion/chat έχει ρυθμισμένα μοντέλο και διαπιστευτήριο για τον τρέχοντα διαχειριστή.

Το runtime δεν είναι διαθέσιμο σε Docker ή Kubernetes

Μια εγκατάσταση Compose του repository κανονικά δεν πρέπει να το αναφέρει: το image περιλαμβάνει Docker CLI και το αρχείο Compose προσαρτά το socket του host. Αν συμβεί, ο πίνακας αναφέρει την αιτία — CLI που λείπει από προσαρμοσμένο image, socket mount που αφαιρέθηκε ή λείπει ή ομάδα socket στην οποία δεν ανήκει ο χρήστης του container. Για την τελευταία περίπτωση, ορίστε DOCKER_GID και δημιουργήστε ξανά το container. Δείτε Εκτέλεση Work όταν το ίδιο το Libre WebUI βρίσκεται σε Docker.

Στο Kubernetes, ενεργοποιήστε το εγγενές runtime με --set work.enabled=true. Το Libre αναφέρει τότε kubernetes, ελέγχει το API Kubernetes και εκτελεί sandbox ως Pod με χώρους εργασίας PVC. Μην προσαρτάτε socket runtime container ενός node· δείτε τον οδηγό Kubernetes.

Δεν υπάρχουν μοντέλα συμβατά με Work

Για το Ollama, ελέγξτε ή επιλέξτε μοντέλο που δηλώνει tools. Για πρόσθετο, επιβεβαιώστε ότι:

  • ο τύπος του είναι completion ή chat·
  • είναι ενεργό·
  • το ακριβές μοντέλο εμφανίζεται στον ρυθμισμένο χάρτη μοντέλων·
  • ο τρέχων διαχειριστής διαθέτει χρησιμοποιήσιμο κλειδί API· και
  • το απομακρυσμένο μοντέλο υλοποιεί κλήσεις εργαλείων για τον συγκεκριμένο πάροχο.

Το Work δεν δρομολογεί ποτέ σε άλλο πάροχο ως εφεδρική επιλογή.

Αποτυγχάνει εγκατάσταση πακέτου ή απομακρυσμένη εντολή Git

Επιβεβαιώστε ότι η επιλεγμένη επώνυμη πολιτική runtime της εργασίας ενεργοποιεί πρόσβαση δικτύου. Δεν υπάρχει ανεξάρτητος διακόπτης δικτύου ανά εργασία. Στη συνέχεια, ελέγξτε DNS, proxy, firewall/NetworkPolicy, registry, πιστοποιητικό, runtime και ρύθμιση της υπηρεσίας upstream. Επιβεβαιώστε επίσης ότι το επιλεγμένο image runtime περιέχει την εντολή που καλείται.

Η καρτέλα Git αφορά μόνο τοπικές λειτουργίες και δεν εκτελεί ποτέ απομακρυσμένη ενέργεια. Χρησιμοποιήστε το Terminal ή την επιφάνεια εντολών του μοντέλου μόνο όταν η πολιτική δικτύου και διαπιστευτηρίων της εργασίας επιτρέπει σκόπιμα απομακρυσμένο Git. Μην επικολλάτε token μακράς διάρκειας στον χώρο εργασίας μιας εργασίας.

Μια εκτέλεση σταματά σε όριο agent

Το μοντέλο μπορεί να εξάντλησε το ρυθμισμένο όριο γύρων ή το παράγωγο όριο ασφαλείας κλήσεων εργαλείων. Το Work ζητά τελική παράδοση χωρίς εργαλεία πριν τερματίσει την εκτέλεση, επομένως εξετάστε την ολοκληρωμένη εργασία και τα βήματα που απομένουν. Η εργασία παραμένει σε Needs input, που είναι τελική κατάσταση για εκείνη την εκτέλεση αλλά σκόπιμα δεν δηλώνει ολοκλήρωση. Ξεκινήστε επόμενη εκτέλεση για να συνεχίσετε στον ίδιο διατηρούμενο χώρο εργασίας ή αυξήστε σκόπιμα το WORK_MAX_AGENT_ROUNDS για όλους τους παρόχους, αν το επιτρέπουν οι πόροι του host και η πολιτική κόστους απομακρυσμένων παρόχων.

HTTP 429 κατά την έναρξη εργασίας

Η εγκατάσταση ή ο διαχειριστής έφτασε σε όριο εισαγωγής ενεργών runtime ή αποθηκευμένων εργασιών. Περιμένετε να σταματήσει άλλη εκτέλεση ή προεπισκόπηση, διαγράψτε παρωχημένες εργασίες ή αυξήστε σκόπιμα την αντίστοιχη ρύθμιση WORK_MAX_* σε host με επαρκείς πόρους.

Η προεπισκόπηση δεν γίνεται έτοιμη

Επιβεβαιώστε ότι η εντολή παραμένει ενεργή, δεσμεύεται στο 0.0.0.0 και ακούει στο WORK_PREVIEW_PORT εντός 15 δευτερολέπτων. Με κενή εντολή, το Work εντοπίζει αυτόματα script dev σε package.json ή απλό index.html, ακόμη και σε μία εμφωλευμένη εφαρμογή. Αν το σφάλμα αναφέρει πολλές εφαρμογές ή κανένα υποστηριζόμενο σημείο εισόδου, εισαγάγετε ρητή εντολή στο προαιρετικό πεδίο. Οι προσαρμοσμένες εντολές ξεκινούν στο /workspace, επομένως χρησιμοποιήστε cd <app-directory> && ... για εμφωλευμένη εφαρμογή.

Η προεπισκόπηση λειτουργεί στον server αλλά όχι σε απομακρυσμένο browser

Επιβεβαιώστε ότι η εγκατάσταση εκτελεί build με τον υπογεγραμμένο proxy προεπισκόπησης Work και έπειτα επανεκκινήστε την προεπισκόπηση για να αντικαταστήσετε τυχόν παλιό URL loopback. Αν οι συνηθισμένες σελίδες φορτώνουν αλλά η άμεση επαναφόρτωση όχι, επιβεβαιώστε ότι ο reverse proxy και το tunnel επιτρέπουν αναβαθμίσεις WebSocket στο /api/work/previews/. Η δημοσιευμένη θύρα Docker πρέπει να παραμένει στο loopback του backend και δεν χρειάζεται άνοιγμα στο firewall.

Τα αρχεία παραμένουν αλλά η προεπισκόπηση σταμάτησε

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

Ένα αρχείο δεν ανοίγει ή δεν αποθηκεύεται

Το ενσωματωμένο API αρχείων δέχεται αρχεία κειμένου UTF-8 έως 2 MB. Αν κατά την αποθήκευση αναφερθεί ότι το αρχείο άλλαξε από τότε που ανοίχτηκε, επαναφορτώστε το πριν το επεξεργαστείτε ξανά, ώστε να μην αντικαταστήσετε αλλαγή άλλου μοντέλου ή browser.

Η επισήμανση σύνταξης μεταβαίνει σκόπιμα σε απλό κείμενο πάνω από 8.000 χαρακτήρες ή 400 γραμμές. Η μορφοποίηση έχει χωριστό όριο 100.000 χαρακτήρων και 4.000 γραμμών και υποστηρίζει μόνο τις τεκμηριωμένες οικογένειες αρχείων.

Το Work αναφέρει ότι ανακτά sandbox

Η εκκίνηση ή η απομάκρυνση δεν μπόρεσε να αποδείξει ότι σταμάτησε ένα ή περισσότερα γνωστά sandbox. Το Work παραμένει κλειστό για λόγους ασφάλειας και δοκιμάζει ξανά κάθε 10 δευτερόλεπτα. Αποκαταστήστε την πρόσβαση στον daemon Docker ή στο API Kubernetes και εξετάστε το log backend. Μη διαγράφετε εγγραφές εργασιών από τη βάση όσο οι επισημασμένοι πόροι runtime χρειάζονται ακόμη συμφωνία.

Αποτυγχάνει η διαγραφή εργασίας

Βεβαιωθείτε ότι το επιλεγμένο runtime είναι προσβάσιμο. Ένας αντικρουόμενος πόρος χωρίς την αναμενόμενη ετικέτα ai.libre-webui.task απορρίπτεται σκόπιμα αντί να αφαιρεθεί. Επιλύστε προσεκτικά τη σύγκρουση ονόματος/κατοχής και έπειτα δοκιμάστε ξανά τη διαγραφή.

Σύνοψη ασφαλείας

Πριν ενεργοποιήσετε το Work σε μια εγκατάσταση, θυμηθείτε:

  • Το Work είναι μόνο για διαχειριστές από προεπιλογή· αν το ανοίξετε σε όλους τους χρήστες, κάθε ενεργός λογαριασμός γίνεται χειριστής sandbox, γι’ αυτό αποφασίστε συνειδητά. Οι χώροι εργασίας φακέλου host παραμένουν μόνο για διαχειριστές σε κάθε τρόπο λειτουργίας.
  • Το backend πρέπει να ελέγχει τον ρυθμισμένο daemon Docker ή το namespace sandbox Kubernetes.
  • Τα container μειώνουν την έκθεση του συστήματος αρχείων αλλά δεν είναι εικονικές μηχανές.
  • Οι εργασίες χωρίς επώνυμη πολιτική εκτός σύνδεσης έχουν εξερχόμενη πρόσβαση δικτύου· οι επώνυμες πολιτικές επιλέγουν την προεπιλογή, ενώ οι περιορισμοί προορισμών παραμένουν ευθύνη του διαχειριστή.
  • Οι τόμοι Work δεν έχουν ανεξάρτητο όριο δίσκου.
  • Η καρτέλα Git αφορά μόνο τοπικές λειτουργίες· απομακρυσμένα διαπιστευτήρια δεν προσαρτώνται ούτε γίνονται δεκτά από το API της.
  • Η πολιτική firewall του host, η απομόνωση daemon, οι εξερχόμενοι περιορισμοί και τα πραγματικά όρια τόμων παραμένουν έλεγχοι που επιβάλλει ο διαχειριστής.
  • Οι απομακρυσμένοι πάροχοι λαμβάνουν τα αποτελέσματα εργαλείων που ζητήθηκαν και μπορούν να προκαλέσουν πολλές κλήσεις ανά εκτέλεση.
  • Οι θύρες προεπισκόπησης παραμένουν στο loopback του backend και εκτίθενται μόνο μέσω υπογεγραμμένων, ανακλητών URL proxy.
  • Το τυπικό Docker Compose παρέχει το runtime Docker και το Kubernetes/Helm παρέχει το εγγενές runtime Pod/PVC όταν work.enabled=true.
  • Ένα πλήρες backup απαιτεί τόσο τη βάση δεδομένων Libre WebUI όσο και τους τόμους Work.

Σχετική τεκμηρίωση