From 457a311db29e595e2be9806c3a6dde095f795e6b Mon Sep 17 00:00:00 2001 From: Mikei386 <44135113+Mikei386@users.noreply.github.com> Date: Mon, 24 Aug 2026 15:18:07 +0200 Subject: [PATCH] feat: default task dependencies to temporary --- config/operator-system-prompt.txt | 8 ++++++++ dev/test_openwebui_filters.py | 2 ++ docs/CLIENT_TOOL_STANDARD.md | 15 +++++++++++++++ docs/CURRENT_REFERENCE.md | 4 ++-- platform/openwebui/filters/auto_tool_selector.py | 11 +++++++++-- 5 files changed, 36 insertions(+), 4 deletions(-) diff --git a/config/operator-system-prompt.txt b/config/operator-system-prompt.txt index 79d227e..d6ee755 100644 --- a/config/operator-system-prompt.txt +++ b/config/operator-system-prompt.txt @@ -52,6 +52,14 @@ still requires current-state inspection, bounded output, verification, versioned source and recovery documentation. Preserve unrelated user changes and dirty worktrees. +Treat dependencies as transient by default. If the user asks to use, run, test +or try a program, first use an existing executable. If it is unavailable, +obtain only a task-local copy under `/tmp` or the tool's temporary workspace, +use it for the current request, verify the result and remove it afterwards. +Install packages, services, containers or configuration persistently only when +the current request explicitly asks to install, set up or keep them permanently. +When persistence intent is ambiguous, choose the transient path and report it. + For GitHub implementation details, README files, source trees, API routes and code search, use the official read-only GitHub Repository MCP. Use general web search for broader public research. Avoid repeated synonymous tool calls and diff --git a/dev/test_openwebui_filters.py b/dev/test_openwebui_filters.py index 43bbd61..6a7f64f 100644 --- a/dev/test_openwebui_filters.py +++ b/dev/test_openwebui_filters.py @@ -307,6 +307,8 @@ class AutoToolSelectorTests(unittest.IsolatedAsyncioTestCase): self.assertIn("direct MUA management or shell tool", result["messages"][0]["content"]) self.assertIn("Do not ask the user to enable another tool", result["messages"][0]["content"]) self.assertIn("start-status-result pattern", result["messages"][0]["content"]) + self.assertIn("transient-by-default dependency handling", result["messages"][0]["content"]) + self.assertIn("task-local copy under /tmp", result["messages"][0]["content"]) self.assertTrue(result["metadata"]["mikeai_long_operator_task"]) async def test_generic_remote_host_file_operation_gets_operator(self): diff --git a/docs/CLIENT_TOOL_STANDARD.md b/docs/CLIENT_TOOL_STANDARD.md index 161e6fd..d7f6c59 100644 --- a/docs/CLIENT_TOOL_STANDARD.md +++ b/docs/CLIENT_TOOL_STANDARD.md @@ -54,6 +54,21 @@ ein höheres, aber weiterhin endliches Ausführungsbudget: 64 Aufrufe insgesamt und 24 je Werkzeug. Normale Recherche bleibt bei 40 beziehungsweise 12. Das ist keine Sonderregel für YouTube, ffmpeg, MUA oder einen bestimmten Server. +## Lebensdauer von Hilfsprogrammen + +Die Absicht des Benutzers bestimmt die Lebensdauer einer Abhängigkeit: + +- **nutzen, ausführen, testen, ausprobieren:** zuerst ein vorhandenes Programm + verwenden; fehlt es, nur eine auftragsbezogene Kopie unter `/tmp` oder im + temporären Arbeitsbereich ablegen und nach der Verifikation entfernen; +- **installieren, einrichten, dauerhaft bereitstellen:** reproduzierbar und + persistent über die versionierte Plattformkonfiguration installieren; +- **unklare Formulierung:** flüchtig bleiben und im Ergebnis offen angeben, + was temporär verwendet wurde. + +Diese Regel gilt für alle Clients und Zielsysteme. Sie ist nicht auf FFmpeg, +Downloads oder Unraid beschränkt. + ## Community-Bezug Das folgt dem MCP-Modell: Ein Client verbindet einen vertrauenswürdigen diff --git a/docs/CURRENT_REFERENCE.md b/docs/CURRENT_REFERENCE.md index 504a09d..83d012a 100644 --- a/docs/CURRENT_REFERENCE.md +++ b/docs/CURRENT_REFERENCE.md @@ -205,7 +205,7 @@ ein Download, Transcode oder vergleichbarer Auftrag weder Open WebUI noch Hermes oder Pi bis zum Prozessende. Die drei Werkzeuge erben dieselbe ausdrücklich erteilte Berechtigung wie die uneingeschränkte Shell. -Auto Tool Selector 4.5 kennzeichnet allgemeine lange Operator-Aufgaben +Auto Tool Selector 4.6 kennzeichnet allgemeine lange Operator-Aufgaben produktunabhängig. Der OpenWebUI-Agentenloop stellt dafür bis zu 64 Werkzeugausführungen insgesamt und 24 je Werkzeug bereit; normale Aufgaben bleiben bei 40/12. Zusätzlich verlangt der Systemhinweis das generische @@ -254,7 +254,7 @@ Angebote und sortierte Notebook, Zubehör sowie ein Ersatzteilgerät aus. Das belegt sowohl die technische Grenze als auch eine brauchbare Synthese; ein eBay-spezifischer MCP war nicht erforderlich. -Auto Tool Selector 4.5 erkennt zusätzlich allgemeine operative Arbeit über +Auto Tool Selector 4.6 erkennt zusätzlich allgemeine operative Arbeit über Fähigkeitsklassen: Eine ausdrückliche Ausführungs- oder Änderungsabsicht in Verbindung mit Host, Dateisystem, Kommando, Dienst, Pfad oder typischen Kommandozeilenwerkzeugen stellt den Athena Operator bereit. Dadurch benötigen diff --git a/platform/openwebui/filters/auto_tool_selector.py b/platform/openwebui/filters/auto_tool_selector.py index 0e4f797..b957935 100644 --- a/platform/openwebui/filters/auto_tool_selector.py +++ b/platform/openwebui/filters/auto_tool_selector.py @@ -1,7 +1,7 @@ """ title: MikeAI Auto Tool Selector author: MikeAI -version: 4.5.0 +version: 4.6.0 description: Keeps broad web access available and adds relevant portable MCP domains without acting as a gate. """ @@ -169,7 +169,14 @@ class Filter: "A missing, disabled or failed specialist tool is not evidence that a service " "does not exist. Use an available broad capability such as native web search or " "the Athena Operator terminal when it can answer the unresolved question. Never " - "duplicate an existing backend; integrate or relay it and report any remaining gap." + "duplicate an existing backend; integrate or relay it and report any remaining gap. " + "Apply transient-by-default dependency handling: when the user asks to use, run, " + "test or try a program, first use an existing executable; if it is missing, obtain " + "only a task-local copy under /tmp (or the target tool's temporary workspace), use " + "it for this request and remove it after verification. Persist packages, services, " + "containers or configuration only when the current request explicitly says install, " + "set up, configure permanently or otherwise clearly requests persistence. If the " + "wording is ambiguous, keep the dependency transient and state what was done." ) if "unraid" in selected and "unraid_admin" in selected and "operator" in selected: rule += (