diff --git a/core/http/react-ui/e2e/chats-egress.spec.js b/core/http/react-ui/e2e/chats-egress.spec.js index 66762a05e6..d7b0249e27 100644 --- a/core/http/react-ui/e2e/chats-egress.spec.js +++ b/core/http/react-ui/e2e/chats-egress.spec.js @@ -249,7 +249,7 @@ test.describe('A card the administrator\'s limit cannot admit', () => { await stubChat(page, { egress: view({ ceiling: 'off', cards: [{ ...card, above_ceiling: true }] }), running: true }) await page.goto('/app/chats/c1') const blocked = page.getByTestId('chat-network-blocked') - await expect(blocked).toContainText('Network access is off for the Sandbox on this server.', { timeout: 15_000 }) + await expect(blocked).toContainText('Network access is off for commands on this server.', { timeout: 15_000 }) await expect(blocked.getByTestId('chat-network-consent-host')).toHaveText('example.com:443') await expect(blocked.getByTestId('chat-network-blocked-admin')).toContainText('An administrator can turn it on in the settings of Sandbox.') await expect(blocked.getByTestId('chat-network-blocked-admin-link')).toHaveAttribute('href', '/app/addons?detail=sandbox&view=settings') @@ -272,7 +272,7 @@ test.describe('A card the administrator\'s limit cannot admit', () => { state.consent = async (route) => { state.egress = view({ ceiling: 'off', cards: [{ ...card, state: 'refused', above_ceiling: true }] }) await new Promise(r => setTimeout(r, 300)) - return route.fulfill({ status: 400, json: { error: { code: 400, type: 'egress_above_ceiling', message: 'the limit an administrator set for the Sandbox network does not admit this host' } } }) + return route.fulfill({ status: 400, json: { error: { code: 400, type: 'egress_above_ceiling', message: 'the limit an administrator set for the network of commands does not admit this host' } } }) } await page.goto('/app/chats/c1') const once = page.getByTestId('chat-network-consent-once') @@ -351,7 +351,7 @@ test.describe('The network of the commands on the add-on page', () => { await page.goto('/app/addons?detail=sandbox&view=settings') const block = page.getByTestId('host-control-network-policy') await expect(block).toBeVisible({ timeout: 15_000 }) - await expect(page.getByTestId('settings-egress-serves')).toHaveText('Commands run isolated in the sandbox add-on') + await expect(page.getByTestId('settings-egress-serves')).toHaveText('Commands run isolated in the Sandbox add-on') await expect(page.getByTestId('settings-egress-counts')).toHaveText('Last 24 hours: 4 allowed, 1 blocked.') await expect(block.locator('[data-field="chats_egress_ceiling"]')).toBeVisible() // The audit retention is a runtime setting of this host, on the Settings page. diff --git a/core/http/react-ui/i18n-baseline.json b/core/http/react-ui/i18n-baseline.json index 0004fa409c..913e4c22b8 100644 --- a/core/http/react-ui/i18n-baseline.json +++ b/core/http/react-ui/i18n-baseline.json @@ -3,7 +3,7 @@ "de/agents": 217, "de/auth": 65, "de/chat": 126, - "de/chats": 272, + "de/chats": 268, "de/collections": 73, "de/common": 1, "de/home": 114, @@ -21,7 +21,7 @@ "es/agents": 217, "es/auth": 65, "es/chat": 126, - "es/chats": 272, + "es/chats": 268, "es/collections": 73, "es/common": 1, "es/home": 114, @@ -39,7 +39,7 @@ "fr/agents": 217, "fr/auth": 75, "fr/chat": 121, - "fr/chats": 272, + "fr/chats": 268, "fr/collections": 73, "fr/home": 109, "fr/importModel": 62, @@ -56,7 +56,7 @@ "id/agents": 217, "id/auth": 65, "id/chat": 126, - "id/chats": 272, + "id/chats": 268, "id/collections": 73, "id/home": 114, "id/importModel": 64, @@ -72,7 +72,7 @@ "it/agents": 217, "it/auth": 65, "it/chat": 126, - "it/chats": 272, + "it/chats": 268, "it/collections": 73, "it/common": 1, "it/home": 114, @@ -90,7 +90,7 @@ "ko/agents": 217, "ko/auth": 65, "ko/chat": 126, - "ko/chats": 272, + "ko/chats": 268, "ko/collections": 73, "ko/common": 1, "ko/home": 114, @@ -108,7 +108,7 @@ "pt-BR/agents": 217, "pt-BR/auth": 65, "pt-BR/chat": 123, - "pt-BR/chats": 272, + "pt-BR/chats": 268, "pt-BR/collections": 73, "pt-BR/home": 103, "pt-BR/importModel": 64, @@ -124,7 +124,7 @@ "zh-CN/agents": 217, "zh-CN/auth": 65, "zh-CN/chat": 126, - "zh-CN/chats": 272, + "zh-CN/chats": 268, "zh-CN/collections": 73, "zh-CN/common": 1, "zh-CN/home": 114, diff --git a/core/http/react-ui/public/locales/de/admin.json b/core/http/react-ui/public/locales/de/admin.json index 80ef4b6d3f..7b15ff2b1c 100644 --- a/core/http/react-ui/public/locales/de/admin.json +++ b/core/http/react-ui/public/locales/de/admin.json @@ -111,10 +111,10 @@ "loadFailedTitle": "Die Einstellungen konnten nicht geladen werden.", "egress": { "title": "Netzwerk der Befehle", - "intro": "Befehle in der Sandbox erreichen das Netzwerk nur über einen Proxy, der LocalAI bei jeder Verbindung fragt. Legen Sie unten das Limit, die Voreinstellung neuer Chats, die Ports, zusätzliche Registries und die Aufbewahrung des Protokolls fest; jede Person wählt die Voreinstellung eines Chats in dessen Tools-Menü bis zum Limit und erlaubt einen blockierten Host über eine Karte.", + "intro": "Isoliert ausgeführte Befehle erreichen das Netzwerk nur über einen Proxy, der LocalAI bei jeder Verbindung fragt. Legen Sie unten das Limit, die Voreinstellung neuer Chats, die Ports, zusätzliche Registries und die Aufbewahrung des Protokolls fest; jede Person wählt die Voreinstellung eines Chats in dessen Tools-Menü bis zum Limit und erlaubt einen blockierten Host über eine Karte.", "serves": "Befehle laufen isoliert im Add-on {{name}}", "servesHost": "Befehle laufen über {{name}} auf diesem Rechner", - "servesNone": "Noch führt keine Sandbox Befehle aus", + "servesNone": "Noch führt kein Add-on Befehle aus", "hostNote": "Das Host-Backend führt Befehle auf diesem Rechner mit dessen Netzwerk aus: Diese Einstellungen gelten dafür nicht.", "counts": "Letzte 24 Stunden: {{allowed}} erlaubt, {{blocked}} blockiert.", "private": "Regeln eines Administrators dürfen private Netzwerke erreichen", @@ -123,7 +123,7 @@ "registries": "Paket-Registries ({{count}})", "showAudit": "Protokoll zeigen", "hideAudit": "Protokoll ausblenden", - "loadFailed": "Die Einstellungen des Sandbox-Netzwerks konnten nicht gelesen werden", + "loadFailed": "Die Netzwerkeinstellungen für Befehle konnten nicht gelesen werden", "audit": { "verdict": "Ergebnis", "host": "Host", @@ -157,7 +157,7 @@ "listLabel": "Immer erlaubte Hosts", "remove": "{{host}} entfernen", "empty": "Noch kein Host. Geben Sie einen Hostnamen ein, oder Host:Port, um den Port festzulegen.", - "hint": "Nur genaue Namen. Mit :Port erlauben Sie nur einen Port; sonst gelten die Netzwerk-Ports der Sandbox.", + "hint": "Nur genaue Namen. Mit :Port erlauben Sie nur einen Port; sonst gelten die Netzwerk-Ports für Befehle.", "count": "{{n}}/{{max}}", "errors": { "empty": "Geben Sie einen Hostnamen ein.", @@ -329,7 +329,6 @@ "byAddon": "Add-on: {{name}}", "byNone": "Aus", "unavailable": "Dieser Server kann es nicht ausführen: {{reason}}.", - "installSandbox": "Installieren Sie die Sandbox, um Befehle isoliert auszuführen", "replaceExplain": "Diese Add-ons ersetzen {{tool}}: Das gewählte stellt es in jedem Chat bereit, in dem es an ist und läuft, und das eingebaute wird ausgeblendet. Nur eines kann aktiv sein. Solange Sie nichts wählen, stellt das zuerst installierte es bereit.", "defaultInstalledFirst": "Standard: zuerst installiert", "installedOn": "Installiert {{when}}", @@ -342,7 +341,7 @@ "list_agents": "Gespeicherte Agenten" }, "descriptions": { - "bash": "Führt Befehle und Code für die Chats direkt auf diesem Rechner aus, wenn keine Sandbox bash bereitstellt. Das Sandbox-Add-on ersetzt es durch isolierte Befehle.", + "bash": "Führt Befehle und Code für die Chats direkt auf diesem Rechner aus, wenn kein Add-on bash bereitstellt. Ein Add-on, das Befehle isoliert ausführt, ersetzt es.", "web_search": "Durchsucht das Web für die Chats ohne Schlüssel (DuckDuckGo, dann Brave Search, dann Bing) oder mit Ihrer SearXNG-Instanz, wenn eine eingerichtet ist.", "web_fetch": "Liest für die Chats eine öffentliche Webseite oder Datei über ihre Adresse. Adressen in Ihrem Netzwerk werden abgelehnt, außer Sie erlauben sie.", "list_agents": "Erlaubt einem Chat, die gespeicherten Agenten des Benutzers aufzulisten und einen als Sub-Agenten zu starten. Jeder Chat schaltet es in seinem Werkzeugmenü ein." @@ -355,7 +354,7 @@ "on": "Für alle erlauben.", "onHint": "Die Chats aller Benutzer führen hier ohne Nachfrage Befehle aus, auch geplante Läufe und Sub-Agenten.", "default": "Nicht gesetzt: Es gilt der Standard ({{mode}}).", - "warning": "Befehle laufen als der Benutzer, unter dem LocalAI läuft, ohne Isolierung und mit dem Netzwerk dieses Rechners: Sie können lesen, was LocalAI lesen kann, und das Internet, Ihr Netzwerk und die LocalAI-API erreichen. Jeder Befehl wird protokolliert. Installieren Sie die Sandbox, um sie zu isolieren." + "warning": "Befehle laufen als der Benutzer, unter dem LocalAI läuft, ohne Isolierung und mit dem Netzwerk dieses Rechners: Sie können lesen, was LocalAI lesen kann, und das Internet, Ihr Netzwerk und die LocalAI-API erreichen. Jeder Befehl wird protokolliert. Installieren Sie ein Add-on, das Befehle isoliert." }, "modes": { "off": "aus", diff --git a/core/http/react-ui/public/locales/de/agents.json b/core/http/react-ui/public/locales/de/agents.json index 8f63693c93..51d2cc2ec7 100644 --- a/core/http/react-ui/public/locales/de/agents.json +++ b/core/http/react-ui/public/locales/de/agents.json @@ -128,7 +128,7 @@ "previewEdit": "The agent this form will save, and how it differs from the saved one.", "default": "Default", "network": "Netzwerk der Befehle in unbeaufsichtigten Läufen", - "networkHelp": "Wenn ein Trigger oder ein Connector diesen Agenten ausführt, erreichen seine Sandbox-Befehle so viel vom Netzwerk, bis zum Limit eines Administrators. Ein Lauf fragt nie: Ein Host außerhalb wird blockiert. Ein Chat, den Sie mit diesem Agenten starten, beginnt ebenfalls damit.", + "networkHelp": "Wenn ein Trigger oder ein Connector diesen Agenten ausführt, erreichen seine Befehle so viel vom Netzwerk, bis zum Limit eines Administrators. Ein Lauf fragt nie: Ein Host außerhalb wird blockiert. Ein Chat, den Sie mit diesem Agenten starten, beginnt ebenfalls damit.", "networkPresets": { "off": "Aus", "registries": "Paket-Registries", @@ -463,7 +463,7 @@ "readShort": "nur lesen", "writeShort": "lesen und ändern", "help": "Chats mit diesem Agenten sehen nur diesen Ordner und ihren eigenen Chat-Ordner. Geteilte Ordner und Skills bleiben lesbar. MCP-Server und Web-Tools, die du freigibst, sind nicht auf diesen Ordner beschränkt.", - "commands": "Befehle dieses Agenten laufen nur im Sandbox-Add-on, nie direkt auf diesem Rechner.", + "commands": "Befehle dieses Agenten laufen nur in einem Add-on, das sie isoliert, nie direkt auf diesem Rechner.", "nextMessage": "Eine Änderung gilt ab der nächsten Nachricht jedes Chats.", "missing": "Dieser Ordner existiert nicht mehr. Wähle einen anderen Ordner, um diesen Agenten zu nutzen.", "unset": "Noch kein Ordner gewählt. Wähle einen Ordner, um diesen Agenten zu nutzen.", diff --git a/core/http/react-ui/public/locales/de/chat.json b/core/http/react-ui/public/locales/de/chat.json index c8d29a3349..c549403e53 100644 --- a/core/http/react-ui/public/locales/de/chat.json +++ b/core/http/react-ui/public/locales/de/chat.json @@ -578,7 +578,7 @@ "skillsOn_one": "{{count}} Skill", "skillsOn_other": "{{count}} Skills", "commands": "Befehle", - "isolated": "Laufen in einer isolierten Sandbox", + "isolated": "Isoliert ausgeführt", "host": "Laufen auf diesem Rechner", "noCommands": "Nicht möglich", "context": "Kontext", diff --git a/core/http/react-ui/public/locales/de/chats.json b/core/http/react-ui/public/locales/de/chats.json index 1e450375ff..c7b1eaf1eb 100644 --- a/core/http/react-ui/public/locales/de/chats.json +++ b/core/http/react-ui/public/locales/de/chats.json @@ -270,24 +270,23 @@ "commands": { "title": "Befehle können hier nicht laufen", "none": "Es ist kein Add-on installiert, das Code ausführt. Der Assistent kann Dateien schreiben, aber keine Skripte oder Befehle ausführen.", - "off": "Das Sandbox-Add-on ist für diesen Chat aus. Schalte es im Menü „Werkzeuge“ ein, damit der Assistent Code ausführen kann.", - "unavailable": "Das Sandbox-Add-on ist installiert, kann auf diesem Server aber keine Befehle ausführen.", - "unavailableWhy": "Das Sandbox-Add-on kann auf diesem Server keine Befehle ausführen: {{reason}}", - "install": "Sandbox installieren", - "openSandbox": "Sandbox-Add-on öffnen", - "askInstall": "Bitte eine Administratorin oder einen Administrator, das Sandbox-Add-on zu installieren.", "askFix": "Bitte eine Administratorin oder einen Administrator, das zu beheben.", "hide": "Ausblenden", "hideLabel": "Diesen Hinweis ausblenden", "chipTitle": "Dieser Chat kann keinen Code und keine Befehle ausführen. Für Details auswählen.", "hostTitle": "Befehle laufen auf diesem Rechner", - "host": "Befehle laufen auf diesem Rechner, mit seinen Dateien und seinem Netzwerk, ohne Isolierung. Installieren Sie die Sandbox für Isolierung.", - "hostOff": "Die Sandbox ist für diesen Chat aus, daher laufen Befehle auf diesem Rechner, mit seinen Dateien und seinem Netzwerk, ohne Isolierung. Schalten Sie die Sandbox in diesem Menü ein, um sie zu isolieren.", - "hostUnavailable": "Die Sandbox kann hier nicht laufen, daher laufen Befehle auf diesem Rechner, mit seinen Dateien und seinem Netzwerk, ohne Isolierung.", - "hostUnavailableWhy": "Die Sandbox kann hier nicht laufen ({{reason}}), daher laufen Befehle auf diesem Rechner, mit seinen Dateien und seinem Netzwerk, ohne Isolierung.", "hostChipTitle": "Befehle in diesem Chat laufen auf diesem Rechner, ohne Isolierung. Für Details auswählen.", "providerHost": "Befehle werden ohne Isolation auf dem Server ausgeführt.", "unknown": "Ausführungsbereitschaft oder Isolation ist unbekannt.", + "unknownBy": { + "owner_unreachable": "Ausführungsbereitschaft oder Isolation ist unbekannt: der Besitzer des Add-ons war nicht erreichbar.", + "not_reported": "Ausführungsbereitschaft oder Isolation ist unbekannt: das Add-on hat seinen Ausführungsstatus nicht gemeldet.", + "stale": "Ausführungsbereitschaft oder Isolation ist unbekannt: der Status passte nicht zur aktuellen Version des Add-ons.", + "invalid_status": "Ausführungsbereitschaft oder Isolation ist unbekannt: das Add-on hat einen Status gesendet, den der Host nicht annehmen konnte.", + "not_selected": "Ausführungsbereitschaft oder Isolation ist unbekannt: das Add-on führt die Befehle dieses Chats nicht aus.", + "no_answer": "Ausführungsbereitschaft oder Isolation ist unbekannt: das Add-on hat nicht rechtzeitig geantwortet.", + "reported_unknown": "Ausführungsbereitschaft oder Isolation ist unbekannt: das Add-on hat gemeldet, dass es das nicht sagen kann." + }, "providerUnavailable": "Der ausgewählte Ausführungsanbieter ist nicht verfügbar.", "disabled": "Die Befehlsausführung ist für diesen Chat ausgeschaltet." }, @@ -302,7 +301,6 @@ "expired": "Nicht beantwortet: Die Runde, die gefragt hat, ist beendet, daher wurde der Befehl nicht ausgeführt." }, "provider": { - "sandbox": "Sandbox", "addon": "Add-on {{name}}", "host": "Dieser Rechner, nicht isoliert", "hostOnce": "Dieser Rechner, einmal erlaubt", @@ -326,9 +324,6 @@ "servedBy": "Bedient vom Add-on {{provider}}", "servedByTool": "{{tool}}: {{provider}}", "servedByBuiltin": "eingebaut", - "sandbox": { - "starting": "Die Sandbox startet. LocalAI prüft in {{seconds}} s erneut." - }, "fallbackBuiltin": "{{addon}} ersetzt {{tool}}, kann diesen Chat aber gerade nicht bedienen (gestoppt, hier ausgeschaltet oder nicht freigegeben): das eingebaute {{tool}} wird verwendet.", "fallbackNone": "{{addon}} ersetzt {{tool}}, kann diesen Chat aber gerade nicht bedienen, und das eingebaute {{tool}} ist aus: dieser Chat hat kein {{tool}}.", "shell": { @@ -348,13 +343,13 @@ "all": "Alle öffentlichen Seiten" }, "presetHint": { - "off": "Befehle in der Sandbox erreichen kein Netzwerk.", + "off": "Befehle erreichen kein Netzwerk.", "registries": "Befehle erreichen nur die Paket-Registries (PyPI, npm, Go, crates.io, RubyGems, Maven Central, GitHub-Releases).", "all": "Befehle erreichen jede öffentliche Seite." }, "limited": "Von Ihrem Administrator begrenzt", "limitedBy": "Ihr Administrator erlaubt höchstens: {{limit}}.", - "hostNetwork": "Befehle laufen auf diesem Rechner und nutzen dessen Netzwerk. Netzwerkgrenzen erfordern das Sandbox-Add-on.", + "hostNetwork": "Befehle laufen auf diesem Rechner und nutzen dessen Netzwerk. Netzwerkgrenzen erfordern ein Add-on, das Befehle isoliert.", "panel": "Regeln und Anfragen ({{count}})", "rules": "Regeln dieses Chats", "cards": "Anfragen dieses Chats", @@ -386,8 +381,8 @@ "blocked": { "titleOff": "Netzwerkzugriff ist aus", "titleCapped": "Netzwerkzugriff ist begrenzt", - "bodyOff": "Der Netzwerkzugriff der Sandbox ist auf diesem Server ausgeschaltet. Ein Befehl wollte erreichen:", - "bodyCapped": "Dieser Server erlaubt für das Sandbox-Netzwerk nur: {{limit}}. Ein Befehl wollte erreichen:", + "bodyOff": "Der Netzwerkzugriff für Befehle ist auf diesem Server ausgeschaltet. Ein Befehl wollte erreichen:", + "bodyCapped": "Dieser Server erlaubt für das Netzwerk der Befehle nur: {{limit}}. Ein Befehl wollte erreichen:", "adminOff": "Ein Administrator kann ihn in den Einstellungen von {{name}} einschalten.", "adminCapped": "Ein Administrator kann das Limit in den Einstellungen von {{name}} anheben.", "adminLink": "Einstellungen von {{name}} öffnen", diff --git a/core/http/react-ui/public/locales/de/home.json b/core/http/react-ui/public/locales/de/home.json index 0fffa69d35..179ba1c980 100644 --- a/core/http/react-ui/public/locales/de/home.json +++ b/core/http/react-ui/public/locales/de/home.json @@ -82,17 +82,13 @@ "step2Title": "Modell installieren", "step2Body": "Klicken Sie auf Installieren, um es automatisch herunterzuladen und zu konfigurieren.", "step3Title": "Chat starten", - "step3Body": "Chatten Sie mit Ihrem Modell direkt im Browser oder nutzen Sie die API.", - "sandboxTitle": "Code sicher ausführen (optional)", - "sandboxBody": "Installieren Sie das Sandbox-Add-on, damit das Modell Code und Befehle isoliert ausführt. Ohne es laufen Befehle direkt auf diesem Rechner, mit vollem Netzwerkzugriff und ohne Isolation." + "step3Body": "Chatten Sie mit Ihrem Modell direkt im Browser oder nutzen Sie die API." }, "browseGallery": "Modellgalerie durchsuchen", "importModel": "Modell importieren", "docs": "Dokumentation", "noModelsTitle": "Keine Modelle verfügbar", - "noModelsBody": "Es sind noch keine Modelle installiert. Bitten Sie Ihren Administrator, Modelle einzurichten, damit Sie mit dem Chatten beginnen können.", - "sandboxInstall": "Sandbox installieren", - "sandboxSkip": "Überspringen" + "noModelsBody": "Es sind noch keine Modelle installiert. Bitten Sie Ihren Administrator, Modelle einzurichten, damit Sie mit dem Chatten beginnen können." }, "connect": { "title": "Ein Endpunkt, jede API", @@ -139,7 +135,9 @@ }, "complete": "ergänzen" }, - "notice": { "appUnavailable": "Die App ist nicht mehr verfügbar." }, + "notice": { + "appUnavailable": "Die App ist nicht mehr verfügbar." + }, "picker": { "aliasOf": "Alias von {{target}}", "aliasBroken": "defekter Alias", diff --git a/core/http/react-ui/public/locales/en/admin.json b/core/http/react-ui/public/locales/en/admin.json index 8d5577389b..0b2820aa62 100644 --- a/core/http/react-ui/public/locales/en/admin.json +++ b/core/http/react-ui/public/locales/en/admin.json @@ -62,10 +62,10 @@ "loadFailedTitle": "Could not load the settings.", "egress": { "title": "Network of commands", - "intro": "Commands in the Sandbox reach the network only through a proxy that asks LocalAI about each connection. Set the limit, the preset of a new chat, the ports, the extra registries and the audit retention below; a person chooses the preset of each chat in its Tools menu, up to the limit, and allows a blocked host on a card.", + "intro": "Commands that run in isolation reach the network only through a proxy that asks LocalAI about each connection. Set the limit, the preset of a new chat, the ports, the extra registries and the audit retention below; a person chooses the preset of each chat in its Tools menu, up to the limit, and allows a blocked host on a card.", "serves": "Commands run isolated in the {{name}} add-on", "servesHost": "Commands run on this machine through {{name}}", - "servesNone": "No Sandbox runs commands yet", + "servesNone": "No add-on runs commands yet", "hostNote": "The host backend runs commands on this machine with its network: these settings do not apply to them.", "counts": "Last 24 hours: {{allowed}} allowed, {{blocked}} blocked.", "private": "Let an administrator’s rule reach private networks", @@ -74,7 +74,7 @@ "registries": "Package registries ({{count}})", "showAudit": "Show the audit", "hideAudit": "Hide the audit", - "loadFailed": "The Sandbox network settings could not be read", + "loadFailed": "The network settings for commands could not be read", "audit": { "verdict": "Verdict", "host": "Host", @@ -108,7 +108,7 @@ "listLabel": "Always allowed hosts", "remove": "Remove {{host}}", "empty": "No host yet. Write a host name, or host:port to pin the port.", - "hint": "Exact names only. Add :port to allow one port; otherwise the Sandbox network ports apply.", + "hint": "Exact names only. Add :port to allow one port; otherwise the network ports of commands apply.", "count": "{{n}}/{{max}}", "errors": { "empty": "Write a host name.", @@ -179,7 +179,6 @@ "byAddon": "Add-on: {{name}}", "byNone": "Off", "unavailable": "This server cannot run it: {{reason}}.", - "installSandbox": "Install the Sandbox to run commands isolated", "replaceExplain": "These add-ons replace {{tool}}: the one chosen serves it in every chat where it is on and running, and the built-in is hidden. Only one can be active. Until you choose, the one installed first serves.", "defaultInstalledFirst": "Default: installed first", "installedOn": "Installed {{when}}", @@ -192,7 +191,7 @@ "list_agents": "Saved agents" }, "descriptions": { - "bash": "Runs commands and code for the chats directly on this machine when no Sandbox serves bash. The Sandbox add-on replaces it with isolated commands.", + "bash": "Runs commands and code for the chats directly on this machine when no add-on serves bash. An add-on that runs commands in isolation replaces it.", "web_search": "Searches the web for the chats without a key (DuckDuckGo, then Brave Search, then Bing), or with your SearXNG instance when one is set.", "web_fetch": "Reads a public web page or file by its address for the chats. Addresses inside your network are refused unless you allow them.", "list_agents": "Lets a chat list the user's saved agents and start one as a sub-agent. Each chat switches it on in its Tools menu." @@ -205,7 +204,7 @@ "on": "Allow for everyone.", "onHint": "Every user's chats run commands here without asking, also scheduled runs and sub-agents.", "default": "Not set: the default applies ({{mode}}).", - "warning": "Commands run as the user LocalAI runs as, with no isolation and with this machine's network: they can read what LocalAI can read and reach the internet, your network and the LocalAI API. Every command is logged. Install the Sandbox to isolate them." + "warning": "Commands run as the user LocalAI runs as, with no isolation and with this machine's network: they can read what LocalAI can read and reach the internet, your network and the LocalAI API. Every command is logged. Install an add-on that isolates commands." }, "modes": { "off": "off", diff --git a/core/http/react-ui/public/locales/en/agents.json b/core/http/react-ui/public/locales/en/agents.json index e47ea3c150..57b83b474e 100644 --- a/core/http/react-ui/public/locales/en/agents.json +++ b/core/http/react-ui/public/locales/en/agents.json @@ -231,7 +231,7 @@ "importDropped": "Not imported: {{keys}}.", "default": "Default", "network": "Network of commands in unattended runs", - "networkHelp": "When a trigger or a connector runs this agent, its Sandbox commands reach this much of the network, up to the limit an administrator set. A run never asks: a host outside it is blocked. A chat you start with this agent starts with it too.", + "networkHelp": "When a trigger or a connector runs this agent, its commands reach this much of the network, up to the limit an administrator set. A run never asks: a host outside it is blocked. A chat you start with this agent starts with it too.", "networkPresets": { "off": "Off", "registries": "Package registries", @@ -702,7 +702,7 @@ "readShort": "read only", "writeShort": "read and change", "help": "Chats with this agent see only this folder and their own chat folder. Shared folders and skills stay readable. MCP servers and web tools you grant are not limited to this folder.", - "commands": "Commands of this agent run only in the Sandbox add-on, never directly on this machine.", + "commands": "Commands of this agent run only in an add-on that isolates them, never directly on this machine.", "nextMessage": "A change applies from the next message of each chat.", "missing": "This folder is gone. Choose another folder to use this agent.", "unset": "No folder is chosen yet. Choose a folder to use this agent.", diff --git a/core/http/react-ui/public/locales/en/chat.json b/core/http/react-ui/public/locales/en/chat.json index b69a892a21..55c4b16738 100644 --- a/core/http/react-ui/public/locales/en/chat.json +++ b/core/http/react-ui/public/locales/en/chat.json @@ -725,7 +725,7 @@ "skillsOn_one": "{{count}} skill", "skillsOn_other": "{{count}} skills", "commands": "Commands", - "isolated": "Run in an isolated sandbox", + "isolated": "Run in isolation", "host": "Run on this machine", "noCommands": "Cannot run", "context": "Context", diff --git a/core/http/react-ui/public/locales/en/chats.json b/core/http/react-ui/public/locales/en/chats.json index 1e284dc579..bcad7db152 100644 --- a/core/http/react-ui/public/locales/en/chats.json +++ b/core/http/react-ui/public/locales/en/chats.json @@ -387,31 +387,14 @@ "connectors": "Your connectors", "manage": "Manage connectors", "tools": "{{count}} tools", - "sandbox": { - "isolated": "Runs commands isolated ({{backend}})", - "host": "Commands run directly on this machine, with no isolation", - "cannot": "Sandbox unavailable: this host cannot run commands", - "cannotWhy": "Sandbox unavailable: {{reason}}", - "starting": "The Sandbox is starting. LocalAI checks again in {{seconds}} s." - }, "commands": { "title": "Commands can't run here", "none": "No add-on that runs code is installed, so the assistant can write files but cannot run scripts or commands.", - "off": "The Sandbox add-on is off for this chat. Switch it on in the Tools menu to let the assistant run code.", - "unavailable": "The Sandbox add-on is installed but cannot run commands on this server.", - "unavailableWhy": "The Sandbox add-on cannot run commands on this server: {{reason}}", - "install": "Install the Sandbox", - "openSandbox": "Open the Sandbox add-on", - "askInstall": "Ask an administrator to install the Sandbox add-on.", "askFix": "Ask an administrator to fix it.", "hide": "Hide", "hideLabel": "Hide this notice", "chipTitle": "This chat cannot run code or commands. Select for details.", "hostTitle": "Commands run on this machine", - "host": "Commands run on this machine, with its files and network, not isolated. Install the Sandbox for isolation.", - "hostOff": "The Sandbox is off for this chat, so commands run on this machine, with its files and network, not isolated. Switch the Sandbox on in this menu to isolate them.", - "hostUnavailable": "The Sandbox cannot run here, so commands run on this machine, with its files and network, not isolated.", - "hostUnavailableWhy": "The Sandbox cannot run here ({{reason}}), so commands run on this machine, with its files and network, not isolated.", "hostChipTitle": "Commands in this chat run on this machine, not isolated. Select for details.", "providerHost": "Commands run on the server without isolation.", "unknown": "Execution readiness or isolation is unknown.", @@ -438,7 +421,6 @@ "expired": "Not answered: the turn that asked has ended, so the command did not run." }, "provider": { - "sandbox": "Sandbox", "addon": "Add-on {{name}}", "host": "This machine, not isolated", "hostOnce": "This machine, allowed once", @@ -739,13 +721,13 @@ "all": "All public sites" }, "presetHint": { - "off": "Commands in the Sandbox reach no network.", + "off": "Commands reach no network.", "registries": "Commands reach the package registries only (PyPI, npm, Go, crates.io, RubyGems, Maven Central, GitHub releases).", "all": "Commands reach every public site." }, "limited": "Limited by your administrator", "limitedBy": "Your administrator allows at most: {{limit}}.", - "hostNetwork": "Commands run on this machine and use its network. Network limits need the Sandbox add-on.", + "hostNetwork": "Commands run on this machine and use its network. Network limits need an add-on that isolates commands.", "panel": "Rules and requests ({{count}})", "rules": "Rules of this chat", "cards": "Requests of this chat", @@ -777,8 +759,8 @@ "blocked": { "titleOff": "Network access is off", "titleCapped": "Network access is limited", - "bodyOff": "Network access is off for the Sandbox on this server. A command asked for", - "bodyCapped": "This server only allows {{limit}} for the Sandbox network. A command asked for", + "bodyOff": "Network access is off for commands on this server. A command asked for", + "bodyCapped": "This server only allows {{limit}} for the network of commands. A command asked for", "adminOff": "An administrator can turn it on in the settings of {{name}}.", "adminCapped": "An administrator can raise the limit in the settings of {{name}}.", "adminLink": "Open the settings of {{name}}", diff --git a/core/http/react-ui/public/locales/en/home.json b/core/http/react-ui/public/locales/en/home.json index 2ceeb1b6c3..de2f4803be 100644 --- a/core/http/react-ui/public/locales/en/home.json +++ b/core/http/react-ui/public/locales/en/home.json @@ -91,18 +91,14 @@ "step2Title": "Install a Model", "step2Body": "Click install to download and configure it automatically.", "step3Title": "Start Chatting", - "step3Body": "Chat with your model right from the browser or use the API.", - "sandboxTitle": "Run code safely (optional)", - "sandboxBody": "Install the Sandbox add-on so the model runs code and commands in isolation. Without it, commands run directly on this machine, with full network access and no isolation." + "step3Body": "Chat with your model right from the browser or use the API." }, "browseGallery": "Browse Model Gallery", "importModel": "Import Model", "docs": "Docs", "noModelsTitle": "No Models Available", "noModelsBody": "There are no models installed yet. Ask your administrator to set up models so you can start chatting.", - "guideLabel": "Getting started", - "sandboxInstall": "Install Sandbox", - "sandboxSkip": "Skip" + "guideLabel": "Getting started" }, "starters": { "title": "Recommended for your hardware", @@ -187,7 +183,10 @@ "move": "move", "close": "close", "commandDiagnostics": "App command diagnostics", - "apps": { "label": "Apps", "desc": "Browse installed apps" }, + "apps": { + "label": "Apps", + "desc": "Browse installed apps" + }, "group": { "addons": "Apps", "chat": "Chat", diff --git a/core/http/react-ui/public/locales/es/admin.json b/core/http/react-ui/public/locales/es/admin.json index 6ad09cabc7..3ac4a3b780 100644 --- a/core/http/react-ui/public/locales/es/admin.json +++ b/core/http/react-ui/public/locales/es/admin.json @@ -111,10 +111,10 @@ "loadFailedTitle": "No se pudieron cargar los ajustes.", "egress": { "title": "Red de los comandos", - "intro": "Los comandos del Sandbox llegan a la red solo a través de un proxy que consulta a LocalAI cada conexión. Abajo se fijan el límite, el valor de un chat nuevo, los puertos, los registros adicionales y la retención del registro; cada persona elige el valor de cada chat en su menú Herramientas, hasta el límite, y permite un host bloqueado en una tarjeta.", + "intro": "Los comandos que se ejecutan aislados llegan a la red solo a través de un proxy que consulta a LocalAI cada conexión. Abajo se fijan el límite, el valor de un chat nuevo, los puertos, los registros adicionales y la retención del registro; cada persona elige el valor de cada chat en su menú Herramientas, hasta el límite, y permite un host bloqueado en una tarjeta.", "serves": "Los comandos se ejecutan aislados en el complemento {{name}}", "servesHost": "Los comandos se ejecutan en esta máquina con {{name}}", - "servesNone": "Ningún Sandbox ejecuta comandos todavía", + "servesNone": "Ningún complemento ejecuta comandos todavía", "hostNote": "El backend del host ejecuta comandos en esta máquina con su red: estos ajustes no se les aplican.", "counts": "Últimas 24 horas: {{allowed}} permitidas, {{blocked}} bloqueadas.", "private": "Permitir que la regla de un administrador llegue a redes privadas", @@ -123,7 +123,7 @@ "registries": "Registros de paquetes ({{count}})", "showAudit": "Ver el registro", "hideAudit": "Ocultar el registro", - "loadFailed": "No se pudieron leer los ajustes de red del Sandbox", + "loadFailed": "No se pudieron leer los ajustes de red de los comandos", "audit": { "verdict": "Resultado", "host": "Host", @@ -157,7 +157,7 @@ "listLabel": "Hosts siempre permitidos", "remove": "Quitar {{host}}", "empty": "Aún no hay hosts. Escribe un nombre de host, o host:puerto para fijar el puerto.", - "hint": "Solo nombres exactos. Añade :puerto para permitir un único puerto; si no, se aplican los puertos de red del Sandbox.", + "hint": "Solo nombres exactos. Añade :puerto para permitir un único puerto; si no, se aplican los puertos de red de los comandos.", "count": "{{n}}/{{max}}", "errors": { "empty": "Escribe un nombre de host.", @@ -329,7 +329,6 @@ "byAddon": "Complemento: {{name}}", "byNone": "Desactivada", "unavailable": "Este servidor no puede ejecutarla: {{reason}}.", - "installSandbox": "Instala el Sandbox para ejecutar comandos aislados", "replaceExplain": "Estos complementos reemplazan {{tool}}: el elegido lo sirve en cada chat donde está activado y en marcha, y el integrado se oculta. Solo uno puede estar activo. Hasta que elijas, lo sirve el que se instaló primero.", "defaultInstalledFirst": "Predeterminado: instalado primero", "installedOn": "Instalado {{when}}", @@ -342,7 +341,7 @@ "list_agents": "Agentes guardados" }, "descriptions": { - "bash": "Ejecuta comandos y código para los chats directamente en esta máquina cuando ningún Sandbox sirve bash. El complemento Sandbox lo reemplaza con comandos aislados.", + "bash": "Ejecuta comandos y código para los chats directamente en esta máquina cuando ningún complemento sirve bash. Un complemento que ejecuta comandos aislados lo reemplaza.", "web_search": "Busca en la web para los chats sin clave (DuckDuckGo, luego Brave Search, luego Bing), o con tu instancia de SearXNG si hay una configurada.", "web_fetch": "Lee para los chats una página o un archivo web público por su dirección. Las direcciones de tu red se rechazan salvo que las permitas.", "list_agents": "Permite a un chat listar los agentes guardados del usuario e iniciar uno como subagente. Cada chat lo activa en su menú Herramientas." @@ -355,7 +354,7 @@ "on": "Permitir para todos.", "onHint": "Los chats de todos los usuarios ejecutan comandos aquí sin preguntar, también las ejecuciones programadas y los subagentes.", "default": "Sin definir: se aplica el valor por defecto ({{mode}}).", - "warning": "Los comandos se ejecutan como el usuario de LocalAI, sin aislamiento y con la red de esta máquina: pueden leer lo que LocalAI puede leer y llegar a internet, a tu red y a la API de LocalAI. Cada comando queda registrado. Instala el Sandbox para aislarlos." + "warning": "Los comandos se ejecutan como el usuario de LocalAI, sin aislamiento y con la red de esta máquina: pueden leer lo que LocalAI puede leer y llegar a internet, a tu red y a la API de LocalAI. Cada comando queda registrado. Instala un complemento que aísle los comandos." }, "modes": { "off": "desactivado", diff --git a/core/http/react-ui/public/locales/es/agents.json b/core/http/react-ui/public/locales/es/agents.json index edca807a4c..ca4e6a0ecb 100644 --- a/core/http/react-ui/public/locales/es/agents.json +++ b/core/http/react-ui/public/locales/es/agents.json @@ -128,7 +128,7 @@ "previewEdit": "The agent this form will save, and how it differs from the saved one.", "default": "Default", "network": "Red de los comandos en ejecuciones sin supervisión", - "networkHelp": "Cuando un disparador o un conector ejecuta este agente, sus comandos del Sandbox llegan a esta parte de la red, hasta el límite que fijó un administrador. Una ejecución nunca pregunta: un host fuera de ella se bloquea. Un chat que inicias con este agente también empieza así.", + "networkHelp": "Cuando un disparador o un conector ejecuta este agente, sus comandos llegan a esta parte de la red, hasta el límite que fijó un administrador. Una ejecución nunca pregunta: un host fuera de ella se bloquea. Un chat que inicias con este agente también empieza así.", "networkPresets": { "off": "Desactivada", "registries": "Registros de paquetes", @@ -463,7 +463,7 @@ "readShort": "solo lectura", "writeShort": "lectura y cambios", "help": "Los chats con este agente ven solo esta carpeta y su propia carpeta de chat. Las carpetas compartidas y las skills siguen siendo legibles. Los servidores MCP y las herramientas web que concedes no se limitan a esta carpeta.", - "commands": "Los comandos de este agente se ejecutan solo en el complemento Sandbox, nunca directamente en esta máquina.", + "commands": "Los comandos de este agente se ejecutan solo en un complemento que los aísla, nunca directamente en esta máquina.", "nextMessage": "Un cambio se aplica desde el siguiente mensaje de cada chat.", "missing": "Esta carpeta ya no existe. Elige otra carpeta para usar este agente.", "unset": "Aún no hay carpeta elegida. Elige una carpeta para usar este agente.", diff --git a/core/http/react-ui/public/locales/es/chat.json b/core/http/react-ui/public/locales/es/chat.json index c013fa4cec..15b1057382 100644 --- a/core/http/react-ui/public/locales/es/chat.json +++ b/core/http/react-ui/public/locales/es/chat.json @@ -578,7 +578,7 @@ "skillsOn_one": "{{count}} skill", "skillsOn_other": "{{count}} skills", "commands": "Comandos", - "isolated": "Se ejecutan en un sandbox aislado", + "isolated": "Se ejecutan aislados", "host": "Se ejecutan en esta máquina", "noCommands": "No se pueden ejecutar", "context": "Contexto", diff --git a/core/http/react-ui/public/locales/es/chats.json b/core/http/react-ui/public/locales/es/chats.json index ac67746342..2568e440e6 100644 --- a/core/http/react-ui/public/locales/es/chats.json +++ b/core/http/react-ui/public/locales/es/chats.json @@ -270,24 +270,23 @@ "commands": { "title": "Aquí no se pueden ejecutar comandos", "none": "No hay ningún complemento instalado que ejecute código: el asistente puede escribir archivos, pero no ejecutar scripts ni comandos.", - "off": "El complemento Sandbox está desactivado en este chat. Actívalo en el menú Herramientas para que el asistente pueda ejecutar código.", - "unavailable": "El complemento Sandbox está instalado, pero no puede ejecutar comandos en este servidor.", - "unavailableWhy": "El complemento Sandbox no puede ejecutar comandos en este servidor: {{reason}}", - "install": "Instalar Sandbox", - "openSandbox": "Abrir el complemento Sandbox", - "askInstall": "Pide a un administrador que instale el complemento Sandbox.", "askFix": "Pide a un administrador que lo solucione.", "hide": "Ocultar", "hideLabel": "Ocultar este aviso", "chipTitle": "Este chat no puede ejecutar código ni comandos. Selecciona para ver detalles.", "hostTitle": "Los comandos se ejecutan en esta máquina", - "host": "Los comandos se ejecutan en esta máquina, con sus archivos y su red, sin aislamiento. Instala el Sandbox para aislarlos.", - "hostOff": "El Sandbox está desactivado en este chat, así que los comandos se ejecutan en esta máquina, con sus archivos y su red, sin aislamiento. Activa el Sandbox en este menú para aislarlos.", - "hostUnavailable": "El Sandbox no puede ejecutarse aquí, así que los comandos se ejecutan en esta máquina, con sus archivos y su red, sin aislamiento.", - "hostUnavailableWhy": "El Sandbox no puede ejecutarse aquí ({{reason}}), así que los comandos se ejecutan en esta máquina, con sus archivos y su red, sin aislamiento.", "hostChipTitle": "Los comandos de este chat se ejecutan en esta máquina, sin aislamiento. Selecciona para ver detalles.", "providerHost": "Los comandos se ejecutan en el servidor sin aislamiento.", "unknown": "Se desconoce la disponibilidad o el aislamiento de la ejecución.", + "unknownBy": { + "owner_unreachable": "Se desconoce la disponibilidad o el aislamiento de la ejecución: no se pudo contactar con el responsable del complemento.", + "not_reported": "Se desconoce la disponibilidad o el aislamiento de la ejecución: el complemento no ha informado de su estado de ejecución.", + "stale": "Se desconoce la disponibilidad o el aislamiento de la ejecución: el estado no coincidía con la versión actual del complemento.", + "invalid_status": "Se desconoce la disponibilidad o el aislamiento de la ejecución: el complemento envió un estado que el host no pudo aceptar.", + "not_selected": "Se desconoce la disponibilidad o el aislamiento de la ejecución: el complemento no es el que ejecuta los comandos de este chat.", + "no_answer": "Se desconoce la disponibilidad o el aislamiento de la ejecución: el complemento no respondió a tiempo.", + "reported_unknown": "Se desconoce la disponibilidad o el aislamiento de la ejecución: el complemento informó de que no puede saberlo." + }, "providerUnavailable": "El proveedor de ejecución seleccionado no está disponible.", "disabled": "La ejecución de comandos está desactivada para este chat." }, @@ -302,7 +301,6 @@ "expired": "Sin respuesta: el turno que lo pidió ha terminado, así que el comando no se ejecutó." }, "provider": { - "sandbox": "Sandbox", "addon": "Complemento {{name}}", "host": "Esta máquina, sin aislar", "hostOnce": "Esta máquina, permitido una vez", @@ -326,9 +324,6 @@ "servedBy": "Servido por el complemento {{provider}}", "servedByTool": "{{tool}}: {{provider}}", "servedByBuiltin": "integrada", - "sandbox": { - "starting": "El Sandbox se está iniciando. LocalAI vuelve a comprobarlo en {{seconds}} s." - }, "fallbackBuiltin": "{{addon}} reemplaza {{tool}} pero ahora no puede atender este chat (detenido, desactivado aquí o no concedido): se usa {{tool}} integrada.", "fallbackNone": "{{addon}} reemplaza {{tool}} pero ahora no puede atender este chat, y {{tool}} integrada está desactivada: este chat no tiene {{tool}}.", "shell": { @@ -348,13 +343,13 @@ "all": "Todos los sitios públicos" }, "presetHint": { - "off": "Los comandos del Sandbox no llegan a ninguna red.", + "off": "Los comandos no llegan a ninguna red.", "registries": "Los comandos solo llegan a los registros de paquetes (PyPI, npm, Go, crates.io, RubyGems, Maven Central, versiones de GitHub).", "all": "Los comandos llegan a cualquier sitio público." }, "limited": "Limitado por tu administrador", "limitedBy": "Tu administrador permite como máximo: {{limit}}.", - "hostNetwork": "Los comandos se ejecutan en esta máquina y usan su red. Los límites de red requieren el complemento Sandbox.", + "hostNetwork": "Los comandos se ejecutan en esta máquina y usan su red. Los límites de red requieren un complemento que aísle los comandos.", "panel": "Reglas y solicitudes ({{count}})", "rules": "Reglas de este chat", "cards": "Solicitudes de este chat", @@ -386,8 +381,8 @@ "blocked": { "titleOff": "El acceso a la red está desactivado", "titleCapped": "El acceso a la red está limitado", - "bodyOff": "El acceso a la red del Sandbox está desactivado en este servidor. Un comando pidió llegar a", - "bodyCapped": "Este servidor solo permite {{limit}} para la red del Sandbox. Un comando pidió llegar a", + "bodyOff": "El acceso a la red de los comandos está desactivado en este servidor. Un comando pidió llegar a", + "bodyCapped": "Este servidor solo permite {{limit}} para la red de los comandos. Un comando pidió llegar a", "adminOff": "Un administrador puede activarlo en los ajustes de {{name}}.", "adminCapped": "Un administrador puede subir el límite en los ajustes de {{name}}.", "adminLink": "Abrir los ajustes de {{name}}", diff --git a/core/http/react-ui/public/locales/es/home.json b/core/http/react-ui/public/locales/es/home.json index 3ab7c3897a..8b904fd63d 100644 --- a/core/http/react-ui/public/locales/es/home.json +++ b/core/http/react-ui/public/locales/es/home.json @@ -82,17 +82,13 @@ "step2Title": "Instala un modelo", "step2Body": "Haz clic en instalar para descargarlo y configurarlo automáticamente.", "step3Title": "Empieza a chatear", - "step3Body": "Chatea con tu modelo desde el navegador o usa la API.", - "sandboxTitle": "Ejecuta código de forma segura (opcional)", - "sandboxBody": "Instala el complemento Sandbox para que el modelo ejecute código y comandos aislados. Sin él, los comandos se ejecutan directamente en esta máquina, con acceso completo a la red y sin aislamiento." + "step3Body": "Chatea con tu modelo desde el navegador o usa la API." }, "browseGallery": "Explorar galería de modelos", "importModel": "Importar modelo", "docs": "Documentación", "noModelsTitle": "No hay modelos disponibles", - "noModelsBody": "No hay modelos instalados aún. Pídele a tu administrador que configure modelos para que puedas empezar a chatear.", - "sandboxInstall": "Instalar Sandbox", - "sandboxSkip": "Omitir" + "noModelsBody": "No hay modelos instalados aún. Pídele a tu administrador que configure modelos para que puedas empezar a chatear." }, "connect": { "title": "Un endpoint, todas las APIs", @@ -139,7 +135,9 @@ }, "complete": "completar" }, - "notice": { "appUnavailable": "La aplicación ya no está disponible." }, + "notice": { + "appUnavailable": "La aplicación ya no está disponible." + }, "picker": { "aliasOf": "alias de {{target}}", "aliasBroken": "alias roto", diff --git a/core/http/react-ui/public/locales/fr/admin.json b/core/http/react-ui/public/locales/fr/admin.json index ccb13421ba..3be255e98b 100644 --- a/core/http/react-ui/public/locales/fr/admin.json +++ b/core/http/react-ui/public/locales/fr/admin.json @@ -61,10 +61,10 @@ "loadFailedTitle": "Impossible de charger les paramètres.", "egress": { "title": "Réseau des commandes", - "intro": "Les commandes du Sandbox n’atteignent le réseau que par un proxy qui consulte LocalAI pour chaque connexion. Réglez ci-dessous la limite, le préréglage d’un nouveau chat, les ports, les registres supplémentaires et la durée du journal ; chaque personne choisit le préréglage de chaque chat dans son menu Outils, dans la limite, et autorise un hôte bloqué sur une carte.", + "intro": "Les commandes exécutées en isolation n’atteignent le réseau que par un proxy qui consulte LocalAI pour chaque connexion. Réglez ci-dessous la limite, le préréglage d’un nouveau chat, les ports, les registres supplémentaires et la durée du journal ; chaque personne choisit le préréglage de chaque chat dans son menu Outils, dans la limite, et autorise un hôte bloqué sur une carte.", "serves": "Les commandes s’exécutent isolées dans le module {{name}}", "servesHost": "Les commandes s’exécutent sur cette machine via {{name}}", - "servesNone": "Aucun Sandbox n’exécute encore de commandes", + "servesNone": "Aucun add-on n’exécute encore de commandes", "hostNote": "Le backend hôte exécute les commandes sur cette machine avec son réseau : ces réglages ne s’y appliquent pas.", "counts": "Dernières 24 heures : {{allowed}} autorisées, {{blocked}} bloquées.", "private": "Laisser la règle d’un administrateur atteindre les réseaux privés", @@ -73,7 +73,7 @@ "registries": "Registres de paquets ({{count}})", "showAudit": "Afficher le journal", "hideAudit": "Masquer le journal", - "loadFailed": "Les réglages réseau du Sandbox n’ont pas pu être lus", + "loadFailed": "Les réglages réseau des commandes n’ont pas pu être lus", "audit": { "verdict": "Verdict", "host": "Hôte", @@ -107,7 +107,7 @@ "listLabel": "Hôtes toujours autorisés", "remove": "Retirer {{host}}", "empty": "Aucun hôte pour l'instant. Saisissez un nom d'hôte, ou hôte:port pour fixer le port.", - "hint": "Noms exacts uniquement. Ajoutez :port pour n'autoriser qu'un port ; sinon, les ports réseau du Sandbox s'appliquent.", + "hint": "Noms exacts uniquement. Ajoutez :port pour n'autoriser qu'un port ; sinon, les ports réseau des commandes s'appliquent.", "count": "{{n}}/{{max}}", "errors": { "empty": "Saisissez un nom d'hôte.", @@ -173,7 +173,6 @@ "byAddon": "Module : {{name}}", "byNone": "Désactivé", "unavailable": "Ce serveur ne peut pas l'exécuter : {{reason}}.", - "installSandbox": "Installez le Sandbox pour exécuter les commandes isolées", "replaceExplain": "Ces modules remplacent {{tool}} : celui choisi le fournit dans chaque chat où il est activé et en marche, et l'outil intégré est masqué. Un seul peut être actif. Tant que vous ne choisissez pas, c'est le premier installé qui le fournit.", "defaultInstalledFirst": "Par défaut : installé en premier", "installedOn": "Installé {{when}}", @@ -186,7 +185,7 @@ "list_agents": "Agents enregistrés" }, "descriptions": { - "bash": "Exécute des commandes et du code pour les chats directement sur cette machine quand aucun Sandbox ne fournit bash. Le module Sandbox le remplace par des commandes isolées.", + "bash": "Exécute des commandes et du code pour les chats directement sur cette machine quand aucun module ne fournit bash. Un module qui exécute des commandes isolées le remplace.", "web_search": "Recherche sur le web pour les chats sans clé (DuckDuckGo, puis Brave Search, puis Bing), ou avec votre instance SearXNG si elle est définie.", "web_fetch": "Lit pour les chats une page ou un fichier web public par son adresse. Les adresses de votre réseau sont refusées sauf si vous les autorisez.", "list_agents": "Permet à un chat de lister les agents enregistrés de l'utilisateur et d'en lancer un comme sous-agent. Chaque chat l'active dans son menu Outils." @@ -199,7 +198,7 @@ "on": "Autoriser pour tous.", "onHint": "Les chats de tous les utilisateurs exécutent des commandes ici sans demander, y compris les exécutions planifiées et les sous-agents.", "default": "Non défini : la valeur par défaut s'applique ({{mode}}).", - "warning": "Les commandes s'exécutent sous l'utilisateur de LocalAI, sans isolation et avec le réseau de cette machine : elles peuvent lire ce que LocalAI peut lire et joindre Internet, votre réseau et l'API LocalAI. Chaque commande est journalisée. Installez le Sandbox pour les isoler." + "warning": "Les commandes s'exécutent sous l'utilisateur de LocalAI, sans isolation et avec le réseau de cette machine : elles peuvent lire ce que LocalAI peut lire et joindre Internet, votre réseau et l'API LocalAI. Chaque commande est journalisée. Installez un module qui isole les commandes." }, "modes": { "off": "désactivé", diff --git a/core/http/react-ui/public/locales/fr/agents.json b/core/http/react-ui/public/locales/fr/agents.json index e12b92ddd7..e1792b88ab 100644 --- a/core/http/react-ui/public/locales/fr/agents.json +++ b/core/http/react-ui/public/locales/fr/agents.json @@ -128,7 +128,7 @@ "previewEdit": "The agent this form will save, and how it differs from the saved one.", "default": "Default", "network": "Réseau des commandes dans les exécutions sans surveillance", - "networkHelp": "Quand un déclencheur ou un connecteur exécute cet agent, ses commandes du Sandbox atteignent cette part du réseau, dans la limite fixée par un administrateur. Une exécution ne demande jamais : un hôte hors de cette part est bloqué. Un chat que vous démarrez avec cet agent commence aussi ainsi.", + "networkHelp": "Quand un déclencheur ou un connecteur exécute cet agent, ses commandes atteignent cette part du réseau, dans la limite fixée par un administrateur. Une exécution ne demande jamais : un hôte hors de cette part est bloqué. Un chat que vous démarrez avec cet agent commence aussi ainsi.", "networkPresets": { "off": "Désactivé", "registries": "Registres de paquets", @@ -463,7 +463,7 @@ "readShort": "lecture seule", "writeShort": "lecture et modification", "help": "Les chats avec cet agent ne voient que ce dossier et leur propre dossier de chat. Les dossiers partagés et les skills restent lisibles. Les serveurs MCP et les outils web que vous accordez ne sont pas limités à ce dossier.", - "commands": "Les commandes de cet agent s'exécutent uniquement dans l'add-on Sandbox, jamais directement sur cette machine.", + "commands": "Les commandes de cet agent s'exécutent uniquement dans un add-on qui les isole, jamais directement sur cette machine.", "nextMessage": "Une modification s'applique à partir du message suivant de chaque chat.", "missing": "Ce dossier n'existe plus. Choisissez un autre dossier pour utiliser cet agent.", "unset": "Aucun dossier choisi. Choisissez un dossier pour utiliser cet agent.", diff --git a/core/http/react-ui/public/locales/fr/chat.json b/core/http/react-ui/public/locales/fr/chat.json index 5d7e37e72a..7cd7dca3c8 100644 --- a/core/http/react-ui/public/locales/fr/chat.json +++ b/core/http/react-ui/public/locales/fr/chat.json @@ -576,7 +576,7 @@ "skillsOn_one": "{{count}} skill", "skillsOn_other": "{{count}} skills", "commands": "Commandes", - "isolated": "Exécutées dans un bac à sable isolé", + "isolated": "Exécutées en isolation", "host": "Exécutées sur cette machine", "noCommands": "Impossible", "context": "Contexte", diff --git a/core/http/react-ui/public/locales/fr/chats.json b/core/http/react-ui/public/locales/fr/chats.json index 8d294f4c0b..3134fdc0b2 100644 --- a/core/http/react-ui/public/locales/fr/chats.json +++ b/core/http/react-ui/public/locales/fr/chats.json @@ -270,24 +270,23 @@ "commands": { "title": "Les commandes ne peuvent pas s'exécuter ici", "none": "Aucun module qui exécute du code n'est installé : l'assistant peut écrire des fichiers, mais pas exécuter de scripts ni de commandes.", - "off": "Le module Sandbox est désactivé pour ce chat. Activez-le dans le menu Outils pour que l'assistant puisse exécuter du code.", - "unavailable": "Le module Sandbox est installé, mais il ne peut pas exécuter de commandes sur ce serveur.", - "unavailableWhy": "Le module Sandbox ne peut pas exécuter de commandes sur ce serveur : {{reason}}", - "install": "Installer Sandbox", - "openSandbox": "Ouvrir le module Sandbox", - "askInstall": "Demandez à un administrateur d'installer le module Sandbox.", "askFix": "Demandez à un administrateur de corriger le problème.", "hide": "Masquer", "hideLabel": "Masquer cet avis", "chipTitle": "Ce chat ne peut pas exécuter de code ni de commandes. Sélectionnez pour les détails.", "hostTitle": "Les commandes s'exécutent sur cette machine", - "host": "Les commandes s'exécutent sur cette machine, avec ses fichiers et son réseau, sans isolation. Installez le Sandbox pour les isoler.", - "hostOff": "Le Sandbox est désactivé pour ce chat : les commandes s'exécutent donc sur cette machine, avec ses fichiers et son réseau, sans isolation. Activez le Sandbox dans ce menu pour les isoler.", - "hostUnavailable": "Le Sandbox ne peut pas s'exécuter ici : les commandes s'exécutent donc sur cette machine, avec ses fichiers et son réseau, sans isolation.", - "hostUnavailableWhy": "Le Sandbox ne peut pas s'exécuter ici ({{reason}}) : les commandes s'exécutent donc sur cette machine, avec ses fichiers et son réseau, sans isolation.", "hostChipTitle": "Les commandes de ce chat s'exécutent sur cette machine, sans isolation. Sélectionnez pour les détails.", "providerHost": "Les commandes s’exécutent sur le serveur sans isolation.", "unknown": "La disponibilité ou l’isolation de l’exécution est inconnue.", + "unknownBy": { + "owner_unreachable": "La disponibilité ou l’isolation de l’exécution est inconnue : le propriétaire de l’add-on est injoignable.", + "not_reported": "La disponibilité ou l’isolation de l’exécution est inconnue : l’add-on n’a pas signalé son état d’exécution.", + "stale": "La disponibilité ou l’isolation de l’exécution est inconnue : l’état ne correspondait pas à la version actuelle de l’add-on.", + "invalid_status": "La disponibilité ou l’isolation de l’exécution est inconnue : l’add-on a envoyé un état que l’hôte n’a pas pu accepter.", + "not_selected": "La disponibilité ou l’isolation de l’exécution est inconnue : l’add-on n’est pas celui qui exécute les commandes de ce chat.", + "no_answer": "La disponibilité ou l’isolation de l’exécution est inconnue : l’add-on n’a pas répondu à temps.", + "reported_unknown": "La disponibilité ou l’isolation de l’exécution est inconnue : l’add-on a indiqué qu’il ne peut pas le dire." + }, "providerUnavailable": "Le fournisseur d’exécution sélectionné est indisponible.", "disabled": "L’exécution des commandes est désactivée pour cette discussion." }, @@ -302,7 +301,6 @@ "expired": "Sans réponse : le tour qui l'a demandé est terminé, la commande n'a donc pas été exécutée." }, "provider": { - "sandbox": "Sandbox", "addon": "Module {{name}}", "host": "Cette machine, non isolée", "hostOnce": "Cette machine, autorisée une fois", @@ -326,9 +324,6 @@ "servedBy": "Fourni par l'extension {{provider}}", "servedByTool": "{{tool}}: {{provider}}", "servedByBuiltin": "intégré", - "sandbox": { - "starting": "Le Sandbox démarre. LocalAI vérifie à nouveau dans {{seconds}} s." - }, "fallbackBuiltin": "{{addon}} remplace {{tool}} mais ne peut pas servir cette discussion pour l'instant (arrêté, désactivé ici ou non accordé) : {{tool}} intégré est utilisé.", "fallbackNone": "{{addon}} remplace {{tool}} mais ne peut pas servir cette discussion pour l'instant, et {{tool}} intégré est désactivé : cette discussion n'a pas de {{tool}}.", "shell": { @@ -348,13 +343,13 @@ "all": "Tous les sites publics" }, "presetHint": { - "off": "Les commandes du Sandbox n’atteignent aucun réseau.", + "off": "Les commandes n’atteignent aucun réseau.", "registries": "Les commandes n’atteignent que les registres de paquets (PyPI, npm, Go, crates.io, RubyGems, Maven Central, versions GitHub).", "all": "Les commandes atteignent tous les sites publics." }, "limited": "Limité par votre administrateur", "limitedBy": "Votre administrateur autorise au plus : {{limit}}.", - "hostNetwork": "Les commandes s’exécutent sur cette machine et utilisent son réseau. Les limites réseau nécessitent le module Sandbox.", + "hostNetwork": "Les commandes s’exécutent sur cette machine et utilisent son réseau. Les limites réseau nécessitent un module qui isole les commandes.", "panel": "Règles et demandes ({{count}})", "rules": "Règles de ce chat", "cards": "Demandes de ce chat", @@ -386,8 +381,8 @@ "blocked": { "titleOff": "L’accès au réseau est désactivé", "titleCapped": "L’accès au réseau est limité", - "bodyOff": "L’accès au réseau du Sandbox est désactivé sur ce serveur. Une commande a demandé à joindre", - "bodyCapped": "Ce serveur n’autorise que {{limit}} pour le réseau du Sandbox. Une commande a demandé à joindre", + "bodyOff": "L’accès au réseau des commandes est désactivé sur ce serveur. Une commande a demandé à joindre", + "bodyCapped": "Ce serveur n’autorise que {{limit}} pour le réseau des commandes. Une commande a demandé à joindre", "adminOff": "Un administrateur peut l’activer dans les paramètres de {{name}}.", "adminCapped": "Un administrateur peut relever la limite dans les paramètres de {{name}}.", "adminLink": "Ouvrir les paramètres de {{name}}", diff --git a/core/http/react-ui/public/locales/fr/home.json b/core/http/react-ui/public/locales/fr/home.json index ca7e4e48e4..c8460719e3 100644 --- a/core/http/react-ui/public/locales/fr/home.json +++ b/core/http/react-ui/public/locales/fr/home.json @@ -76,17 +76,13 @@ "step2Title": "Installer un modèle", "step2Body": "Cliquez sur installer pour le télécharger et le configurer automatiquement.", "step3Title": "Commencer à discuter", - "step3Body": "Discutez avec votre modèle depuis le navigateur ou via l'API.", - "sandboxTitle": "Exécuter du code en sécurité (facultatif)", - "sandboxBody": "Installez le module Sandbox pour que le modèle exécute code et commandes en isolation. Sans lui, les commandes s’exécutent directement sur cette machine, avec un accès réseau complet et aucune isolation." + "step3Body": "Discutez avec votre modèle depuis le navigateur ou via l'API." }, "browseGallery": "Parcourir la galerie", "importModel": "Importer un modèle", "docs": "Docs", "noModelsTitle": "Aucun modèle disponible", - "noModelsBody": "Aucun modèle n'est installé pour l'instant. Demandez à votre administrateur de configurer des modèles pour pouvoir discuter.", - "sandboxInstall": "Installer Sandbox", - "sandboxSkip": "Ignorer" + "noModelsBody": "Aucun modèle n'est installé pour l'instant. Demandez à votre administrateur de configurer des modèles pour pouvoir discuter." }, "starters": { "title": "Recommandé pour votre matériel", @@ -142,7 +138,9 @@ }, "complete": "compléter" }, - "notice": { "appUnavailable": "L’application n’est plus disponible." }, + "notice": { + "appUnavailable": "L’application n’est plus disponible." + }, "picker": { "aliasOf": "alias de {{target}}", "aliasBroken": "alias cassé", diff --git a/core/http/react-ui/public/locales/id/admin.json b/core/http/react-ui/public/locales/id/admin.json index ea9d043324..88e9d01287 100644 --- a/core/http/react-ui/public/locales/id/admin.json +++ b/core/http/react-ui/public/locales/id/admin.json @@ -111,10 +111,10 @@ "loadFailedTitle": "Pengaturan tidak dapat dimuat.", "egress": { "title": "Jaringan perintah", - "intro": "Perintah di Sandbox menjangkau jaringan hanya melalui proxy yang menanyakan LocalAI untuk setiap koneksi. Atur batas, preset chat baru, port, registri tambahan, dan masa simpan audit di bawah; setiap orang memilih preset tiap chat di menu Alat-nya, sampai batas, dan mengizinkan host yang diblokir lewat kartu.", + "intro": "Perintah yang berjalan terisolasi menjangkau jaringan hanya melalui proxy yang menanyakan LocalAI untuk setiap koneksi. Atur batas, preset chat baru, port, registri tambahan, dan masa simpan audit di bawah; setiap orang memilih preset tiap chat di menu Alat-nya, sampai batas, dan mengizinkan host yang diblokir lewat kartu.", "serves": "Perintah berjalan terisolasi di add-on {{name}}", "servesHost": "Perintah berjalan di mesin ini melalui {{name}}", - "servesNone": "Belum ada Sandbox yang menjalankan perintah", + "servesNone": "Belum ada add-on yang menjalankan perintah", "hostNote": "Backend host menjalankan perintah di mesin ini dengan jaringannya: pengaturan ini tidak berlaku untuknya.", "counts": "24 jam terakhir: {{allowed}} diizinkan, {{blocked}} diblokir.", "private": "Izinkan aturan administrator menjangkau jaringan privat", @@ -123,7 +123,7 @@ "registries": "Registri paket ({{count}})", "showAudit": "Tampilkan audit", "hideAudit": "Sembunyikan audit", - "loadFailed": "Pengaturan jaringan Sandbox tidak dapat dibaca", + "loadFailed": "Pengaturan jaringan untuk perintah tidak dapat dibaca", "audit": { "verdict": "Keputusan", "host": "Host", @@ -157,7 +157,7 @@ "listLabel": "Host yang selalu diizinkan", "remove": "Hapus {{host}}", "empty": "Belum ada host. Tulis nama host, atau host:port untuk mengunci port.", - "hint": "Hanya nama yang tepat. Tambahkan :port untuk mengizinkan satu port; jika tidak, port jaringan Sandbox yang berlaku.", + "hint": "Hanya nama yang tepat. Tambahkan :port untuk mengizinkan satu port; jika tidak, port jaringan perintah yang berlaku.", "count": "{{n}}/{{max}}", "errors": { "empty": "Tulis nama host.", @@ -352,7 +352,6 @@ "byAddon": "Add-on: {{name}}", "byNone": "Mati", "unavailable": "Server ini tidak dapat menjalankannya: {{reason}}.", - "installSandbox": "Pasang Sandbox untuk menjalankan perintah secara terisolasi", "replaceExplain": "Add-on ini menggantikan {{tool}}: yang dipilih melayaninya di setiap chat tempat ia aktif dan berjalan, dan yang bawaan disembunyikan. Hanya satu yang bisa aktif. Sebelum Anda memilih, yang dipasang lebih dulu yang melayaninya.", "defaultInstalledFirst": "Bawaan: dipasang lebih dulu", "installedOn": "Dipasang {{when}}", @@ -365,7 +364,7 @@ "list_agents": "Agen tersimpan" }, "descriptions": { - "bash": "Menjalankan perintah dan kode untuk chat langsung di mesin ini saat tidak ada Sandbox yang melayani bash. Add-on Sandbox menggantinya dengan perintah terisolasi.", + "bash": "Menjalankan perintah dan kode untuk chat langsung di mesin ini saat tidak ada add-on yang melayani bash. Add-on yang menjalankan perintah terisolasi menggantinya.", "web_search": "Mencari di web untuk chat tanpa kunci (DuckDuckGo, lalu Brave Search, lalu Bing), atau dengan instans SearXNG Anda jika sudah diatur.", "web_fetch": "Membaca halaman atau file web publik berdasarkan alamatnya untuk chat. Alamat di dalam jaringan Anda ditolak kecuali Anda mengizinkannya.", "list_agents": "Memungkinkan chat menampilkan agen tersimpan milik pengguna dan memulai salah satunya sebagai sub-agen. Setiap chat mengaktifkannya di menu Alat." @@ -378,7 +377,7 @@ "on": "Izinkan untuk semua.", "onHint": "Chat semua pengguna menjalankan perintah di sini tanpa bertanya, termasuk jalankan terjadwal dan sub-agen.", "default": "Belum diatur: bawaan berlaku ({{mode}}).", - "warning": "Perintah berjalan sebagai pengguna LocalAI, tanpa isolasi dan dengan jaringan mesin ini: dapat membaca apa yang bisa dibaca LocalAI dan menjangkau internet, jaringan Anda, dan API LocalAI. Setiap perintah dicatat. Pasang Sandbox untuk mengisolasinya." + "warning": "Perintah berjalan sebagai pengguna LocalAI, tanpa isolasi dan dengan jaringan mesin ini: dapat membaca apa yang bisa dibaca LocalAI dan menjangkau internet, jaringan Anda, dan API LocalAI. Setiap perintah dicatat. Pasang add-on yang mengisolasi perintah." }, "modes": { "off": "mati", diff --git a/core/http/react-ui/public/locales/id/agents.json b/core/http/react-ui/public/locales/id/agents.json index 74d7d42556..ed464e2d22 100644 --- a/core/http/react-ui/public/locales/id/agents.json +++ b/core/http/react-ui/public/locales/id/agents.json @@ -128,7 +128,7 @@ "previewEdit": "The agent this form will save, and how it differs from the saved one.", "default": "Default", "network": "Jaringan perintah dalam proses tanpa pengawasan", - "networkHelp": "Saat pemicu atau konektor menjalankan agen ini, perintah Sandbox-nya menjangkau jaringan sejauh ini, sampai batas yang diatur administrator. Proses tidak pernah bertanya: host di luarnya diblokir. Chat yang Anda mulai dengan agen ini juga dimulai dengan ini.", + "networkHelp": "Saat pemicu atau konektor menjalankan agen ini, perintahnya menjangkau jaringan sejauh ini, sampai batas yang diatur administrator. Proses tidak pernah bertanya: host di luarnya diblokir. Chat yang Anda mulai dengan agen ini juga dimulai dengan ini.", "networkPresets": { "off": "Mati", "registries": "Registri paket", @@ -463,7 +463,7 @@ "readShort": "hanya baca", "writeShort": "baca dan ubah", "help": "Chat dengan agen ini hanya melihat folder ini dan folder chat-nya sendiri. Folder bersama dan skill tetap bisa dibaca. Server MCP dan alat web yang Anda izinkan tidak dibatasi ke folder ini.", - "commands": "Perintah agen ini hanya berjalan di add-on Sandbox, tidak pernah langsung di mesin ini.", + "commands": "Perintah agen ini hanya berjalan di add-on yang mengisolasinya, tidak pernah langsung di mesin ini.", "nextMessage": "Perubahan berlaku mulai pesan berikutnya di setiap chat.", "missing": "Folder ini sudah tidak ada. Pilih folder lain untuk memakai agen ini.", "unset": "Belum ada folder yang dipilih. Pilih folder untuk memakai agen ini.", diff --git a/core/http/react-ui/public/locales/id/chat.json b/core/http/react-ui/public/locales/id/chat.json index 6236f294fa..fe642b71d9 100644 --- a/core/http/react-ui/public/locales/id/chat.json +++ b/core/http/react-ui/public/locales/id/chat.json @@ -578,7 +578,7 @@ "skillsOn_one": "{{count}} skill", "skillsOn_other": "{{count}} skill", "commands": "Perintah", - "isolated": "Berjalan di sandbox terisolasi", + "isolated": "Berjalan terisolasi", "host": "Berjalan di mesin ini", "noCommands": "Tidak bisa dijalankan", "context": "Konteks", diff --git a/core/http/react-ui/public/locales/id/chats.json b/core/http/react-ui/public/locales/id/chats.json index 360259704e..724c4ebea3 100644 --- a/core/http/react-ui/public/locales/id/chats.json +++ b/core/http/react-ui/public/locales/id/chats.json @@ -270,24 +270,23 @@ "commands": { "title": "Perintah tidak bisa dijalankan di sini", "none": "Tidak ada add-on yang menjalankan kode, jadi asisten bisa menulis file tetapi tidak bisa menjalankan skrip atau perintah.", - "off": "Add-on Sandbox dimatikan untuk chat ini. Nyalakan di menu Alat agar asisten bisa menjalankan kode.", - "unavailable": "Add-on Sandbox terpasang, tetapi tidak bisa menjalankan perintah di server ini.", - "unavailableWhy": "Add-on Sandbox tidak bisa menjalankan perintah di server ini: {{reason}}", - "install": "Pasang Sandbox", - "openSandbox": "Buka add-on Sandbox", - "askInstall": "Minta administrator memasang add-on Sandbox.", "askFix": "Minta administrator memperbaikinya.", "hide": "Sembunyikan", "hideLabel": "Sembunyikan pemberitahuan ini", "chipTitle": "Chat ini tidak bisa menjalankan kode atau perintah. Pilih untuk detail.", "hostTitle": "Perintah berjalan di mesin ini", - "host": "Perintah berjalan di mesin ini, dengan berkas dan jaringannya, tanpa isolasi. Pasang Sandbox untuk isolasi.", - "hostOff": "Sandbox mati untuk chat ini, jadi perintah berjalan di mesin ini, dengan berkas dan jaringannya, tanpa isolasi. Nyalakan Sandbox di menu ini untuk mengisolasinya.", - "hostUnavailable": "Sandbox tidak bisa berjalan di sini, jadi perintah berjalan di mesin ini, dengan berkas dan jaringannya, tanpa isolasi.", - "hostUnavailableWhy": "Sandbox tidak bisa berjalan di sini ({{reason}}), jadi perintah berjalan di mesin ini, dengan berkas dan jaringannya, tanpa isolasi.", "hostChipTitle": "Perintah di chat ini berjalan di mesin ini, tanpa isolasi. Pilih untuk detail.", "providerHost": "Perintah dijalankan di server tanpa isolasi.", "unknown": "Kesiapan atau isolasi eksekusi tidak diketahui.", + "unknownBy": { + "owner_unreachable": "Kesiapan atau isolasi eksekusi tidak diketahui: pemilik add-on tidak dapat dihubungi.", + "not_reported": "Kesiapan atau isolasi eksekusi tidak diketahui: add-on belum melaporkan status eksekusinya.", + "stale": "Kesiapan atau isolasi eksekusi tidak diketahui: status tidak cocok dengan versi add-on saat ini.", + "invalid_status": "Kesiapan atau isolasi eksekusi tidak diketahui: add-on mengirim status yang tidak dapat diterima host.", + "not_selected": "Kesiapan atau isolasi eksekusi tidak diketahui: add-on bukan yang menjalankan perintah chat ini.", + "no_answer": "Kesiapan atau isolasi eksekusi tidak diketahui: add-on tidak menjawab tepat waktu.", + "reported_unknown": "Kesiapan atau isolasi eksekusi tidak diketahui: add-on melaporkan bahwa ia tidak dapat mengetahuinya." + }, "providerUnavailable": "Penyedia eksekusi yang dipilih tidak tersedia.", "disabled": "Eksekusi perintah dinonaktifkan untuk percakapan ini." }, @@ -302,7 +301,6 @@ "expired": "Tidak dijawab: giliran yang meminta sudah selesai, jadi perintah tidak dijalankan." }, "provider": { - "sandbox": "Sandbox", "addon": "Add-on {{name}}", "host": "Mesin ini, tanpa isolasi", "hostOnce": "Mesin ini, diizinkan sekali", @@ -326,9 +324,6 @@ "servedBy": "Dilayani oleh add-on {{provider}}", "servedByTool": "{{tool}}: {{provider}}", "servedByBuiltin": "bawaan", - "sandbox": { - "starting": "Sandbox sedang dimulai. LocalAI memeriksa lagi dalam {{seconds}} dtk." - }, "fallbackBuiltin": "{{addon}} menggantikan {{tool}} tetapi saat ini tidak bisa melayani chat ini (berhenti, dimatikan di sini, atau tidak diizinkan): {{tool}} bawaan yang dipakai.", "fallbackNone": "{{addon}} menggantikan {{tool}} tetapi saat ini tidak bisa melayani chat ini, dan {{tool}} bawaan mati: chat ini tidak punya {{tool}}.", "shell": { @@ -348,13 +343,13 @@ "all": "Semua situs publik" }, "presetHint": { - "off": "Perintah di Sandbox tidak menjangkau jaringan apa pun.", + "off": "Perintah tidak menjangkau jaringan apa pun.", "registries": "Perintah hanya menjangkau registri paket (PyPI, npm, Go, crates.io, RubyGems, Maven Central, rilis GitHub).", "all": "Perintah menjangkau semua situs publik." }, "limited": "Dibatasi oleh administrator Anda", "limitedBy": "Administrator Anda mengizinkan paling banyak: {{limit}}.", - "hostNetwork": "Perintah berjalan di mesin ini dan memakai jaringannya. Batas jaringan memerlukan add-on Sandbox.", + "hostNetwork": "Perintah berjalan di mesin ini dan memakai jaringannya. Batas jaringan memerlukan add-on yang mengisolasi perintah.", "panel": "Aturan dan permintaan ({{count}})", "rules": "Aturan chat ini", "cards": "Permintaan chat ini", @@ -386,8 +381,8 @@ "blocked": { "titleOff": "Akses jaringan dimatikan", "titleCapped": "Akses jaringan dibatasi", - "bodyOff": "Akses jaringan Sandbox dimatikan di server ini. Sebuah perintah meminta menjangkau", - "bodyCapped": "Server ini hanya mengizinkan {{limit}} untuk jaringan Sandbox. Sebuah perintah meminta menjangkau", + "bodyOff": "Akses jaringan untuk perintah dimatikan di server ini. Sebuah perintah meminta menjangkau", + "bodyCapped": "Server ini hanya mengizinkan {{limit}} untuk jaringan perintah. Sebuah perintah meminta menjangkau", "adminOff": "Administrator dapat menyalakannya di pengaturan {{name}}.", "adminCapped": "Administrator dapat menaikkan batasnya di pengaturan {{name}}.", "adminLink": "Buka pengaturan {{name}}", diff --git a/core/http/react-ui/public/locales/id/home.json b/core/http/react-ui/public/locales/id/home.json index c3aaec60ef..1532d795ee 100644 --- a/core/http/react-ui/public/locales/id/home.json +++ b/core/http/react-ui/public/locales/id/home.json @@ -82,17 +82,13 @@ "step2Title": "Instal Model", "step2Body": "Klik instal untuk mengunduh dan mengonfigurasinya secara otomatis.", "step3Title": "Mulai Mengobrol", - "step3Body": "Mengobrol dengan model Anda langsung dari peramban atau gunakan API.", - "sandboxTitle": "Jalankan kode dengan aman (opsional)", - "sandboxBody": "Pasang add-on Sandbox agar model menjalankan kode dan perintah secara terisolasi. Tanpanya, perintah berjalan langsung di mesin ini, dengan akses jaringan penuh dan tanpa isolasi." + "step3Body": "Mengobrol dengan model Anda langsung dari peramban atau gunakan API." }, "browseGallery": "Jelajahi Galeri Model", "importModel": "Impor Model", "docs": "Dokumentasi", "noModelsTitle": "Tidak Ada Model yang Tersedia", - "noModelsBody": "Belum ada model yang terinstal. Hubungi administrator Anda untuk menyiapkan model agar Anda dapat mulai mengobrol.", - "sandboxInstall": "Pasang Sandbox", - "sandboxSkip": "Lewati" + "noModelsBody": "Belum ada model yang terinstal. Hubungi administrator Anda untuk menyiapkan model agar Anda dapat mulai mengobrol." }, "connect": { "title": "Satu endpoint, semua API", @@ -139,7 +135,9 @@ }, "complete": "lengkapi" }, - "notice": { "appUnavailable": "Aplikasi tidak lagi tersedia." }, + "notice": { + "appUnavailable": "Aplikasi tidak lagi tersedia." + }, "picker": { "aliasOf": "alias dari {{target}}", "aliasBroken": "alias rusak", diff --git a/core/http/react-ui/public/locales/it/admin.json b/core/http/react-ui/public/locales/it/admin.json index 92735a42c9..095c3f45e0 100644 --- a/core/http/react-ui/public/locales/it/admin.json +++ b/core/http/react-ui/public/locales/it/admin.json @@ -111,10 +111,10 @@ "loadFailedTitle": "Impossibile caricare le impostazioni.", "egress": { "title": "Rete dei comandi", - "intro": "I comandi nel Sandbox raggiungono la rete solo tramite un proxy che chiede a LocalAI di ogni connessione. Qui sotto imposti il limite, il preset di una nuova chat, le porte, i registri aggiuntivi e la durata del registro; ogni persona sceglie il preset di ogni chat nel suo menu Strumenti, fino al limite, e consente un host bloccato da una scheda.", + "intro": "I comandi eseguiti in isolamento raggiungono la rete solo tramite un proxy che chiede a LocalAI di ogni connessione. Qui sotto imposti il limite, il preset di una nuova chat, le porte, i registri aggiuntivi e la durata del registro; ogni persona sceglie il preset di ogni chat nel suo menu Strumenti, fino al limite, e consente un host bloccato da una scheda.", "serves": "I comandi girano isolati nell’add-on {{name}}", "servesHost": "I comandi girano su questa macchina tramite {{name}}", - "servesNone": "Nessun Sandbox esegue ancora comandi", + "servesNone": "Nessun add-on esegue ancora comandi", "hostNote": "Il backend host esegue i comandi su questa macchina con la sua rete: queste impostazioni non si applicano.", "counts": "Ultime 24 ore: {{allowed}} consentite, {{blocked}} bloccate.", "private": "Consenti alle regole di un amministratore di raggiungere reti private", @@ -123,7 +123,7 @@ "registries": "Registri di pacchetti ({{count}})", "showAudit": "Mostra il registro", "hideAudit": "Nascondi il registro", - "loadFailed": "Impossibile leggere le impostazioni di rete del Sandbox", + "loadFailed": "Impossibile leggere le impostazioni di rete dei comandi", "audit": { "verdict": "Esito", "host": "Host", @@ -157,7 +157,7 @@ "listLabel": "Host sempre consentiti", "remove": "Rimuovi {{host}}", "empty": "Nessun host. Scrivi un nome host, oppure host:porta per fissare la porta.", - "hint": "Solo nomi esatti. Aggiungi :porta per consentire una sola porta; altrimenti valgono le porte di rete della Sandbox.", + "hint": "Solo nomi esatti. Aggiungi :porta per consentire una sola porta; altrimenti valgono le porte di rete dei comandi.", "count": "{{n}}/{{max}}", "errors": { "empty": "Scrivi un nome host.", @@ -329,7 +329,6 @@ "byAddon": "Componente: {{name}}", "byNone": "Spento", "unavailable": "Questo server non può eseguirlo: {{reason}}.", - "installSandbox": "Installa il Sandbox per eseguire i comandi isolati", "replaceExplain": "Questi componenti sostituiscono {{tool}}: quello scelto lo fornisce in ogni chat in cui è acceso e in esecuzione, e quello integrato viene nascosto. Solo uno può essere attivo. Finché non scegli, lo fornisce quello installato per primo.", "defaultInstalledFirst": "Predefinito: installato per primo", "installedOn": "Installato {{when}}", @@ -342,7 +341,7 @@ "list_agents": "Agenti salvati" }, "descriptions": { - "bash": "Esegue comandi e codice per le chat direttamente su questa macchina quando nessun Sandbox fornisce bash. Il componente Sandbox lo sostituisce con comandi isolati.", + "bash": "Esegue comandi e codice per le chat direttamente su questa macchina quando nessun componente fornisce bash. Un componente che esegue comandi isolati lo sostituisce.", "web_search": "Cerca sul web per le chat senza chiave (DuckDuckGo, poi Brave Search, poi Bing), oppure con la tua istanza SearXNG se è impostata.", "web_fetch": "Legge per le chat una pagina o un file web pubblico dal suo indirizzo. Gli indirizzi della tua rete sono rifiutati se non li consenti.", "list_agents": "Permette a una chat di elencare gli agenti salvati dell'utente e di avviarne uno come sotto-agente. Ogni chat lo attiva dal suo menu Strumenti." @@ -355,7 +354,7 @@ "on": "Consenti a tutti.", "onHint": "Le chat di tutti gli utenti eseguono comandi qui senza chiedere, anche le esecuzioni pianificate e i sotto-agenti.", "default": "Non impostato: vale il predefinito ({{mode}}).", - "warning": "I comandi vengono eseguiti come l'utente di LocalAI, senza isolamento e con la rete di questa macchina: possono leggere ciò che LocalAI può leggere e raggiungere internet, la tua rete e l'API di LocalAI. Ogni comando viene registrato. Installa il Sandbox per isolarli." + "warning": "I comandi vengono eseguiti come l'utente di LocalAI, senza isolamento e con la rete di questa macchina: possono leggere ciò che LocalAI può leggere e raggiungere internet, la tua rete e l'API di LocalAI. Ogni comando viene registrato. Installa un componente che isoli i comandi." }, "modes": { "off": "spento", diff --git a/core/http/react-ui/public/locales/it/agents.json b/core/http/react-ui/public/locales/it/agents.json index 329a55d9fa..281084dea5 100644 --- a/core/http/react-ui/public/locales/it/agents.json +++ b/core/http/react-ui/public/locales/it/agents.json @@ -128,7 +128,7 @@ "previewEdit": "The agent this form will save, and how it differs from the saved one.", "default": "Default", "network": "Rete dei comandi nelle esecuzioni non presidiate", - "networkHelp": "Quando un trigger o un connettore esegue questo agente, i suoi comandi nel Sandbox raggiungono questa parte della rete, fino al limite fissato da un amministratore. Un’esecuzione non chiede mai: un host al di fuori viene bloccato. Anche una chat che avvii con questo agente parte così.", + "networkHelp": "Quando un trigger o un connettore esegue questo agente, i suoi comandi raggiungono questa parte della rete, fino al limite fissato da un amministratore. Un’esecuzione non chiede mai: un host al di fuori viene bloccato. Anche una chat che avvii con questo agente parte così.", "networkPresets": { "off": "Disattivata", "registries": "Registri di pacchetti", @@ -463,7 +463,7 @@ "readShort": "sola lettura", "writeShort": "lettura e modifica", "help": "Le chat con questo agente vedono solo questa cartella e la propria cartella della chat. Le cartelle condivise e le skill restano leggibili. I server MCP e gli strumenti web che concedi non sono limitati a questa cartella.", - "commands": "I comandi di questo agente girano solo nell'add-on Sandbox, mai direttamente su questa macchina.", + "commands": "I comandi di questo agente girano solo in un add-on che li isola, mai direttamente su questa macchina.", "nextMessage": "Una modifica vale dal messaggio successivo di ogni chat.", "missing": "Questa cartella non esiste più. Scegli un'altra cartella per usare questo agente.", "unset": "Nessuna cartella scelta. Scegli una cartella per usare questo agente.", diff --git a/core/http/react-ui/public/locales/it/chat.json b/core/http/react-ui/public/locales/it/chat.json index ce1b50c6c8..0726d981df 100644 --- a/core/http/react-ui/public/locales/it/chat.json +++ b/core/http/react-ui/public/locales/it/chat.json @@ -578,7 +578,7 @@ "skillsOn_one": "{{count}} skill", "skillsOn_other": "{{count}} skill", "commands": "Comandi", - "isolated": "Eseguiti in una sandbox isolata", + "isolated": "Eseguiti in isolamento", "host": "Eseguiti su questa macchina", "noCommands": "Non eseguibili", "context": "Contesto", diff --git a/core/http/react-ui/public/locales/it/chats.json b/core/http/react-ui/public/locales/it/chats.json index 82a84631f6..7f7a76f6b9 100644 --- a/core/http/react-ui/public/locales/it/chats.json +++ b/core/http/react-ui/public/locales/it/chats.json @@ -270,24 +270,23 @@ "commands": { "title": "Qui non si possono eseguire comandi", "none": "Non è installato nessun componente aggiuntivo che esegue codice: l'assistente può scrivere file, ma non eseguire script o comandi.", - "off": "Il componente aggiuntivo Sandbox è spento per questa chat. Attivalo nel menu Strumenti per far eseguire codice all'assistente.", - "unavailable": "Il componente aggiuntivo Sandbox è installato, ma non può eseguire comandi su questo server.", - "unavailableWhy": "Il componente aggiuntivo Sandbox non può eseguire comandi su questo server: {{reason}}", - "install": "Installa Sandbox", - "openSandbox": "Apri il componente Sandbox", - "askInstall": "Chiedi a un amministratore di installare il componente aggiuntivo Sandbox.", "askFix": "Chiedi a un amministratore di risolvere il problema.", "hide": "Nascondi", "hideLabel": "Nascondi questo avviso", "chipTitle": "Questa chat non può eseguire codice o comandi. Seleziona per i dettagli.", "hostTitle": "I comandi vengono eseguiti su questa macchina", - "host": "I comandi vengono eseguiti su questa macchina, con i suoi file e la sua rete, senza isolamento. Installa il Sandbox per isolarli.", - "hostOff": "Il Sandbox è spento per questa chat, quindi i comandi vengono eseguiti su questa macchina, con i suoi file e la sua rete, senza isolamento. Accendi il Sandbox in questo menu per isolarli.", - "hostUnavailable": "Il Sandbox non può funzionare qui, quindi i comandi vengono eseguiti su questa macchina, con i suoi file e la sua rete, senza isolamento.", - "hostUnavailableWhy": "Il Sandbox non può funzionare qui ({{reason}}), quindi i comandi vengono eseguiti su questa macchina, con i suoi file e la sua rete, senza isolamento.", "hostChipTitle": "I comandi di questa chat vengono eseguiti su questa macchina, senza isolamento. Seleziona per i dettagli.", "providerHost": "I comandi vengono eseguiti sul server senza isolamento.", "unknown": "La disponibilità o l’isolamento dell’esecuzione non sono noti.", + "unknownBy": { + "owner_unreachable": "La disponibilità o l’isolamento dell’esecuzione non sono noti: il proprietario dell’add-on non è raggiungibile.", + "not_reported": "La disponibilità o l’isolamento dell’esecuzione non sono noti: l’add-on non ha segnalato il suo stato di esecuzione.", + "stale": "La disponibilità o l’isolamento dell’esecuzione non sono noti: lo stato non corrispondeva alla versione attuale dell’add-on.", + "invalid_status": "La disponibilità o l’isolamento dell’esecuzione non sono noti: l’add-on ha inviato uno stato che l’host non ha potuto accettare.", + "not_selected": "La disponibilità o l’isolamento dell’esecuzione non sono noti: l’add-on non è quello che esegue i comandi di questa chat.", + "no_answer": "La disponibilità o l’isolamento dell’esecuzione non sono noti: l’add-on non ha risposto in tempo.", + "reported_unknown": "La disponibilità o l’isolamento dell’esecuzione non sono noti: l’add-on ha segnalato di non poterlo dire." + }, "providerUnavailable": "Il provider di esecuzione selezionato non è disponibile.", "disabled": "L’esecuzione dei comandi è disattivata per questa chat." }, @@ -302,7 +301,6 @@ "expired": "Nessuna risposta: il turno che l'ha chiesto è terminato, quindi il comando non è stato eseguito." }, "provider": { - "sandbox": "Sandbox", "addon": "Componente {{name}}", "host": "Questa macchina, non isolata", "hostOnce": "Questa macchina, consentito una volta", @@ -326,9 +324,6 @@ "servedBy": "Servito dal componente aggiuntivo {{provider}}", "servedByTool": "{{tool}}: {{provider}}", "servedByBuiltin": "integrato", - "sandbox": { - "starting": "Il Sandbox si sta avviando. LocalAI ricontrolla tra {{seconds}} s." - }, "fallbackBuiltin": "{{addon}} sostituisce {{tool}} ma ora non può servire questa chat (fermo, disattivato qui o non concesso): si usa {{tool}} integrato.", "fallbackNone": "{{addon}} sostituisce {{tool}} ma ora non può servire questa chat, e {{tool}} integrato è disattivato: questa chat non ha {{tool}}.", "shell": { @@ -348,13 +343,13 @@ "all": "Tutti i siti pubblici" }, "presetHint": { - "off": "I comandi nel Sandbox non raggiungono nessuna rete.", + "off": "I comandi non raggiungono nessuna rete.", "registries": "I comandi raggiungono solo i registri di pacchetti (PyPI, npm, Go, crates.io, RubyGems, Maven Central, release di GitHub).", "all": "I comandi raggiungono ogni sito pubblico." }, "limited": "Limitato dal tuo amministratore", "limitedBy": "Il tuo amministratore consente al massimo: {{limit}}.", - "hostNetwork": "I comandi vengono eseguiti su questa macchina e usano la sua rete. I limiti di rete richiedono il componente Sandbox.", + "hostNetwork": "I comandi vengono eseguiti su questa macchina e usano la sua rete. I limiti di rete richiedono un componente che isoli i comandi.", "panel": "Regole e richieste ({{count}})", "rules": "Regole di questa chat", "cards": "Richieste di questa chat", @@ -386,8 +381,8 @@ "blocked": { "titleOff": "L’accesso alla rete è disattivato", "titleCapped": "L’accesso alla rete è limitato", - "bodyOff": "L’accesso alla rete del Sandbox è disattivato su questo server. Un comando ha chiesto di raggiungere", - "bodyCapped": "Questo server consente solo {{limit}} per la rete del Sandbox. Un comando ha chiesto di raggiungere", + "bodyOff": "L’accesso alla rete dei comandi è disattivato su questo server. Un comando ha chiesto di raggiungere", + "bodyCapped": "Questo server consente solo {{limit}} per la rete dei comandi. Un comando ha chiesto di raggiungere", "adminOff": "Un amministratore può attivarlo nelle impostazioni di {{name}}.", "adminCapped": "Un amministratore può alzare il limite nelle impostazioni di {{name}}.", "adminLink": "Apri le impostazioni di {{name}}", diff --git a/core/http/react-ui/public/locales/it/home.json b/core/http/react-ui/public/locales/it/home.json index 49cca23994..267bc9b8fa 100644 --- a/core/http/react-ui/public/locales/it/home.json +++ b/core/http/react-ui/public/locales/it/home.json @@ -82,17 +82,13 @@ "step2Title": "Installa un modello", "step2Body": "Clicca installa per scaricarlo e configurarlo automaticamente.", "step3Title": "Inizia a chattare", - "step3Body": "Chatta con il tuo modello dal browser o usa l'API.", - "sandboxTitle": "Esegui il codice in sicurezza (facoltativo)", - "sandboxBody": "Installa il componente Sandbox perché il modello esegua codice e comandi in isolamento. Senza, i comandi vengono eseguiti direttamente su questa macchina, con accesso completo alla rete e nessun isolamento." + "step3Body": "Chatta con il tuo modello dal browser o usa l'API." }, "browseGallery": "Sfoglia galleria modelli", "importModel": "Importa modello", "docs": "Documentazione", "noModelsTitle": "Nessun modello disponibile", - "noModelsBody": "Non ci sono ancora modelli installati. Chiedi al tuo amministratore di configurare i modelli per iniziare a chattare.", - "sandboxInstall": "Installa Sandbox", - "sandboxSkip": "Salta" + "noModelsBody": "Non ci sono ancora modelli installati. Chiedi al tuo amministratore di configurare i modelli per iniziare a chattare." }, "connect": { "title": "Un endpoint, ogni API", @@ -139,7 +135,9 @@ }, "complete": "completa" }, - "notice": { "appUnavailable": "L’app non è più disponibile." }, + "notice": { + "appUnavailable": "L’app non è più disponibile." + }, "picker": { "aliasOf": "alias di {{target}}", "aliasBroken": "alias non valido", diff --git a/core/http/react-ui/public/locales/ko/admin.json b/core/http/react-ui/public/locales/ko/admin.json index ef073bc0c3..a7e8f1b60e 100644 --- a/core/http/react-ui/public/locales/ko/admin.json +++ b/core/http/react-ui/public/locales/ko/admin.json @@ -111,10 +111,10 @@ "loadFailedTitle": "설정을 불러오지 못했습니다.", "egress": { "title": "명령의 네트워크", - "intro": "샌드박스의 명령은 연결마다 LocalAI에 묻는 프록시를 통해서만 네트워크에 연결됩니다. 아래에서 제한, 새 채팅의 기본값, 포트, 추가 레지스트리, 감사 보관 기간을 정하세요. 각 사용자는 채팅의 도구 메뉴에서 제한 안에서 기본값을 고르고, 차단된 호스트를 카드에서 허용합니다.", + "intro": "격리되어 실행되는 명령은 연결마다 LocalAI에 묻는 프록시를 통해서만 네트워크에 연결됩니다. 아래에서 제한, 새 채팅의 기본값, 포트, 추가 레지스트리, 감사 보관 기간을 정하세요. 각 사용자는 채팅의 도구 메뉴에서 제한 안에서 기본값을 고르고, 차단된 호스트를 카드에서 허용합니다.", "serves": "{{name}} 애드온에서 격리되어 명령이 실행됩니다", "servesHost": "{{name}}을(를) 통해 이 컴퓨터에서 명령이 실행됩니다", - "servesNone": "아직 명령을 실행하는 샌드박스가 없습니다", + "servesNone": "아직 명령을 실행하는 애드온이 없습니다", "hostNote": "호스트 백엔드는 이 컴퓨터의 네트워크로 명령을 실행합니다. 이 설정은 적용되지 않습니다.", "counts": "최근 24시간: 허용 {{allowed}}, 차단 {{blocked}}.", "private": "관리자 규칙이 사설 네트워크에 연결하도록 허용", @@ -123,7 +123,7 @@ "registries": "패키지 레지스트리 ({{count}})", "showAudit": "감사 보기", "hideAudit": "감사 숨기기", - "loadFailed": "샌드박스 네트워크 설정을 읽을 수 없습니다", + "loadFailed": "명령의 네트워크 설정을 읽을 수 없습니다", "audit": { "verdict": "결과", "host": "호스트", @@ -157,7 +157,7 @@ "listLabel": "항상 허용되는 호스트", "remove": "{{host}} 제거", "empty": "아직 호스트가 없습니다. 호스트 이름을 입력하거나, 포트를 고정하려면 호스트:포트를 입력하세요.", - "hint": "정확한 이름만 가능합니다. 한 포트만 허용하려면 :포트를 붙이세요. 그렇지 않으면 샌드박스 네트워크 포트가 적용됩니다.", + "hint": "정확한 이름만 가능합니다. 한 포트만 허용하려면 :포트를 붙이세요. 그렇지 않으면 명령의 네트워크 포트가 적용됩니다.", "count": "{{n}}/{{max}}", "errors": { "empty": "호스트 이름을 입력하세요.", @@ -352,7 +352,6 @@ "byAddon": "애드온: {{name}}", "byNone": "꺼짐", "unavailable": "이 서버에서 실행할 수 없습니다: {{reason}}.", - "installSandbox": "격리된 명령 실행을 위해 Sandbox 설치", "replaceExplain": "이 애드온들은 {{tool}}을 대체합니다. 선택한 애드온이 켜져 실행 중인 모든 채팅에서 이를 제공하며 내장 도구는 숨겨집니다. 하나만 활성화할 수 있습니다. 선택하기 전까지는 먼저 설치된 애드온이 제공합니다.", "defaultInstalledFirst": "기본값: 먼저 설치됨", "installedOn": "설치 {{when}}", @@ -365,7 +364,7 @@ "list_agents": "저장된 에이전트" }, "descriptions": { - "bash": "Sandbox가 bash를 제공하지 않을 때 채팅의 명령과 코드를 이 컴퓨터에서 직접 실행합니다. Sandbox 애드온은 이를 격리된 명령으로 대체합니다.", + "bash": "애드온이 bash를 제공하지 않을 때 채팅의 명령과 코드를 이 컴퓨터에서 직접 실행합니다. 명령을 격리해 실행하는 애드온이 이를 대체합니다.", "web_search": "키 없이 채팅을 위해 웹을 검색합니다(DuckDuckGo, 그다음 Brave Search, 그다음 Bing). SearXNG 인스턴스가 설정되어 있으면 그 인스턴스로 검색합니다.", "web_fetch": "채팅을 위해 공개 웹 페이지나 파일을 주소로 읽습니다. 허용하지 않으면 내부 네트워크 주소는 거부됩니다.", "list_agents": "채팅이 사용자의 저장된 에이전트를 나열하고 그중 하나를 하위 에이전트로 시작할 수 있게 합니다. 각 채팅의 도구 메뉴에서 켭니다." @@ -378,7 +377,7 @@ "on": "모두에게 허용.", "onHint": "모든 사용자의 채팅이 묻지 않고 여기서 명령을 실행하며, 예약 실행과 하위 에이전트도 마찬가지입니다.", "default": "설정 안 됨: 기본값이 적용됩니다({{mode}}).", - "warning": "명령은 LocalAI가 실행되는 사용자로, 격리 없이 이 컴퓨터의 네트워크를 사용해 실행됩니다. LocalAI가 읽을 수 있는 것을 읽고 인터넷, 사용자 네트워크, LocalAI API에 접속할 수 있습니다. 모든 명령은 기록됩니다. 격리하려면 Sandbox를 설치하세요." + "warning": "명령은 LocalAI가 실행되는 사용자로, 격리 없이 이 컴퓨터의 네트워크를 사용해 실행됩니다. LocalAI가 읽을 수 있는 것을 읽고 인터넷, 사용자 네트워크, LocalAI API에 접속할 수 있습니다. 모든 명령은 기록됩니다. 격리하려면 명령을 격리하는 애드온을 설치하세요." }, "modes": { "off": "꺼짐", diff --git a/core/http/react-ui/public/locales/ko/agents.json b/core/http/react-ui/public/locales/ko/agents.json index 3179ca6e6e..2f534d40eb 100644 --- a/core/http/react-ui/public/locales/ko/agents.json +++ b/core/http/react-ui/public/locales/ko/agents.json @@ -128,7 +128,7 @@ "previewEdit": "The agent this form will save, and how it differs from the saved one.", "default": "Default", "network": "무인 실행에서 명령의 네트워크", - "networkHelp": "트리거나 커넥터가 이 에이전트를 실행하면 샌드박스 명령은 관리자가 정한 제한 안에서 이만큼의 네트워크에 연결됩니다. 실행 중에는 묻지 않으며, 범위 밖의 호스트는 차단됩니다. 이 에이전트로 시작하는 채팅도 이 값으로 시작합니다.", + "networkHelp": "트리거나 커넥터가 이 에이전트를 실행하면 명령은 관리자가 정한 제한 안에서 이만큼의 네트워크에 연결됩니다. 실행 중에는 묻지 않으며, 범위 밖의 호스트는 차단됩니다. 이 에이전트로 시작하는 채팅도 이 값으로 시작합니다.", "networkPresets": { "off": "끔", "registries": "패키지 레지스트리", @@ -463,7 +463,7 @@ "readShort": "읽기 전용", "writeShort": "읽기 및 변경", "help": "이 에이전트와의 채팅은 이 폴더와 채팅 자체의 폴더만 봅니다. 공유 폴더와 스킬은 계속 읽을 수 있습니다. 허용한 MCP 서버와 웹 도구는 이 폴더로 제한되지 않습니다.", - "commands": "이 에이전트의 명령은 Sandbox 애드온에서만 실행되며, 이 컴퓨터에서 직접 실행되지 않습니다.", + "commands": "이 에이전트의 명령은 이를 격리하는 애드온에서만 실행되며, 이 컴퓨터에서 직접 실행되지 않습니다.", "nextMessage": "변경 사항은 각 채팅의 다음 메시지부터 적용됩니다.", "missing": "이 폴더가 더 이상 없습니다. 이 에이전트를 사용하려면 다른 폴더를 선택하세요.", "unset": "아직 선택한 폴더가 없습니다. 이 에이전트를 사용하려면 폴더를 선택하세요.", diff --git a/core/http/react-ui/public/locales/ko/chat.json b/core/http/react-ui/public/locales/ko/chat.json index c782bf8474..3b43b6fea0 100644 --- a/core/http/react-ui/public/locales/ko/chat.json +++ b/core/http/react-ui/public/locales/ko/chat.json @@ -578,7 +578,7 @@ "skillsOn_one": "스킬 {{count}}개", "skillsOn_other": "스킬 {{count}}개", "commands": "명령 실행", - "isolated": "격리된 샌드박스에서 실행", + "isolated": "격리되어 실행", "host": "이 컴퓨터에서 실행", "noCommands": "실행 불가", "context": "컨텍스트", diff --git a/core/http/react-ui/public/locales/ko/chats.json b/core/http/react-ui/public/locales/ko/chats.json index f5d6e83ccc..17e236ccd8 100644 --- a/core/http/react-ui/public/locales/ko/chats.json +++ b/core/http/react-ui/public/locales/ko/chats.json @@ -270,24 +270,23 @@ "commands": { "title": "여기서는 명령을 실행할 수 없습니다", "none": "코드를 실행하는 애드온이 설치되어 있지 않아, 어시스턴트는 파일을 쓸 수 있지만 스크립트나 명령은 실행할 수 없습니다.", - "off": "이 채팅에서 Sandbox 애드온이 꺼져 있습니다. 도구 메뉴에서 켜면 어시스턴트가 코드를 실행할 수 있습니다.", - "unavailable": "Sandbox 애드온이 설치되어 있지만 이 서버에서는 명령을 실행할 수 없습니다.", - "unavailableWhy": "Sandbox 애드온이 이 서버에서 명령을 실행할 수 없습니다: {{reason}}", - "install": "Sandbox 설치", - "openSandbox": "Sandbox 애드온 열기", - "askInstall": "관리자에게 Sandbox 애드온 설치를 요청하세요.", "askFix": "관리자에게 해결을 요청하세요.", "hide": "숨기기", "hideLabel": "이 알림 숨기기", "chipTitle": "이 채팅은 코드나 명령을 실행할 수 없습니다. 자세히 보려면 선택하세요.", "hostTitle": "명령이 이 컴퓨터에서 실행됩니다", - "host": "명령은 이 컴퓨터의 파일과 네트워크를 그대로 쓰며 격리되지 않고 실행됩니다. 격리하려면 Sandbox를 설치하세요.", - "hostOff": "이 채팅에서 Sandbox가 꺼져 있어 명령이 이 컴퓨터의 파일과 네트워크를 쓰며 격리 없이 실행됩니다. 격리하려면 이 메뉴에서 Sandbox를 켜세요.", - "hostUnavailable": "여기서는 Sandbox를 실행할 수 없어 명령이 이 컴퓨터의 파일과 네트워크를 쓰며 격리 없이 실행됩니다.", - "hostUnavailableWhy": "여기서는 Sandbox를 실행할 수 없어({{reason}}) 명령이 이 컴퓨터의 파일과 네트워크를 쓰며 격리 없이 실행됩니다.", "hostChipTitle": "이 채팅의 명령은 격리 없이 이 컴퓨터에서 실행됩니다. 자세히 보려면 선택하세요.", "providerHost": "명령은 격리 없이 서버에서 실행됩니다.", "unknown": "실행 준비 상태 또는 격리 여부를 알 수 없습니다.", + "unknownBy": { + "owner_unreachable": "실행 준비 상태 또는 격리 여부를 알 수 없습니다: 애드온 소유자에게 연결할 수 없습니다.", + "not_reported": "실행 준비 상태 또는 격리 여부를 알 수 없습니다: 애드온이 실행 상태를 보고하지 않았습니다.", + "stale": "실행 준비 상태 또는 격리 여부를 알 수 없습니다: 상태가 애드온의 현재 버전과 일치하지 않았습니다.", + "invalid_status": "실행 준비 상태 또는 격리 여부를 알 수 없습니다: 애드온이 호스트가 받아들일 수 없는 상태를 보냈습니다.", + "not_selected": "실행 준비 상태 또는 격리 여부를 알 수 없습니다: 이 애드온은 이 채팅의 명령을 실행하는 애드온이 아닙니다.", + "no_answer": "실행 준비 상태 또는 격리 여부를 알 수 없습니다: 애드온이 제때 응답하지 않았습니다.", + "reported_unknown": "실행 준비 상태 또는 격리 여부를 알 수 없습니다: 애드온이 알 수 없다고 보고했습니다." + }, "providerUnavailable": "선택한 실행 공급자를 사용할 수 없습니다.", "disabled": "이 채팅의 명령 실행이 꺼져 있습니다." }, @@ -302,7 +301,6 @@ "expired": "응답 없음: 요청한 차례가 끝나서 명령이 실행되지 않았습니다." }, "provider": { - "sandbox": "Sandbox", "addon": "애드온 {{name}}", "host": "이 컴퓨터, 격리 없음", "hostOnce": "이 컴퓨터, 한 번 허용", @@ -326,9 +324,6 @@ "servedBy": "애드온 {{provider}}이(가) 제공", "servedByTool": "{{tool}}: {{provider}}", "servedByBuiltin": "기본 제공", - "sandbox": { - "starting": "Sandbox가 시작되는 중입니다. LocalAI가 {{seconds}}초 후 다시 확인합니다." - }, "fallbackBuiltin": "{{addon}}이(가) {{tool}}을(를) 대체하지만 지금은 이 채팅에서 사용할 수 없습니다(중지됨, 여기서 꺼짐 또는 허용되지 않음). 기본 제공 {{tool}}이(가) 사용됩니다.", "fallbackNone": "{{addon}}이(가) {{tool}}을(를) 대체하지만 지금은 이 채팅에서 사용할 수 없고, 기본 제공 {{tool}}도 꺼져 있습니다. 이 채팅에는 {{tool}}이(가) 없습니다.", "shell": { @@ -348,13 +343,13 @@ "all": "모든 공개 사이트" }, "presetHint": { - "off": "샌드박스의 명령은 어떤 네트워크에도 연결되지 않습니다.", + "off": "명령은 어떤 네트워크에도 연결되지 않습니다.", "registries": "명령은 패키지 레지스트리(PyPI, npm, Go, crates.io, RubyGems, Maven Central, GitHub 릴리스)에만 연결됩니다.", "all": "명령은 모든 공개 사이트에 연결됩니다." }, "limited": "관리자가 제한함", "limitedBy": "관리자가 허용하는 최대 범위: {{limit}}.", - "hostNetwork": "명령은 이 머신에서 실행되며 이 머신의 네트워크를 사용합니다. 네트워크 제한에는 Sandbox 애드온이 필요합니다.", + "hostNetwork": "명령은 이 머신에서 실행되며 이 머신의 네트워크를 사용합니다. 네트워크 제한에는 명령을 격리하는 애드온이 필요합니다.", "panel": "규칙과 요청 ({{count}})", "rules": "이 채팅의 규칙", "cards": "이 채팅의 요청", @@ -386,8 +381,8 @@ "blocked": { "titleOff": "네트워크 접근이 꺼져 있습니다", "titleCapped": "네트워크 접근이 제한되어 있습니다", - "bodyOff": "이 서버에서는 샌드박스의 네트워크 접근이 꺼져 있습니다. 명령이 다음에 접속하려 했습니다:", - "bodyCapped": "이 서버는 샌드박스 네트워크에 {{limit}}만 허용합니다. 명령이 다음에 접속하려 했습니다:", + "bodyOff": "이 서버에서는 명령의 네트워크 접근이 꺼져 있습니다. 명령이 다음에 접속하려 했습니다:", + "bodyCapped": "이 서버는 명령의 네트워크에 {{limit}}만 허용합니다. 명령이 다음에 접속하려 했습니다:", "adminOff": "관리자가 {{name}}의 설정에서 켤 수 있습니다.", "adminCapped": "관리자가 {{name}}의 설정에서 한도를 높일 수 있습니다.", "adminLink": "{{name}} 설정 열기", diff --git a/core/http/react-ui/public/locales/ko/home.json b/core/http/react-ui/public/locales/ko/home.json index 13eb6d92fc..751ab8b52a 100644 --- a/core/http/react-ui/public/locales/ko/home.json +++ b/core/http/react-ui/public/locales/ko/home.json @@ -82,17 +82,13 @@ "step2Title": "모델 설치", "step2Body": "설치를 클릭하면 자동으로 다운로드되고 구성됩니다.", "step3Title": "채팅 시작", - "step3Body": "브라우저에서 바로 모델과 채팅하거나 API를 사용하세요.", - "sandboxTitle": "코드를 안전하게 실행 (선택)", - "sandboxBody": "Sandbox 애드온을 설치하면 모델이 코드와 명령을 격리된 환경에서 실행합니다. 설치하지 않으면 명령이 이 컴퓨터에서 바로 실행되며, 네트워크에 완전히 접근하고 격리가 없습니다." + "step3Body": "브라우저에서 바로 모델과 채팅하거나 API를 사용하세요." }, "browseGallery": "모델 갤러리 둘러보기", "importModel": "모델 가져오기", "docs": "문서", "noModelsTitle": "사용 가능한 모델 없음", - "noModelsBody": "아직 설치된 모델이 없습니다. 채팅을 시작할 수 있도록 관리자에게 모델 설정을 요청하세요.", - "sandboxInstall": "Sandbox 설치", - "sandboxSkip": "건너뛰기" + "noModelsBody": "아직 설치된 모델이 없습니다. 채팅을 시작할 수 있도록 관리자에게 모델 설정을 요청하세요." }, "connect": { "title": "하나의 엔드포인트, 모든 API", @@ -139,7 +135,9 @@ }, "complete": "완성" }, - "notice": { "appUnavailable": "앱을 더 이상 사용할 수 없습니다." }, + "notice": { + "appUnavailable": "앱을 더 이상 사용할 수 없습니다." + }, "picker": { "aliasOf": "{{target}}의 별칭", "aliasBroken": "깨진 별칭", diff --git a/core/http/react-ui/public/locales/pt-BR/admin.json b/core/http/react-ui/public/locales/pt-BR/admin.json index 5e44957d09..64874d9d08 100644 --- a/core/http/react-ui/public/locales/pt-BR/admin.json +++ b/core/http/react-ui/public/locales/pt-BR/admin.json @@ -111,10 +111,10 @@ "loadFailedTitle": "Não foi possível carregar as configurações.", "egress": { "title": "Rede dos comandos", - "intro": "Os comandos no Sandbox alcançam a rede só por um proxy que pergunta ao LocalAI sobre cada conexão. Abaixo você define o limite, a predefinição de um chat novo, as portas, os registros extras e a retenção da auditoria; cada pessoa escolhe a predefinição de cada chat no menu Ferramentas dele, até o limite, e permite um host bloqueado num cartão.", + "intro": "Os comandos executados em isolamento alcançam a rede só por um proxy que pergunta ao LocalAI sobre cada conexão. Abaixo você define o limite, a predefinição de um chat novo, as portas, os registros extras e a retenção da auditoria; cada pessoa escolhe a predefinição de cada chat no menu Ferramentas dele, até o limite, e permite um host bloqueado num cartão.", "serves": "Os comandos rodam isolados no complemento {{name}}", "servesHost": "Os comandos rodam nesta máquina pelo {{name}}", - "servesNone": "Nenhum Sandbox roda comandos ainda", + "servesNone": "Nenhum complemento roda comandos ainda", "hostNote": "O backend do host roda comandos nesta máquina com a rede dela: estas configurações não se aplicam.", "counts": "Últimas 24 horas: {{allowed}} permitidas, {{blocked}} bloqueadas.", "private": "Deixar a regra de um administrador alcançar redes privadas", @@ -123,7 +123,7 @@ "registries": "Registros de pacotes ({{count}})", "showAudit": "Mostrar a auditoria", "hideAudit": "Ocultar a auditoria", - "loadFailed": "Não foi possível ler as configurações de rede do Sandbox", + "loadFailed": "Não foi possível ler as configurações de rede dos comandos", "audit": { "verdict": "Resultado", "host": "Host", @@ -157,7 +157,7 @@ "listLabel": "Hosts sempre permitidos", "remove": "Remover {{host}}", "empty": "Nenhum host ainda. Escreva um nome de host, ou host:porta para fixar a porta.", - "hint": "Somente nomes exatos. Adicione :porta para permitir uma única porta; caso contrário, valem as portas de rede do Sandbox.", + "hint": "Somente nomes exatos. Adicione :porta para permitir uma única porta; caso contrário, valem as portas de rede dos comandos.", "count": "{{n}}/{{max}}", "errors": { "empty": "Escreva um nome de host.", @@ -352,7 +352,6 @@ "byAddon": "Complemento: {{name}}", "byNone": "Desligada", "unavailable": "Este servidor não consegue executá-la: {{reason}}.", - "installSandbox": "Instale o Sandbox para rodar comandos isolados", "replaceExplain": "Estes complementos substituem {{tool}}: o escolhido o fornece em cada chat em que está ligado e rodando, e o integrado fica oculto. Só um pode estar ativo. Até você escolher, o que foi instalado primeiro o fornece.", "defaultInstalledFirst": "Padrão: instalado primeiro", "installedOn": "Instalado em {{when}}", @@ -365,7 +364,7 @@ "list_agents": "Agentes salvos" }, "descriptions": { - "bash": "Roda comandos e código para os chats diretamente nesta máquina quando nenhum Sandbox fornece o bash. O complemento Sandbox o substitui por comandos isolados.", + "bash": "Roda comandos e código para os chats diretamente nesta máquina quando nenhum complemento fornece o bash. Um complemento que roda comandos isolados o substitui.", "web_search": "Pesquisa na web para os chats sem chave (DuckDuckGo, depois Brave Search, depois Bing), ou com sua instância SearXNG quando houver uma definida.", "web_fetch": "Lê para os chats uma página ou arquivo público da web pelo endereço. Endereços dentro da sua rede são recusados, a menos que você os permita.", "list_agents": "Permite que um chat liste os agentes salvos do usuário e inicie um como subagente. Cada chat o ativa no menu Ferramentas." @@ -378,7 +377,7 @@ "on": "Permitir para todos.", "onHint": "Os chats de todos os usuários rodam comandos aqui sem perguntar, inclusive execuções agendadas e subagentes.", "default": "Não definido: vale o padrão ({{mode}}).", - "warning": "Os comandos rodam como o usuário do LocalAI, sem isolamento e com a rede desta máquina: podem ler o que o LocalAI lê e acessar a internet, a sua rede e a API do LocalAI. Cada comando é registrado. Instale o Sandbox para isolá-los." + "warning": "Os comandos rodam como o usuário do LocalAI, sem isolamento e com a rede desta máquina: podem ler o que o LocalAI lê e acessar a internet, a sua rede e a API do LocalAI. Cada comando é registrado. Instale um complemento que isole os comandos." }, "modes": { "off": "desligado", diff --git a/core/http/react-ui/public/locales/pt-BR/agents.json b/core/http/react-ui/public/locales/pt-BR/agents.json index 32f92d1e9b..8d14bc2ec4 100644 --- a/core/http/react-ui/public/locales/pt-BR/agents.json +++ b/core/http/react-ui/public/locales/pt-BR/agents.json @@ -128,7 +128,7 @@ "previewEdit": "The agent this form will save, and how it differs from the saved one.", "default": "Default", "network": "Rede dos comandos em execuções sem supervisão", - "networkHelp": "Quando um gatilho ou um conector roda este agente, os comandos do Sandbox dele alcançam esta parte da rede, até o limite definido por um administrador. Uma execução nunca pergunta: um host fora dela é bloqueado. Um chat que você inicia com este agente também começa assim.", + "networkHelp": "Quando um gatilho ou um conector roda este agente, os comandos dele alcançam esta parte da rede, até o limite definido por um administrador. Uma execução nunca pergunta: um host fora dela é bloqueado. Um chat que você inicia com este agente também começa assim.", "networkPresets": { "off": "Desligada", "registries": "Registros de pacotes", @@ -463,7 +463,7 @@ "readShort": "somente leitura", "writeShort": "leitura e alteração", "help": "Os chats com este agente veem apenas esta pasta e a própria pasta do chat. As pastas compartilhadas e as skills continuam legíveis. Os servidores MCP e as ferramentas web que você concede não ficam limitados a esta pasta.", - "commands": "Os comandos deste agente rodam apenas no complemento Sandbox, nunca diretamente nesta máquina.", + "commands": "Os comandos deste agente rodam apenas em um complemento que os isola, nunca diretamente nesta máquina.", "nextMessage": "Uma alteração vale a partir da próxima mensagem de cada chat.", "missing": "Esta pasta não existe mais. Escolha outra pasta para usar este agente.", "unset": "Nenhuma pasta escolhida ainda. Escolha uma pasta para usar este agente.", diff --git a/core/http/react-ui/public/locales/pt-BR/chat.json b/core/http/react-ui/public/locales/pt-BR/chat.json index 8fbe6ce52f..94fed32ee4 100644 --- a/core/http/react-ui/public/locales/pt-BR/chat.json +++ b/core/http/react-ui/public/locales/pt-BR/chat.json @@ -581,7 +581,7 @@ "skillsOn_one": "{{count}} skill", "skillsOn_other": "{{count}} skills", "commands": "Comandos", - "isolated": "Rodam em uma sandbox isolada", + "isolated": "Rodam isolados", "host": "Rodam nesta máquina", "noCommands": "Não podem rodar", "context": "Contexto", diff --git a/core/http/react-ui/public/locales/pt-BR/chats.json b/core/http/react-ui/public/locales/pt-BR/chats.json index a7b518cbd4..afe5d7aa34 100644 --- a/core/http/react-ui/public/locales/pt-BR/chats.json +++ b/core/http/react-ui/public/locales/pt-BR/chats.json @@ -270,24 +270,23 @@ "commands": { "title": "Comandos não podem ser executados aqui", "none": "Nenhum complemento que executa código está instalado, então o assistente pode escrever arquivos, mas não executar scripts nem comandos.", - "off": "O complemento Sandbox está desligado neste chat. Ligue-o no menu Ferramentas para o assistente poder executar código.", - "unavailable": "O complemento Sandbox está instalado, mas não consegue executar comandos neste servidor.", - "unavailableWhy": "O complemento Sandbox não consegue executar comandos neste servidor: {{reason}}", - "install": "Instalar o Sandbox", - "openSandbox": "Abrir o complemento Sandbox", - "askInstall": "Peça a um administrador para instalar o complemento Sandbox.", "askFix": "Peça a um administrador para corrigir isso.", "hide": "Ocultar", "hideLabel": "Ocultar este aviso", "chipTitle": "Este chat não pode executar código nem comandos. Selecione para ver detalhes.", "hostTitle": "Os comandos rodam nesta máquina", - "host": "Os comandos rodam nesta máquina, com os arquivos e a rede dela, sem isolamento. Instale o Sandbox para isolá-los.", - "hostOff": "O Sandbox está desligado neste chat, então os comandos rodam nesta máquina, com os arquivos e a rede dela, sem isolamento. Ligue o Sandbox neste menu para isolá-los.", - "hostUnavailable": "O Sandbox não consegue rodar aqui, então os comandos rodam nesta máquina, com os arquivos e a rede dela, sem isolamento.", - "hostUnavailableWhy": "O Sandbox não consegue rodar aqui ({{reason}}), então os comandos rodam nesta máquina, com os arquivos e a rede dela, sem isolamento.", "hostChipTitle": "Os comandos deste chat rodam nesta máquina, sem isolamento. Selecione para ver detalhes.", "providerHost": "Os comandos são executados no servidor sem isolamento.", "unknown": "A disponibilidade ou o isolamento da execução é desconhecido.", + "unknownBy": { + "owner_unreachable": "A disponibilidade ou o isolamento da execução é desconhecido: não foi possível contatar o responsável pelo complemento.", + "not_reported": "A disponibilidade ou o isolamento da execução é desconhecido: o complemento não informou o estado de execução.", + "stale": "A disponibilidade ou o isolamento da execução é desconhecido: o estado não correspondia à versão atual do complemento.", + "invalid_status": "A disponibilidade ou o isolamento da execução é desconhecido: o complemento enviou um estado que o host não pôde aceitar.", + "not_selected": "A disponibilidade ou o isolamento da execução é desconhecido: o complemento não é o que executa os comandos deste chat.", + "no_answer": "A disponibilidade ou o isolamento da execução é desconhecido: o complemento não respondeu a tempo.", + "reported_unknown": "A disponibilidade ou o isolamento da execução é desconhecido: o complemento informou que não sabe dizer." + }, "providerUnavailable": "O provedor de execução selecionado está indisponível.", "disabled": "A execução de comandos está desativada para esta conversa." }, @@ -302,7 +301,6 @@ "expired": "Sem resposta: o turno que pediu terminou, então o comando não foi executado." }, "provider": { - "sandbox": "Sandbox", "addon": "Complemento {{name}}", "host": "Esta máquina, sem isolamento", "hostOnce": "Esta máquina, permitido uma vez", @@ -326,9 +324,6 @@ "servedBy": "Servido pelo complemento {{provider}}", "servedByTool": "{{tool}}: {{provider}}", "servedByBuiltin": "integrada", - "sandbox": { - "starting": "O Sandbox está iniciando. O LocalAI verifica de novo em {{seconds}} s." - }, "fallbackBuiltin": "{{addon}} substitui {{tool}}, mas agora não pode atender este chat (parado, desligado aqui ou não concedido): {{tool}} integrada é usada.", "fallbackNone": "{{addon}} substitui {{tool}}, mas agora não pode atender este chat, e {{tool}} integrada está desligada: este chat não tem {{tool}}.", "shell": { @@ -348,13 +343,13 @@ "all": "Todos os sites públicos" }, "presetHint": { - "off": "Os comandos no Sandbox não alcançam nenhuma rede.", + "off": "Os comandos não alcançam nenhuma rede.", "registries": "Os comandos alcançam só os registros de pacotes (PyPI, npm, Go, crates.io, RubyGems, Maven Central, versões do GitHub).", "all": "Os comandos alcançam qualquer site público." }, "limited": "Limitado pelo seu administrador", "limitedBy": "Seu administrador permite no máximo: {{limit}}.", - "hostNetwork": "Os comandos são executados nesta máquina e usam a rede dela. Os limites de rede exigem o complemento Sandbox.", + "hostNetwork": "Os comandos são executados nesta máquina e usam a rede dela. Os limites de rede exigem um complemento que isole os comandos.", "panel": "Regras e pedidos ({{count}})", "rules": "Regras deste chat", "cards": "Pedidos deste chat", @@ -386,8 +381,8 @@ "blocked": { "titleOff": "O acesso à rede está desligado", "titleCapped": "O acesso à rede está limitado", - "bodyOff": "O acesso à rede do Sandbox está desligado neste servidor. Um comando pediu para alcançar", - "bodyCapped": "Este servidor só permite {{limit}} para a rede do Sandbox. Um comando pediu para alcançar", + "bodyOff": "O acesso à rede dos comandos está desligado neste servidor. Um comando pediu para alcançar", + "bodyCapped": "Este servidor só permite {{limit}} para a rede dos comandos. Um comando pediu para alcançar", "adminOff": "Um administrador pode ativá-lo nas configurações de {{name}}.", "adminCapped": "Um administrador pode aumentar o limite nas configurações de {{name}}.", "adminLink": "Abrir as configurações de {{name}}", diff --git a/core/http/react-ui/public/locales/pt-BR/home.json b/core/http/react-ui/public/locales/pt-BR/home.json index 21a37efa6c..1399cc5fef 100644 --- a/core/http/react-ui/public/locales/pt-BR/home.json +++ b/core/http/react-ui/public/locales/pt-BR/home.json @@ -82,17 +82,13 @@ "step2Title": "Instale um Modelo", "step2Body": "Clique em instalar para baixar e configurá-lo automaticamente.", "step3Title": "Comece a Conversar", - "step3Body": "Converse com seu modelo direto do navegador ou use a API.", - "sandboxTitle": "Execute código com segurança (opcional)", - "sandboxBody": "Instale o complemento Sandbox para que o modelo execute código e comandos isolados. Sem ele, os comandos rodam direto nesta máquina, com acesso total à rede e nenhum isolamento." + "step3Body": "Converse com seu modelo direto do navegador ou use a API." }, "browseGallery": "Explorar Galeria de Modelos", "importModel": "Importar Modelo", "docs": "Documentação", "noModelsTitle": "Nenhum Modelo Disponível", - "noModelsBody": "Ainda não há modelos instalados. Peça ao administrador para configurar modelos para você poder começar a conversar.", - "sandboxInstall": "Instalar Sandbox", - "sandboxSkip": "Pular" + "noModelsBody": "Ainda não há modelos instalados. Peça ao administrador para configurar modelos para você poder começar a conversar." }, "starters": { "title": "Recomendados para o seu hardware", @@ -154,7 +150,9 @@ }, "complete": "completar" }, - "notice": { "appUnavailable": "O aplicativo não está mais disponível." }, + "notice": { + "appUnavailable": "O aplicativo não está mais disponível." + }, "picker": { "aliasOf": "alias de {{target}}", "aliasBroken": "alias quebrado", diff --git a/core/http/react-ui/public/locales/zh-CN/admin.json b/core/http/react-ui/public/locales/zh-CN/admin.json index 3cebd09819..5a8107ac52 100644 --- a/core/http/react-ui/public/locales/zh-CN/admin.json +++ b/core/http/react-ui/public/locales/zh-CN/admin.json @@ -111,10 +111,10 @@ "loadFailedTitle": "无法加载设置。", "egress": { "title": "命令的网络", - "intro": "沙盒中的命令只能通过一个代理访问网络,代理对每个连接都会询问 LocalAI。在下方设置限制、新聊天的预设、端口、额外仓库和审计保留时间;每个人在聊天的工具菜单中于限制内选择预设,并在卡片上允许被阻止的主机。", + "intro": "隔离运行的命令只能通过一个代理访问网络,代理对每个连接都会询问 LocalAI。在下方设置限制、新聊天的预设、端口、额外仓库和审计保留时间;每个人在聊天的工具菜单中于限制内选择预设,并在卡片上允许被阻止的主机。", "serves": "命令在 {{name}} 插件中隔离运行", "servesHost": "命令通过 {{name}} 在这台机器上运行", - "servesNone": "尚无沙盒运行命令", + "servesNone": "尚无插件运行命令", "hostNote": "主机后端使用这台机器的网络运行命令:这些设置对其不适用。", "counts": "最近 24 小时:允许 {{allowed}},阻止 {{blocked}}。", "private": "允许管理员的规则访问私有网络", @@ -123,7 +123,7 @@ "registries": "软件包仓库({{count}})", "showAudit": "显示审计", "hideAudit": "隐藏审计", - "loadFailed": "无法读取沙盒网络设置", + "loadFailed": "无法读取命令的网络设置", "audit": { "verdict": "结果", "host": "主机", @@ -157,7 +157,7 @@ "listLabel": "始终允许的主机", "remove": "移除 {{host}}", "empty": "还没有主机。输入主机名,或输入 主机:端口 来固定端口。", - "hint": "只接受确切的名称。加上 :端口 只允许一个端口;否则适用沙盒网络端口设置。", + "hint": "只接受确切的名称。加上 :端口 只允许一个端口;否则适用命令的网络端口设置。", "count": "{{n}}/{{max}}", "errors": { "empty": "请输入主机名。", @@ -329,7 +329,6 @@ "byAddon": "插件:{{name}}", "byNone": "关闭", "unavailable": "此服务器无法运行它:{{reason}}。", - "installSandbox": "安装 Sandbox 以隔离运行命令", "replaceExplain": "这些插件会替换 {{tool}}:所选插件在其开启并运行的每个聊天中提供该工具,内置工具会被隐藏。只能有一个生效。 在你选择之前,由最先安装的插件提供。", "defaultInstalledFirst": "默认:最先安装", "installedOn": "安装于 {{when}}", @@ -342,7 +341,7 @@ "list_agents": "已保存的智能体" }, "descriptions": { - "bash": "当没有 Sandbox 提供 bash 时,直接在这台机器上为聊天运行命令和代码。Sandbox 插件会将其替换为隔离运行的命令。", + "bash": "当没有插件提供 bash 时,直接在这台机器上为聊天运行命令和代码。可隔离运行命令的插件会将其替换。", "web_search": "无需密钥为聊天搜索网页(依次使用 DuckDuckGo、Brave Search、Bing),设置了 SearXNG 实例时则使用该实例。", "web_fetch": "按地址为聊天读取公开的网页或文件。除非您允许,否则内部网络地址会被拒绝。", "list_agents": "允许聊天列出用户已保存的智能体,并将其中一个作为子智能体启动。每个聊天需在其工具菜单中开启。" @@ -355,7 +354,7 @@ "on": "允许所有人。", "onHint": "所有用户的聊天都可以无需询问在此运行命令,包括计划运行和子代理。", "default": "未设置:使用默认值({{mode}})。", - "warning": "命令以运行 LocalAI 的用户身份执行,没有隔离,并使用这台机器的网络:它们可以读取 LocalAI 能读取的内容,并访问互联网、你的网络和 LocalAI API。每条命令都会被记录。安装 Sandbox 以隔离运行。" + "warning": "命令以运行 LocalAI 的用户身份执行,没有隔离,并使用这台机器的网络:它们可以读取 LocalAI 能读取的内容,并访问互联网、你的网络和 LocalAI API。每条命令都会被记录。请安装可隔离命令的插件。" }, "modes": { "off": "关闭", diff --git a/core/http/react-ui/public/locales/zh-CN/agents.json b/core/http/react-ui/public/locales/zh-CN/agents.json index 9d46d31689..7c7ac2f0d4 100644 --- a/core/http/react-ui/public/locales/zh-CN/agents.json +++ b/core/http/react-ui/public/locales/zh-CN/agents.json @@ -128,7 +128,7 @@ "previewEdit": "The agent this form will save, and how it differs from the saved one.", "default": "Default", "network": "无人值守运行中命令的网络", - "networkHelp": "当触发器或连接器运行此代理时,其沙盒命令可访问的网络范围,不超过管理员设置的限制。运行时从不询问:范围外的主机会被阻止。用此代理开始的聊天也以此开始。", + "networkHelp": "当触发器或连接器运行此代理时,其命令可访问的网络范围,不超过管理员设置的限制。运行时从不询问:范围外的主机会被阻止。用此代理开始的聊天也以此开始。", "networkPresets": { "off": "关闭", "registries": "软件包仓库", @@ -463,7 +463,7 @@ "readShort": "只读", "writeShort": "读取和修改", "help": "与此智能体的对话只能看到这个文件夹和对话自己的文件夹。共享文件夹和技能仍可读取。你授予的 MCP 服务器和网络工具不受此文件夹限制。", - "commands": "此智能体的命令只在 Sandbox 插件中运行,绝不会直接在本机上运行。", + "commands": "此智能体的命令只在可隔离命令的插件中运行,绝不会直接在本机上运行。", "nextMessage": "更改从每个对话的下一条消息开始生效。", "missing": "此文件夹已不存在。请选择其他文件夹以使用此智能体。", "unset": "尚未选择文件夹。请选择一个文件夹以使用此智能体。", diff --git a/core/http/react-ui/public/locales/zh-CN/chat.json b/core/http/react-ui/public/locales/zh-CN/chat.json index b3071578f3..fc521dbf20 100644 --- a/core/http/react-ui/public/locales/zh-CN/chat.json +++ b/core/http/react-ui/public/locales/zh-CN/chat.json @@ -578,7 +578,7 @@ "skillsOn_one": "{{count}} 个技能", "skillsOn_other": "{{count}} 个技能", "commands": "命令", - "isolated": "在隔离的沙箱中运行", + "isolated": "隔离运行", "host": "在本机上运行", "noCommands": "无法运行", "context": "上下文", diff --git a/core/http/react-ui/public/locales/zh-CN/chats.json b/core/http/react-ui/public/locales/zh-CN/chats.json index bf842c7d23..3bcfd38ed1 100644 --- a/core/http/react-ui/public/locales/zh-CN/chats.json +++ b/core/http/react-ui/public/locales/zh-CN/chats.json @@ -270,24 +270,23 @@ "commands": { "title": "此处无法运行命令", "none": "未安装可运行代码的插件,因此助手可以写入文件,但无法运行脚本或命令。", - "off": "此对话已关闭 Sandbox 插件。在“工具”菜单中开启后,助手即可运行代码。", - "unavailable": "Sandbox 插件已安装,但无法在此服务器上运行命令。", - "unavailableWhy": "Sandbox 插件无法在此服务器上运行命令:{{reason}}", - "install": "安装 Sandbox", - "openSandbox": "打开 Sandbox 插件", - "askInstall": "请联系管理员安装 Sandbox 插件。", "askFix": "请联系管理员修复。", "hide": "隐藏", "hideLabel": "隐藏此提示", "chipTitle": "此对话无法运行代码或命令。选择以查看详情。", "hostTitle": "命令在这台机器上运行", - "host": "命令在这台机器上运行,可访问其文件和网络,没有隔离。安装 Sandbox 以隔离运行。", - "hostOff": "此聊天已关闭 Sandbox,因此命令在这台机器上运行,可访问其文件和网络,没有隔离。在此菜单中打开 Sandbox 以隔离运行。", - "hostUnavailable": "Sandbox 无法在此运行,因此命令在这台机器上运行,可访问其文件和网络,没有隔离。", - "hostUnavailableWhy": "Sandbox 无法在此运行({{reason}}),因此命令在这台机器上运行,可访问其文件和网络,没有隔离。", "hostChipTitle": "此聊天中的命令在这台机器上运行,没有隔离。选择以查看详情。", "providerHost": "命令在服务器上运行,未隔离。", "unknown": "执行就绪状态或隔离状态未知。", + "unknownBy": { + "owner_unreachable": "执行就绪状态或隔离状态未知:无法联系插件的所有者。", + "not_reported": "执行就绪状态或隔离状态未知:插件尚未报告其执行状态。", + "stale": "执行就绪状态或隔离状态未知:状态与插件的当前版本不一致。", + "invalid_status": "执行就绪状态或隔离状态未知:插件发送了主机无法接受的状态。", + "not_selected": "执行就绪状态或隔离状态未知:该插件不是运行此聊天命令的插件。", + "no_answer": "执行就绪状态或隔离状态未知:插件未在规定时间内响应。", + "reported_unknown": "执行就绪状态或隔离状态未知:插件报告无法确定。" + }, "providerUnavailable": "所选执行提供程序不可用。", "disabled": "此聊天已关闭命令执行。" }, @@ -302,7 +301,6 @@ "expired": "未回应:提出请求的这一轮已结束,因此命令没有运行。" }, "provider": { - "sandbox": "Sandbox", "addon": "插件 {{name}}", "host": "这台机器,未隔离", "hostOnce": "这台机器,已允许一次", @@ -326,9 +324,6 @@ "servedBy": "由附加组件 {{provider}} 提供", "servedByTool": "{{tool}}: {{provider}}", "servedByBuiltin": "内置", - "sandbox": { - "starting": "Sandbox 正在启动。LocalAI 将在 {{seconds}} 秒后再次检查。" - }, "fallbackBuiltin": "{{addon}} 替代了 {{tool}},但现在无法为此聊天提供服务(已停止、在此关闭或未授权):使用内置 {{tool}}。", "fallbackNone": "{{addon}} 替代了 {{tool}},但现在无法为此聊天提供服务,且内置 {{tool}} 已关闭:此聊天没有 {{tool}}。", "shell": { @@ -348,13 +343,13 @@ "all": "所有公共网站" }, "presetHint": { - "off": "沙盒中的命令无法访问任何网络。", + "off": "命令无法访问任何网络。", "registries": "命令只能访问软件包仓库(PyPI、npm、Go、crates.io、RubyGems、Maven Central、GitHub 发布)。", "all": "命令可以访问所有公共网站。" }, "limited": "受管理员限制", "limitedBy": "管理员最多允许:{{limit}}。", - "hostNetwork": "命令在这台机器上运行,并使用它的网络。网络限制需要 Sandbox 插件。", + "hostNetwork": "命令在这台机器上运行,并使用它的网络。网络限制需要可隔离命令的插件。", "panel": "规则和请求({{count}})", "rules": "此聊天的规则", "cards": "此聊天的请求", @@ -386,8 +381,8 @@ "blocked": { "titleOff": "网络访问已关闭", "titleCapped": "网络访问受到限制", - "bodyOff": "此服务器已关闭沙盒的网络访问。有一条命令想访问", - "bodyCapped": "此服务器只允许沙盒网络使用:{{limit}}。有一条命令想访问", + "bodyOff": "此服务器已关闭命令的网络访问。有一条命令想访问", + "bodyCapped": "此服务器只允许命令的网络使用:{{limit}}。有一条命令想访问", "adminOff": "管理员可以在 {{name}} 的设置中开启。", "adminCapped": "管理员可以在 {{name}} 的设置中提高限制。", "adminLink": "打开 {{name}} 的设置", diff --git a/core/http/react-ui/public/locales/zh-CN/home.json b/core/http/react-ui/public/locales/zh-CN/home.json index 9111a54707..7fd330a870 100644 --- a/core/http/react-ui/public/locales/zh-CN/home.json +++ b/core/http/react-ui/public/locales/zh-CN/home.json @@ -82,17 +82,13 @@ "step2Title": "安装模型", "step2Body": "点击安装即可自动下载并配置。", "step3Title": "开始聊天", - "step3Body": "直接在浏览器中与模型聊天,或使用 API。", - "sandboxTitle": "安全运行代码(可选)", - "sandboxBody": "安装 Sandbox 附加组件,让模型在隔离环境中运行代码和命令。没有它,命令会直接在这台机器上运行,拥有完整的网络访问权限且没有隔离。" + "step3Body": "直接在浏览器中与模型聊天,或使用 API。" }, "browseGallery": "浏览模型库", "importModel": "导入模型", "docs": "文档", "noModelsTitle": "暂无可用模型", - "noModelsBody": "尚未安装模型。请联系您的管理员设置模型,以便开始聊天。", - "sandboxInstall": "安装 Sandbox", - "sandboxSkip": "跳过" + "noModelsBody": "尚未安装模型。请联系您的管理员设置模型,以便开始聊天。" }, "connect": { "title": "一个端点,所有 API", @@ -139,7 +135,9 @@ }, "complete": "补全" }, - "notice": { "appUnavailable": "应用已不可用。" }, + "notice": { + "appUnavailable": "应用已不可用。" + }, "picker": { "aliasOf": "{{target}} 的别名", "aliasBroken": "别名失效", diff --git a/core/http/react-ui/src/components/chat/ActivityFold.jsx b/core/http/react-ui/src/components/chat/ActivityFold.jsx index 8bf0ce55fd..de8a0742bb 100644 --- a/core/http/react-ui/src/components/chat/ActivityFold.jsx +++ b/core/http/react-ui/src/components/chat/ActivityFold.jsx @@ -21,6 +21,7 @@ import CommandsConsentCard from './CommandsConsentCard' import NetworkConsentCard from './NetworkConsentCard' import { EgressCardsContext } from './egressCardsContext' import { providerTag } from '../../utils/chatCommands' +import { useAddonTitle } from '../../addons/useAddonRegistry' // What the thread says about reasoning and tool use: one quiet line that opens // inline into the steps. Everything it shows is in the transcript the server @@ -289,8 +290,10 @@ function StepFiles({ files, more }) { function ToolStep({ text, duration, card }) { const { t: tc } = useTranslation('chats') const { name, summary } = toolLine(text) - // A replaceable tool (bash) says who served it: the Sandbox or this machine. + // A replaceable tool (bash) says who served it: an add-on, by the title it + // declares, or this machine. const tag = providerTag(card) + const providerTitle = useAddonTitle(card?.kind === 'tool_provider' ? String(card.id || '') : '') const out = toolOutput(text) const refused = Boolean(toolRefusal(text)) const shownOut = out && !addonChange(text) && !refused ? out : '' @@ -305,7 +308,7 @@ function ToolStep({ text, duration, card }) { after={} > - {tag && {tc(`tools.provider.${tag.key}`, tag.values)}} + {tag && {tc(`tools.provider.${tag.key}`, providerTitle ? { ...tag.values, name: providerTitle } : tag.values)}} ) } diff --git a/core/http/react-ui/src/components/chat/NetworkConsentCard.jsx b/core/http/react-ui/src/components/chat/NetworkConsentCard.jsx index 3f7787cf98..21cff85216 100644 --- a/core/http/react-ui/src/components/chat/NetworkConsentCard.jsx +++ b/core/http/react-ui/src/components/chat/NetworkConsentCard.jsx @@ -11,7 +11,7 @@ import { addonSettingsAddress } from '../../utils/addonSettings' import { useAddonTitle } from '../../addons/useAddonRegistry' import './network.css' -// The card a command of the Sandbox waits on when it asks for a host the chat +// The card an isolated command waits on when it asks for a host the chat // does not allow but the administrator's limit would. Allow once covers the // rest of that command; Allow for this chat stores a rule; Deny is remembered // so the host does not ask again. The host is shown as plain text, in diff --git a/core/http/react-ui/src/components/chat/NetworkRow.jsx b/core/http/react-ui/src/components/chat/NetworkRow.jsx index fbf87b8299..8b2ff33b47 100644 --- a/core/http/react-ui/src/components/chat/NetworkRow.jsx +++ b/core/http/react-ui/src/components/chat/NetworkRow.jsx @@ -8,7 +8,7 @@ import { askedAboveLimit, cardAnswers, ceilingKind, cardStateKey, hostPort, netw import './network.css' // The Network row of the chat's Tools menu: how much of the network the -// chat's Sandbox commands may reach (off, the package registries, all public +// chat's isolated commands may reach (off, the package registries, all public // sites), up to the administrator's limit, and the panel with the chat's // rules and the cards that asked. Commands that run on this machine have the // server's network: the row is a line that says so. diff --git a/core/http/react-ui/src/components/settings/EgressSection.jsx b/core/http/react-ui/src/components/settings/EgressSection.jsx index 1f17de0f51..03c0894a48 100644 --- a/core/http/react-ui/src/components/settings/EgressSection.jsx +++ b/core/http/react-ui/src/components/settings/EgressSection.jsx @@ -4,9 +4,10 @@ import { useTranslation } from 'react-i18next' import { Button, Callout, LoadError, SkeletonRows, Switch } from '../ui' import { chatEgressApi } from '../../utils/api' import { FIELD_BY_KEY, getValue, setValue } from '../../utils/settingsSchema' +import { useAddonTitle } from '../../addons/useAddonRegistry' import { EGRESS_CONFIRM_KEY, EGRESS_PRIVATE_PHRASE } from '../../utils/settingsPending' -// Settings > Tools: the network of the chats' Sandbox commands, from GET +// Settings > Tools: the network of the chats' isolated commands, from GET // /api/chats/admin/egress. The limit, the default, the ports, the extra // registries and the retention are rows of the page; this section shows who // serves commands, the registries list, the private-network switch with its @@ -124,11 +125,14 @@ export default function EgressSection({ settings, initial, onChange, showKey = t return () => { live = false } }, [reload]) + // The name of the add-on that runs commands is its declared title. + const runnerTitle = useAddonTitle(state.info?.sandbox || '') + if (state.loading) return if (state.error) return setReload(n => n + 1)} /> const info = state.info || {} const serves = info.sandbox - ? t(info.isolation === 'host' ? 'settings.egress.servesHost' : 'settings.egress.serves', { name: info.sandbox }) + ? t(info.isolation === 'host' ? 'settings.egress.servesHost' : 'settings.egress.serves', { name: runnerTitle || info.sandbox }) : t('settings.egress.servesNone') return (
diff --git a/core/http/react-ui/src/hooks/useChatEgress.js b/core/http/react-ui/src/hooks/useChatEgress.js index 3eb2e03d1f..bbcb74d650 100644 --- a/core/http/react-ui/src/hooks/useChatEgress.js +++ b/core/http/react-ui/src/hooks/useChatEgress.js @@ -3,7 +3,7 @@ import { chatEgressApi } from '../utils/api' const empty = { preset: 'off', ceiling: 'off', effective: 'off', applies: false, applies_reason: '', registries: [], allowed_hosts: [], rules: [], cards: [] } -// The network of a chat's Sandbox commands (GET /api/chats/{id}/egress), read +// The network of a chat's isolated commands (GET /api/chats/{id}/egress), read // again when tick changes (an egress_consent or egress_card event). setPreset, // removeRule and answer change it on the server and keep the answer. export function useChatEgress(chatId, tick) { diff --git a/core/http/react-ui/src/hooks/useServerChat.js b/core/http/react-ui/src/hooks/useServerChat.js index 2f298bf380..37f3f51c76 100644 --- a/core/http/react-ui/src/hooks/useServerChat.js +++ b/core/http/react-ui/src/hooks/useServerChat.js @@ -228,7 +228,7 @@ export function useServerChat({ seed = null } = {}) { }, trigger_proposed: () => setTicks(t => ({ ...t, proposals: t.proposals + 1 })), files: () => setTicks(t => ({ ...t, files: t.files + 1 })), - // The network of the chat's Sandbox commands changed: a card asked or + // The network of the chat's isolated commands changed: a card asked or // was answered, or the preset or a rule changed. The network panel and // the cards read the chat's network again. egress_consent: () => setTicks(t => ({ ...t, egress: t.egress + 1 })), diff --git a/core/http/react-ui/src/pages/Chat.jsx b/core/http/react-ui/src/pages/Chat.jsx index bd4220e685..2b91dc8ce9 100644 --- a/core/http/react-ui/src/pages/Chat.jsx +++ b/core/http/react-ui/src/pages/Chat.jsx @@ -210,7 +210,7 @@ function ChatPage() { }, []) const model = activeChat ? activeChat.model : draftModel - // The network of the chat's Sandbox commands, read again on its events. + // The network of the chat's isolated commands, read again on its events. const egress = useChatEgress(activeId, chat.ticks.egress) // The cards of the chat by their tool line; the ones that wait are drawn // under the live fold until the call ends. diff --git a/core/http/react-ui/src/utils/api.js b/core/http/react-ui/src/utils/api.js index 277946e5a8..09bd87e5bb 100644 --- a/core/http/react-ui/src/utils/api.js +++ b/core/http/react-ui/src/utils/api.js @@ -403,7 +403,7 @@ export const chatHostExecApi = { consent: (chat, id, decision) => fetchJSON(`/api/chats/${enc2(chat)}/host-exec/consent`, { method: 'POST', body: JSON.stringify({ id, decision }) }), } -// The network of a chat's Sandbox commands: its preset, rules and cards, for +// The network of a chat's isolated commands: its preset, rules and cards, for // the chat's owner; the settings and the audit, for administrators. export const chatEgressApi = { get: (chat) => fetchJSON(`/api/chats/${enc2(chat)}/egress`), diff --git a/core/http/react-ui/src/utils/chatAgents.js b/core/http/react-ui/src/utils/chatAgents.js index 6ddcd1d925..09a838df1d 100644 --- a/core/http/react-ui/src/utils/chatAgents.js +++ b/core/http/react-ui/src/utils/chatAgents.js @@ -27,7 +27,7 @@ export function agentPayload(form, opts) { description: (form.description || '').trim(), instructions: form.instructions || '', model: (form.model || '').trim(), - // The network of the Sandbox commands of the agent's unattended runs. + // The network of the isolated commands of the agent's unattended runs. network: ['off', 'registries', 'all'].includes(form.network) ? form.network : 'off', } for (const k of LIST_KEYS) body[k] = (form[k] || []).map(x => x.trim()).filter((x, i, a) => x && a.indexOf(x) === i) diff --git a/core/http/react-ui/src/utils/chatEgress.js b/core/http/react-ui/src/utils/chatEgress.js index 59e228cc16..490cbae859 100644 --- a/core/http/react-ui/src/utils/chatEgress.js +++ b/core/http/react-ui/src/utils/chatEgress.js @@ -1,4 +1,4 @@ -// The network of a chat's Sandbox commands, as the chat page shows it. Pure +// The network of a chat's isolated commands, as the chat page shows it. Pure // functions over GET /api/chats/{id}/egress, so the node unit tests cover them. export const PRESETS = ['off', 'registries', 'all'] diff --git a/core/http/react-ui/src/utils/settingsPending.js b/core/http/react-ui/src/utils/settingsPending.js index 93287d819a..831c85c375 100644 --- a/core/http/react-ui/src/utils/settingsPending.js +++ b/core/http/react-ui/src/utils/settingsPending.js @@ -132,7 +132,7 @@ export function runChecks(changes, initial, draft) { Object.entries(parsed).every(([k, v]) => ['bash', 'web_search', 'web_fetch', 'xlsx', 'docx', 'pptx', 'pdf'].includes(k) && typeof v === 'string' && /^[a-z0-9][a-z0-9-]{0,63}$/.test(v)) checks.push(ok ? { level: 'ok', text: `${field.label}: ${Object.keys(parsed).length} chosen.` } - : { level: 'error', text: `${field.label}: map bash, web_search, web_fetch or a skill (xlsx, docx, pptx, pdf) to an add-on ID, for example { "bash": "sandbox" }.` }) + : { level: 'error', text: `${field.label}: map bash, web_search, web_fetch or a skill (xlsx, docx, pptx, pdf) to an add-on ID, for example { "bash": "" }.` }) } else if (field.kind === 'json') { const text = String(to || '').trim() if (text) { @@ -219,7 +219,7 @@ export function payloadFor(changes, source) { return body } -// The phrase an administrator types to let Sandbox commands reach private +// The phrase an administrator types to let isolated commands reach private // networks (core/config/chats_egress.go), and the draft key that carries it. export const EGRESS_PRIVATE_PHRASE = 'I understand that commands can reach my private network' export const EGRESS_CONFIRM_KEY = 'chats_egress_private_confirm' diff --git a/core/http/react-ui/src/utils/settingsSchema.js b/core/http/react-ui/src/utils/settingsSchema.js index 5da1fb6a49..8016b413b2 100644 --- a/core/http/react-ui/src/utils/settingsSchema.js +++ b/core/http/react-ui/src/utils/settingsSchema.js @@ -202,11 +202,11 @@ export const FIELDS = [ default: true, fallback: true, apply: 'live' }, // ---- Tools (the Tools tab draws these two with its own controls) ---------- { key: 'chats_host_exec', group: 'tools', was: 'chats', kind: 'select', options: ['', 'off', 'ask', 'on'], label: 'Commands on this machine', - desc: 'Who gets the chats\' built-in bash, which runs commands directly on this machine with no isolation and with its network, when no Sandbox add-on serves bash: off, ask (administrators, who allow each command) or on (every user, no card). Empty is the default: off with accounts, ask without.', + desc: 'Who gets the chats\' built-in bash, which runs commands directly on this machine with no isolation and with its network, when no add-on serves bash: off, ask (administrators, who allow each command) or on (every user, no card). Empty is the default: off with accounts, ask without.', default: '', apply: 'live', custom: 'tools' }, { key: 'chats_tool_providers', group: 'tools', was: 'chats', kind: 'json', label: 'Add-ons that replace a built-in tool or skill', desc: 'When several add-ons replace one built-in tool or skill, the one that serves it: a map from the tool (bash, web_search, web_fetch) or skill (xlsx, docx, pptx, pdf) to the add-on ID. With none chosen, the first by add-on ID serves.', - placeholder: '{ "bash": "sandbox" }', apply: 'live', custom: 'tools' }, + placeholder: '{ "bash": "" }', apply: 'live', custom: 'tools' }, // The Tools tab draws the switches of the web tools on their rows. { key: 'chats_web_search', group: 'tools', was: 'chats', kind: 'bool', label: 'Web search', desc: 'Offer the chats the built-in web_search, which searches the web without a key (DuckDuckGo, then Brave Search, then Bing) or with your SearXNG instance.', @@ -242,19 +242,19 @@ export const FIELDS = [ { key: 'chats_web_ports', group: 'tools', was: 'chats', kind: 'text', label: 'Ports for web pages', emptyIsDefault: true, desc: 'The ports web_fetch may use, comma separated.', placeholder: '80,443', default: '80,443', apply: 'live' }, - // The network of the Sandbox commands (core/config/runtime_settings_registry.go; + // The network of the commands (core/config/runtime_settings_registry.go; // read at each check of the proxy, so live). The Tools tab draws the // private switch itself, with its typed phrase. emptyIsDefault: the server // stores '' (or 0) for a setting never set and reads it as the default, so // that value is not "changed" and a select or number shows the default. - { key: 'chats_egress_ceiling', group: 'tools', was: 'chats', kind: 'select', options: ['off', 'registries', 'all'], label: 'Sandbox network limit', fallback: 'off', emptyIsDefault: true, - desc: 'The widest network any chat\'s Sandbox commands may use: off, the package registries only, or every public host. A chat chooses up to this. Commands on this machine are not covered: they have the network of the server.', + { key: 'chats_egress_ceiling', group: 'tools', was: 'chats', kind: 'select', options: ['off', 'registries', 'all'], label: 'Command network limit', fallback: 'off', emptyIsDefault: true, + desc: 'The widest network any chat\'s isolated commands may use: off, the package registries only, or every public host. A chat chooses up to this. Commands on this machine are not covered: they have the network of the server.', default: 'off', apply: 'live' }, - { key: 'chats_egress_default', group: 'tools', was: 'chats', kind: 'select', options: ['off', 'registries', 'all'], label: 'Sandbox network of a new chat', fallback: 'off', emptyIsDefault: true, + { key: 'chats_egress_default', group: 'tools', was: 'chats', kind: 'select', options: ['off', 'registries', 'all'], label: 'Command network of a new chat', fallback: 'off', emptyIsDefault: true, desc: 'The network preset a new chat starts with, capped by the limit above.', default: 'off', apply: 'live' }, - { key: 'chats_egress_ports', group: 'tools', was: 'chats', kind: 'text', label: 'Sandbox network ports', emptyIsDefault: true, - desc: 'The ports Sandbox commands may reach, comma separated. 22 and 25 are always refused.', + { key: 'chats_egress_ports', group: 'tools', was: 'chats', kind: 'text', label: 'Command network ports', emptyIsDefault: true, + desc: 'The ports isolated commands may reach, comma separated. 22 and 25 are always refused.', placeholder: '80,443', default: '80,443', apply: 'live' }, { key: 'chats_egress_extra_registries', group: 'tools', was: 'chats', kind: 'text', label: 'Extra package registries', desc: 'Exact host names added to the package registries list, comma separated, for example an internal mirror. They count as registries, so they need a chat on the Package registries choice (HTTPS only). To allow a host for any request, use Always allowed hosts. No patterns.', @@ -293,9 +293,9 @@ export const FIELDS = [ desc: 'How many loop runs one user may start in a day (UTC), over all their loops. After that the loops wait for the next day.', placeholder: '200', default: 200, min: 1, max: 100000, apply: 'live' }, { key: 'chats_egress_audit_days', group: 'tools', was: 'chats', kind: 'int', label: 'Command audit retention', - desc: 'How many days the audit of the Sandbox network requests and the audit of the commands run on this machine keep a line, from 1 to 365.', + desc: 'How many days the audit of the network requests of isolated commands and the audit of the commands run on this machine keep a line, from 1 to 365.', default: 30, fallback: 30, emptyIsDefault: true, min: 1, max: 365, unit: 'days', apply: 'live' }, - { key: 'chats_egress_allow_private', group: 'tools', was: 'chats', kind: 'bool', label: 'Sandbox commands may reach private networks', + { key: 'chats_egress_allow_private', group: 'tools', was: 'chats', kind: 'bool', label: 'Isolated commands may reach private networks', desc: 'Let a host that an administrator allowed reach addresses inside your network. A preset alone never does; the metadata and server addresses stay refused.', default: false, fallback: false, apply: 'live', custom: 'tools' }, { key: 'shared_pages_enabled', group: 'agents', was: 'chats', kind: 'bool', label: 'Shared pages',