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 5. Oktober 2026
Auf dieser Seite
Der Implementierungs-Stack
HB Code hat vier Anwendungsgrenzen und zwei Agent-Prozessgrenzen. 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 beide Agent-Prozesse: den Codex-app-server-Kindprozess und den Claude-Agent-Host, einen Node-Prozess, der das Claude Agent SDK ausführt. Eine Session wählt ihren Agenten, wenn sie erstellt wird, und behält ihn. 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-Laufzeitchat · agents · 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.
- Claude-Agent-Hostdesktop/agent-host
Ein Node-Prozess, der das Claude Agent SDK ausführt, das wiederum die claude-Programmdatei startet. Die Laufzeit startet einen Host pro Run und Einmal-Hosts für Lesevorgänge, daher überlebt kein Claude-Prozess seine Arbeit.
- 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 lehnt das Ersetzen einer gesendeten Nachricht oder einen Geschwindigkeitsmodus in einer Claude-Session ab. 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. Der Dienst lehnt auch ab, was der Agent der Session nicht kann: das Ersetzen einer gesendeten Nachricht oder einen Geschwindigkeitsmodus in einer Claude-Session. Die gespeicherte Nachricht nennt keinen Agent-Prozess. Ein Drain-Task übergibt sie später an agents/dispatch, das den Turn im Codex-app-server-Kindprozess oder in einem neuen Claude-Agent-Host startet. Ü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
HB Code 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/ | React-Workspace-Komposition, Timeline-Zustand, Viewport-Ownership und Outbox-Anzeige. |
| desktop/ | Tauri-Einstiegspunkte und Desktop-Domänenoperationen. |
| desktop/ | Die gemeinsame Chat-Schicht: Outbox, Operation-Ledger, Run-Registry, Live-Timeline-Overlay, Darstellungszeilen und die Tauri-Einstiegspunkte des Chats. Sie importiert nie einen Agent-Adapter. |
| desktop/ | Der Codex-Adapter: app-server-Kindprozess, Auth-Profile, Turns, Verlauf über thread/ |
| desktop/ | Der Claude-Adapter: Run-Schleife, Projektion in die gemeinsamen Zeilen, Verlauf, Subagents, Berechtigungen, Konten und die Laufzeit des Agent-Hosts. |
| desktop/ | Der Code, der den Adapter einer Session auswählt. Die Chat-Schicht erreicht einen Adapter nur über dieses Modul. |
| desktop/ | Gespeicherte Plan-Limit-Messwerte beider Agenten. Es liest beide Adapter direkt, weil es beide Kontoarten liest. |
| desktop/ | Der HB-Code-Tool-Katalog, den beide Agenten bekommen, und die Tool-Handler. |
| desktop/ | Der Node-Agent-Host in Type |
| desktop/ | RPC-Typen, Validierung, Idempotenz, Dispatch und Remote-Methodenadapter. |
| server/ | Web |
| mobile/ | i |
| mobile/ | i |
| mobile/ | Android-Einstiegs-Routing, Workspace-Tabs, Relay-Client und Compose-Bildschirme. |