Prozessgrenzen
Welcher Prozess welchen Teil ausführt, wie Aufrufe die Grenzen überqueren, wie Sessions zu Worktrees und Threads stehen, und wo Sie mit dem Lesen des Quellcodes beginnen.
Gegen den Quellcode geprüft am 17. September 2026
Auf dieser Seite
Der Implementierungs-Stack
PlanToCode hat vier Anwendungsgrenzen und eine Agent-Prozessgrenze. Das Desktop-Frontend ist React und TypeScript in einer Tauri-2-WebView. Sein Rust-Backend besitzt lokale Commands, den SQLite-Produktzustand, den entfernten RPC-Router und den Codex-Kindprozess. Der Server ist Rust mit Actix Web, Tokio, SQLx für PostgreSQL und Redis-Integration. Die iOS-Begleit-App verwendet Swift und SwiftUI, mit UIKit für ihre Chat-Collection-View, und die Android-Begleit-App verwendet Kotlin und Jetpack Compose. Beide Telefone sprechen denselben RPC-Vertrag mit dem Desktop.
- Rust-Laufzeitcommands · remote_api
Bedient die Befehle der WebView und die RPC-Anfragen der Telefone mit denselben Domänendiensten. Sie besitzt appdata.db und liest Projektdateien und Git selbst.
- Codex app-server--listen stdio://
Ein Kindprozess pro Profilpaar, und höchstens drei bleiben aktiv, außer alle sind beschäftigt. Die Laufzeit liest seinen Verlauf über die Pipe mit thread/items/list, nie aus seinen Dateien.
- Regionaler Server/ws/device-link
Läuft in den USA oder der EU und reicht Nachrichten zwischen dem Socket, den der Desktop geöffnet hat, und dem Socket jedes Telefons weiter. Er speichert Konten, Gerätezeilen und Präsenz, nie Projektdateien oder Transkripte.
Eine mobile Anfrage bis zur Ausführung nachverfolgen
- Relayrequest_validation.rs
Prüft den Methodennamen und den Idempotenzschlüssel und überlässt die Parameter dem Desktop, außer bei session.syncHistoryState. Ist der Desktop offline oder verbindet er sich neu, antwortet das Relay selbst mit -32010 oder -32011.
- RPC-Annahmesnapshot_and_rpc.rs · router
Läuft für jede Telefonanfrage: 8 leichte und 2 schwere Plätze, dann der Kontoabgleich. Eine Mutation nimmt einen dauerhaften Idempotenzanspruch, und der Adapter dekodiert die Parameter in einen Anfragetyp, der unbekannte Felder ablehnt.
- Tauri-Befehlcapabilities/default.json
Erlaubt dem Hauptfenster und den Session-Fenstern, Workspace-Befehle aufzurufen. Tauri dekodiert die Argumente in denselben Anfragetyp, daher scheitern unbekannte Felder auch hier.
- Outbox-Dienstsubmit_outbox_request
Beide Wege rufen ihn auf, daher gelten seine Regeln für jeden Aufrufer, und eine wiederholte operationId legt nie eine zweite Nachricht an. Er speichert die Nachricht und gibt die Quittung zurück, und ein Drain-Task startet den Turn später.
Belassen Sie Geschäftsregeln im Domänendienst, wo sich beide Wege treffen. Übereinstimmende UI-Bedienelemente sind keine Autorisierungsprüfung. Das Relay antwortet außerdem mit -32012, wenn ein Desktop eine Anfrage nicht vor dem Timeout des Relays abschließt, und das Relay-Kapitel listet seine Codes und Timer.
Projekte, Worktrees und Sessions
- Worktreegit worktree list
PlanToCode listet die vorhandenen Worktrees auf und legt nie einen an. Eine Session entsteht in einem davon, und der Desktop lehnt ein projectDirectory ab, das kein Worktree des Projekts ist.
- Subagent-ThreadactiveRun: null
Vom Agenten während eines Turns der Eltern-Session gestartet, in deren Worktree. Er hat eine eigene Timeline und ein eigenes Live-Overlay, und nur die Eltern-Session meldet den aktiven Run.
- GeräteauswahlappSessionId
Jedes Gerät wählt Projekt, Worktree und Session selbst, daher können zwei Geräte dieselbe Session oder verschiedene zeigen. Ein Subagent-Thread wird über seine Session geöffnet.
Ein Projekt ist ein Git-Repository, gruppiert unter seinem Haupt-Worktree. Ein Ordner ohne Git ist ein Projekt, dessen einziger Arbeitsbereich der Ordner selbst ist.
Im Quellcode-Baum navigieren
| Pfad vom Repository-Stammverzeichnis | Beginnen Sie hier für |
|---|---|
| desktop/src/app/components/workspace-chat/ | React-Workspace-Komposition, Timeline-Zustand, Viewport-Ownership und Outbox-Anzeige. |
| desktop/src-tauri/src/commands/ | Tauri-Einstiegspunkte und Desktop-Domänenoperationen. |
| desktop/src-tauri/src/services/codex_app_server/ | Kindprozess-Transport, Client-Akteure, Turn-Zulassung und Registry-Ownership. |
| desktop/src-tauri/src/remote_api/ | RPC-Typen, Validierung, Idempotenz, Dispatch und Remote-Methodenadapter. |
| server/src/services/device_link_ws/ | WebSocket-Registrierung, Anforderungsvalidierung, Weiterleitung und Verbindungslebenszyklus. |
| mobile/ios/Core/Sources/Core/Connectivity/Relay/ | iOS-Relay-Verbindung und Methodenvertrag. |
| mobile/ios/VibeUI/Sources/VibeUI/Features/Workspace/Chat/ | iOS-Chat-Ownership, Timeline-Reconciliation und Collection-Rendering. |
| mobile/android/app/src/main/java/com/plantocode/mobile/ | Android-Einstiegs-Routing, Workspace-Tabs, Relay-Client und Compose-Bildschirme. |