Mac-Server: Endpunkt "Claude Code im Terminal öffnen" (für Plugin iris-claude-sessions) #132
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#132
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?
Zweck
Das geplante Plugin
iris-claude-sessions(iris/iris-plugins#167) zeigt Claude-Code-Sessions als Canvas. Ein Klick (kommt als Chatnachricht beim Agenten an, der dann das Plugin-Skript ruft) soll ein Terminal mit Claude Code im Agent-LLM der App öffnen und eine Session fortsetzen oder neu starten.Befund
Die Logik "Claude Code mit aktuellem Agent-LLM starten" steckt in der App:
CompanionManager.openAgentInTerminalWithCurrentAgentLLM(agentType:workingDirectoryOverride:)(Session-Proxy, Backend-Variablen, Modell,CLAUDE_CODE_DISABLE_AGENT_VIEW=1seit #130). Ein Plugin-Skript hat keinen Zugang dazu und darf sie nicht nachbauen (doppelte Backend-Logik).Umfang
Neuer Endpunkt im Mac-Server (
IrisRemoteServer.swift): Claude Code im Terminal öffnen, mitcwd(Pflicht, sonst SettingclaudeCodeProjectDirectory),session_id(optional:--resume <id>; ohne = neue Session),name(optional:--name, damit/resumeden Namen zeigt).Ruft dieselbe Funktion wie die Header-Buttons;
buildClaudeCodeTerminalScriptbekommt dafür optionale Parameter für--resumeund--name. Nur Mac, nur Claude Code.Zu klären
/notifyund/agent; kein Keychain-Zugriff.iris_min_versionder App-Version mit dem Endpunkt.~/.claude/sessions/<pid>.json), lehnt der Endpunkt ab oder meldet es; das prüft das Plugin vorher, der Endpunkt sollte es nicht still zulassen (eine Session = ein Prozess).Tests
Von Hand: Klick-Start öffnet Terminal.app mit richtigem Backend, Verzeichnis und
--resume. Unit-Test für die Skript-Zeile (--resume,--name, Quoting von Pfad und Name).PR #133 gemergt: feat(companion): POST /claude-code/terminal öffnet Claude Code im Terminal, optional mit --resume und --name; cwd im Terminal-Skript gequotet (#132)
#133
Commits:
PR #133
Geändert:
POST /claude-code/terminalim Mac-Server (IrisRemoteServer.swift,handleClaudeCodeTerminal). Body:cwd(optional, muss ein existierendes Verzeichnis sein),session_id(optional, nur UUID, wird zu--resume),name(optional, max. 100 Zeichen, keine Steuerzeichen, wird zu--name). RuftCompanionManager.openAgentInTerminalWithCurrentAgentLLMmit neuen optionalen ParameternresumeSessionIDundsessionName; dieselbe Backend-Logik wie die Header-Buttons.Auth (war offen): wie
/notifyund/agentnur von dieser Maschine ohne Bearer (isLocalhostNotify). Kein Keychain-Zugriff durch das Plugin.Zusätzlich: Im Terminal-Skript wird das Arbeitsverzeichnis jetzt gequotet (
cd '…'), vorher ungequotet; mit Werten aus einer Anfrage wäre das eine Einschleusungsstelle, und Pfade mit Leerzeichen gingen schon vorher nicht.--resume/--namesind ebenfalls gequotet.Geprüft: Xcode-Build von
Iris.xcodeproj(Dokument per Name) erfolgreich. Es gibt kein Swift-Testtarget; kein Laufzeittest, die laufende Iris ist noch der alte Stand.Grenzen/offen: Laufzeittest nach Neubau (Aufruf per curl, Terminal öffnet mit Backend, Verzeichnis,
--resume). FallweiseclaudeCommandWithoutProxy(Proxy-Start schlägt fehl) liefert nur das Kommando ohne--resume/--name, bestehendes Verhalten, nicht angefasst. Wire-Doku (02-Wire-Protokoll.md, Auth-freie Routen) wird nachgezogen. Version füriris_min_versiondes Plugins steht mit dem nächsten Release fest.PR #97 gemergt: docs(wire): POST /claude-code/terminal in den auth-freien Routen (iris/Iris#132)
alf/2ndbrain#97
Commits:
Abgeschlossen
Endpunkt
POST /claude-code/terminalgemergt (PR #133, Wire-Doku PR #97). „Fortsetzen“ und „Neu anlegen“ aus dem Canvas von iris-claude-sessions funktionieren in der echten App.Geschlossen auf Alfs ausdrückliches Wort (2026-10-21).