# GUI Bridge Contract (`sdt bridge --stdio`) The GUI uses a hybrid bridge: - execution: `sdt run/debug --json` (streamed) - read/manage: `sdt bridge --stdio` JSON-RPC over stdio ## Envelope Request (one JSON object per line): ```json { "id": "req-1", "method": "workspace.get", "params": { "projectRoot": "E:\\repo" } } ``` Response: ```json { "id": "req-1", "ok": true, "result": { "...": "..." }, "error": null } ``` Error response: ```json { "id": "req-1", "ok": false, "result": null, "error": { "code": "validation_failed", "message": "Missing required parameter 'filePath'." } } ``` ## Methods (v1) - `workspace.get` - `workspace.add` (`candidatePath`, `initializeConfig`) - `favorites.list` - `favorites.toggle` (`favoriteProjectPath`, `workflowId`, `label`) - `history.list` (`limit`) - `events.listFiles` - `events.readFile` (`filePath`) - `envProfiles.list` - `envProfiles.resolve` (`envProfile`) - `doctor.run` - `setup.plan` (read-only preview) ## Determinism Notes - Responses are always single-envelope JSON. - Unknown methods return `method_not_found`. - Parameter issues return `validation_failed`. - GUI should tolerate additive fields in `result`.