Translate-Skill: POST /vault/translate liefert 401, sobald ein Remote-Token in der Keychain existiert #115
Labels
No labels
herkunft/alpha-feedback
status
blockiert
status
zu-testen
typ
bug
typ
docs
typ
enhancement
typ
feature
typ
idea
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
iris/Iris#115
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Symptom
Die Übersetzung des translate-Skills (
plugins/translate,translate_document.py) schlägt auf dem Mac beim ersten Chunk fehl:Worker-Log (
/tmp/translate-worker-20718.log, 2026-10-20 11:57, Job CF41E32E-BCFD-464F-80CC-2D5054EE934A):Live reproduzierbar gegen den laufenden Mac-Server (alle ohne Authorization-Header):
GET /healthPOST /vault/translatePOST /notify(ungültige Felder)Ursache
iris_notify_config.json(nur der Linux-Server schreibt sie,hermes_config_writer.ensure_iris_notify_config(), mit dem aktuellen Bearer-Token)._resolve_iris_target()intranslate_document.pyfällt dort auf127.0.0.1:8765mit leerem Token zurück und sendet deshalb gar keinen Authorization-Header — so auch in der SKILL.md als Designannahme dokumentiert („leer auf dem Mac, dort gelten 127.0.0.1/kein Token“).IrisRemoteServer.swift(isAuthorized()) verlangt für jede Route ein Bearer-Token, außer die Route steht auf der localhost-Ausnahmeliste (isLocalhostNotify):POST /notify,/job-watch/start,/videowatch/playlist,/job-callback/register|unregister,/agent,/client/push-file,GET /agent/:id/status,GET /job-callback/pending,GET /hosts/resolveplus die Pfad-Token-Ausnahmen (htmlserver, hermes-dashboard, pairing-CA, plugin-cfg_token, Marktplatz).POST /vault/translatesteht nicht auf dieser Liste → 401.isAuthorized()lässt ohne gecachtes Token alles zu). Sobald ein Remote-Token existiert (Client-Pairing/Regeneration), bricht der Skill still — der UI-„Übersetzen“-Button im Vault-Editor ist davon nicht betroffen, er läuft in-process ohne HTTP.iris_notify_config.json, dieserverbei jedem Start auf den aktuellen Bearer-Token bringt.Lösung
POST /vault/translateinIrisRemoteServer.swiftin die localhost-Ausnahmeliste (isLocalhostNotify) aufnehmen — exakt das bestehende Muster vonPOST /notify: Skill-Subprozesse derselben Maschine können das Bearer-Token nicht aus der Keychain lesen (löste Entsperr-Dialoge aus), die Autorisierung übernimmt die Loopback-Herkunft der Verbindung.127.0.0.1/::1(isLocalhostConnection), LAN-/Remote-Verbindungen bleiben bearer-pflichtig.POST /agentstartet komplette Agent-Jobs und ist strikt mächtiger als eine einzelne Übersetzungs-Completion.Verifikation nach dem Fix
curl -sk -X POST https://127.0.0.1:8765/vault/translate -d '{"text":"Hallo","target_language":"en"}'ohne Token → kein 401 mehr.neural4d-tutorial_de.md.translate-state.json, Statusfailed) bei Chunk 1/6 fort und liefert das Ergebnis im Chat.PR #146 gemergt: fix(remote): POST /vault/translate gehört zu den localhost-Ausnahmen, der translate-Skill liefert auf dem Mac kein 401 mehr (iris/Iris#115)
#146
Commits:
PR #102 gemergt: docs(wire): POST /vault/translate in den localhost-Ausnahmen des Mac-Servers (iris/Iris#115)
alf/2ndbrain#102
Commits:
Umgesetzt (PR #146, Wire-Doku PR #102 im Wurzel-Repo)
POST /vault/translatesteht jetzt in der localhost-Ausnahmeliste des Mac-Servers (isLocalhostNotify), nur für Verbindungen von 127.0.0.1/::1. LAN- und Remote-Verbindungen bleiben bearer-pflichtig, der Linux-Server ist unverändert.Geprüft: Die Änderung ist eine Zeile in der Ausnahmeliste; nicht gebaut und nicht gelaufen. Zum Prüfen: Iris neu bauen und starten, dann
curl -sk -X POST https://127.0.0.1:8765/vault/translate -d '{"text":"Hallo","target_language":"en"}'ohne Token (kein 401 mehr) und die Übersetzung erneut anstoßen.