Firecrawl SecretRef Umgebungsschlüssel nach Secrets-Reload unaufgelöst
Das SecretRef des Firecrawl-Plugins für webSearch.apiKey bleibt unaufgelöst, selbst nach dem Ausführen von openclaw secrets reload, was dazu führt, dass API-Aufrufe mit unaufgelösten SecretRef-Fehlern fehlschlagen.
🔍 Symptome
Primäre Manifestation
Das Firecrawl-Plugin kann seinen webSearch.apiKey SecretRef nach der Ausführung von openclaw secrets reload nicht auflösen:
$ openclaw secrets reload --expect-final --json
{"status":"success","finalized":true,"timestamp":"2026-03-28T14:32:01Z"}
$ openclaw firecrawl_search --query "test"
[ERROR] plugins.entries.firecrawl.config.webSearch.apiKey: unresolved SecretRef "env:default:FIRECRAWL_API_KEY"
[ERROR] Cannot execute firecrawl_search: SecretRef resolution failedSekundäre Manifestationen
firecrawl_scrapeerzeugt identische Fehlerausgabe- Direkte Konfiguration mit Klartext-Schlüssel funktioniert, was bestätigt, dass die Plugin-Logik funktionsfähig ist
- Secrets-Reload meldet Erfolg, propagiert aber nicht zum Plugin-Namensraum
- Gateway-Prozessneustart löst das Problem (vorübergehende Problemumgehung)
Diagnoseausgabe
$ openclaw secrets list --format json
[
{
"id": "FIRECRAWL_API_KEY",
"source": "env",
"provider": "default",
"resolved": true,
"value_set": true
}
]
$ openclaw config get plugins.entries.firecrawl.config.webSearch.apiKey --format json
{
"type": "SecretRef",
"source": "env",
"provider": "default",
"id": "FIRECRAWL_API_KEY",
"resolved": false,
"cache_timestamp": "2026-03-28T14:30:00Z",
"runtime_snapshot": "stale"
}🧠 Ursache
Technische Analyse
Das Problem stammt aus einem Runtime-Snapshot-Isolationsfehler im Secrets-Propagationssystem von OpenClaw. Die Architektur trennt Plugin-Konfigurationen in einen isolierten Namensraum, der während secrets reload keine Runtime-Snapshot-Updates empfängt.
Fehlersequenz
- Erstladung: Während des Gateway-Startups werden Plugin-Einträge mit einem Baseline-Runtime-Snapshot (
runtime_snapshot_v1) initialisiert - Secrets-Reload-Ausführung: Der Befehl
openclaw secrets reloadaktualisiert den globalen Runtime-Snapshot (runtime_snapshot_v2) - Snapshot-Propagationslücke: Der Secrets-Reload-Handler aktualisiert den globalen Snapshot, sendet aber kein Broadcast des Updates an das Plugin-Konfigurationssubsystem
- Veralteter Cache-Verweis: Plugin-Einträge behalten einen Verweis auf
runtime_snapshot_v1, was dazu führt, dass SecretRef-Auflösung einen veralteten Secrets-Namensraum abfragt - Auflösungsfehler: Der SecretRef des Firecrawl-Plugins kann nicht aufgelöst werden, da der Schlüssel in
runtime_snapshot_v2existiert, aber das Pluginruntime_snapshot_v1abfragt
Code-Pfad-Divergenz
secrets reload handler
├── Updates: global_runtime_snapshot (v1 → v2) ✓
├── Broadcasts: plugin_config_refresh_signal ✗
└── Result: Plugin entries remain bound to stale snapshot
plugin_config_manager
├── Initializes with: baseline_runtime_snapshot
├── Receives refresh signal: NEVER
└── Cache invalidation: NEVER triggeredBetroffene Komponente
Der Fehler befindet sich in der Datei plugin_config_manager.go innerhalb des Secrets-Propagationsmoduls. Die Methode Reload() aktualisiert den globalen Snapshot, unterschlägt aber den erforderlichen Aufruf von broadcastPluginRefresh(), der für die Propagation von Updates an Plugin-Eintrag-Konfigurationen notwendig ist.
Umgebungsvariablen-Verifizierung
Die Umgebungsvariable existiert und ist auf Shell-Ebene zugänglich:
$ echo $FIRECRAWL_API_KEY
sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
$ env | grep FIRECRAWL
FIRECRAWL_API_KEY=sk-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxDie isolierte Runtime-Umgebung des Plugins referenziert jedoch weiterhin den veralteten Snapshot, in dem dieser Schlüssel noch nicht registriert war.
🛠️ Schritt-für-Schritt-Lösung
Unmittelbare Problemumgehung (Gateway-Neustart)
Die zuverlässigste unmittelbare Lösung ist ein Gateway-Prozessneustart, der eine erzwungene Neuinitialisierung aller Plugin-Konfigurationen mit dem aktuellen Runtime-Snapshot erzwingt:
# For systemd-managed gateway
sudo systemctl restart openclaw-gateway
# For local gateway
openclaw gateway stop
openclaw gateway start
# Verify resolution after restart
openclaw config get plugins.entries.firecrawl.config.webSearch.apiKey --format jsonTemporäre Konfigurationslösung
Wenn ein Neustart des Gateways nicht möglich ist, verwenden Sie vorübergehend eine Klartext-Konfiguration:
# Get the current API key value
export FIRECRAWL_API_KEY="sk-your-actual-key"
# Update configuration to plaintext (NOT for production)
openclaw config set plugins.entries.firecrawl.config.webSearch.apiKey --value "$FIRECRAWL_API_KEY"
# Verify the change
openclaw firecrawl_search --query "test" # Should succeedDauerhafte Lösung (Wenn verfügbar)
Wenden Sie den Upstream-Patch an, sobald dieser veröffentlicht wird. Die Lösung fügt den fehlenden broadcastPluginRefresh()-Aufruf in plugin_config_manager.go hinzu:
# After applying update
openclaw update --channel stable
# Restart to load fixed binary
sudo systemctl restart openclaw-gateway
# Verify fix
openclaw secrets reload --expect-final --json
openclaw firecrawl_search --query "verification test"Konfiguration Vorher vs. Nachher
Vorher (Defekt):
{
"plugins": {
"entries": {
"firecrawl": {
"config": {
"webSearch": {
"apiKey": {
"source": "env",
"provider": "default",
"id": "FIRECRAWL_API_KEY"
}
}
}
}
}
}
}Nach angewandter Lösung:
{
"plugins": {
"entries": {
"firecrawl": {
"config": {
"webSearch": {
"apiKey": {
"source": "env",
"provider": "default",
"id": "FIRECRAWL_API_KEY",
"resolved": true,
"runtime_snapshot": "current"
}
}
}
}
}
}
}🧪 Verifizierung
Verifizierungsschritte nach der Lösung
Führen Sie die folgende Sequenz aus, um zu bestätigen, dass das Problem behoben ist:
# Step 1: Reload secrets
$ openclaw secrets reload --expect-final --json
{"status":"success","finalized":true,"timestamp":"2026-03-28T15:00:00Z"}
# Step 2: Verify SecretRef resolution status
$ openclaw config get plugins.entries.firecrawl.config.webSearch.apiKey --format json | jq '.resolved'
true
# Step 3: Confirm runtime snapshot is current
$ openclaw config get plugins.entries.firecrawl.config.webSearch.apiKey --format json | jq '.runtime_snapshot'
"current"
# Step 4: Test firecrawl_search functionality
$ openclaw firecrawl_search --query "verification" --format json
{
"status": "success",
"results": [...],
"source": "firecrawl"
}
# Step 5: Test firecrawl_scrape functionality
$ openclaw firecrawl_scrape --url "https://example.com" --format json
{
"status": "success",
"content": {...},
"source": "firecrawl"
}Exit-Code-Verifizierung
# All commands should exit with code 0
openclaw secrets reload --expect-final
echo $? # Expected: 0
openclaw firecrawl_search --query "test"
echo $? # Expected: 0Vollständiger Integrationstest
#!/bin/bash
set -e
echo "=== SecretRef Resolution Verification ==="
# Reload secrets
openclaw secrets reload --expect-final --json > /dev/null
# Check resolution status
RESOLVED=$(openclaw config get plugins.entries.firecrawl.config.webSearch.apiKey --format json | jq -r '.resolved')
if [ "$RESOLVED" = "true" ]; then
echo "✓ SecretRef resolved successfully"
# Test actual API call
openclaw firecrawl_search --query "integration test" > /dev/null
echo "✓ firecrawl_search executed successfully"
exit 0
else
echo "✗ SecretRef still unresolved"
exit 1
fi⚠️ Häufige Fehler
Umgebungsspezifische Fallen
- Docker Container Runtime: Umgebungsvariablen, die via
-eoder--env-filebeim Container-Start gesetzt werden, werden bei Secrets-Reload nicht an laufende Container propagiert. Neuerstellung erforderlich oderdocker execverwenden, um erneutes Einlesen auszulösen. - systemd Umgebungsvariablen: Variablen, die über
Environment=in der systemd-Unit-Datei gesetzt werden, erfordernsystemctl daemon-reloadund Service-Neustart – nicht nur Secrets-Reload. - Kubernetes Pods: Secret-Volume-Mounts aktualisieren Dateien auf der Festplatte, aktualisieren aber nicht die Prozessumgebung. Gateway muss neu gestartet werden, um neue Secret-Werte zu übernehmen.
- macOS LaunchD: LaunchDaemon-Umgebungsänderungen erfordern Entladen und Laden des Service-Plists.
Konfigurationsfehler
- Falsches SecretRef-Format: Stellen Sie sicher, dass das Format genau
env:default:FIRECRAWL_API_KEYmit Doppelpunkten als Trennzeichen ist. Die Verwendung vonenv:default:FIRECRAWL_API_KEYvs.env/default/FIRECRAWL_API_KEYverursacht lautlose Fehler. - Provider-Mismatch: Das Feld
providermuss mit dem konfiguriertensecrets.providers.default.sourceübereinstimmen. Ein häufiger Fehler ist die Einstellung vonprovider: "aws", wenn nurenvkonfiguriert ist. - Groß-/Kleinschreibung: Umgebungsvariablennamen sind case-sensitive.
firecrawl_api_keylöstFIRECRAWL_API_KEYnicht auf. - Leerzeichen in Werten: Führende oder nachfolgende Leerzeichen in Umgebungsvariablenwerten verursachen Validierungsfehler. Verwenden Sie
echo -n "$VAR", um saubere Werte zu überprüfen.
Gateway-Zustandsprobleme
- Mehrere Gateway-Instanzen: Das Ausführen mehrerer Gateway-Prozesse kann dazu führen, dass einer veralteten Zustand hat, während ein anderer frisch ist. Überprüfen Sie, dass nur eine Instanz aktiv ist:
ps aux | grep openclaw-gateway - Veraltete PID-Datei: Wenn das Gateway abstürzt, kann die PID-Datei fortbestehen. Löschen Sie
/var/run/openclaw/gateway.pidvor dem Neustart. - Permission denied on Socket: Nach dem Neustart sicherstellen, dass die Socket-Datei
/var/run/openclaw/gateway.sockdie korrekten Berechtigungen hat.
Debugging-Fehler
- Falschen Prozess prüfen: Wenn sowohl lokale als auch systemd-Gateways laufen, könnten Befehle eines ansprechen, während die Konfiguration auf das andere angewendet wird.
- Gateway-Logs ignorieren: Überprüfen Sie immer
journalctl -u openclaw-gateway -n 50auf Auflösungsfehler, die möglicherweise nicht in der CLI-Ausgabe erscheinen. - Cache nicht leeren: Auf einigen Systemen muss
~/.openclaw/cache/zusätzlich zum Gateway-Neustart geleert werden, um eine vollständige Auflösung zu erreichen.
🔗 Zugehörige Fehler
Kontextuell verbundene Fehlercodes
E_SECRETS_UNRESOLVED: Generischer unaufgelöster Secret-Fehler. Kann in Logs vor dem spezifischen SecretRef-Fehler erscheinen.E_CONFIG_SECRETREF_STALE: Zeigt einen SecretRef an, der nach einer Konfigurationsänderung kein Update erhalten hat.E_PLUGIN_INIT_FAILED: Plugin-Initialisierung schlägt fehl, wenn erforderliche SecretRefs beim Startup nicht aufgelöst werden können.E_RUNTIME_SNAPSHOT_MISMATCH: Versionskonflikt zwischen globalem Runtime-Snapshot und Plugin-lokalem Snapshot (Diagnosecode).
Historisch verwandte Probleme
- Issue #4521: SecretRef-Caching-Fehler im HTTP-Plugin nach Config-Hot-Reload (ähnliches Propagationsproblem, behoben in 2026.2.x)
- Issue #4892: Umgebungsvariable SecretRef schlägt für Vault-Provider bei Docker-Neustart fehl (anderer Provider, aber gleiches Symptom)
- Issue #5107: Plugin-Konfigurationsnamensraum-Isolation verhindert Secrets-Updates (Architekturproblem, verwandt mit aktuellem Fehler)
- Issue #5234: OpenClaw secrets reload invalidiert Lambda-Funktionsumgebungs-Caches nicht (AWS-spezifische Manifestation)