--- id: DIS-106 status: backlog phase: 1 priority: p1 labels: [phase:1, type:refactor, priority:p1] branch: phase-1/runner-api-runresult assignee: null started: null pr: null merged: null --- # DIS-106: Runner-API-Refactoring → `RunResult`-Typ ## Ziel `runner.ts` gibt einen typsicheren `RunResult`-Typ zurück statt rohem JSON/String. Ermöglicht saubere Fehlerunterscheidung (Timeout, CLI-Error, Parse-Error, Success). ## Kontext → `docs/development-plan.md` §2 (Runner-Refactoring), Phase 1 Task 6. ## Scope - **In**: `src/agent/types.ts` mit `RunResult` (discriminated union: `success | timeout | cli-error | parse-error`) · `runner.ts` gibt `RunResult` zurück · `router.ts` und alle Aufrufer nutzen den Typ - **Out**: Streaming-Variante (Phase 5) ## Definition of Done - [ ] `RunResult` ist ein discriminated union, kein `any` - [ ] Alle Aufrufer handhaben alle vier Cases explizit (TypeScript enforcement) - [ ] Unit-Test `tests/unit/runner-result.test.ts` mit Mock-Spawn für jeden Case - [ ] `npm run build && npm test` grün ## Dateien (erwartet) - `src/agent/types.ts` - `src/agent/runner.ts` - `src/router.ts` - `tests/unit/runner-result.test.ts` ## Abhängigkeiten Blockiert durch: **DIS-101** (Logger-Refactoring muss vorher stehen). ## Spec → `docs/backlog.md` #DIS-106