Summary
Break down the 500-line main event loop in PackageCurator into smaller, testable components.
Current Architecture
PackageCurator.run()
├─ 500-line switch statement
├─ View mode handling
├─ Input processing
├─ State mutations
└─ Rendering logic
Proposed Architecture
PackageCurator
├─ ViewRouter (handles view transitions)
├─ InputHandler (processes keyboard input)
├─ RenderEngine (manages screen updates)
└─ StateManager (coordinates state changes)
Design
// ViewRouter.swift
actor ViewRouter {
func route(_ key: Key, state: AppState) -> ViewTransition?
}
// InputHandler.swift
struct InputHandler {
func handleInput(_ key: Key, viewMode: ViewMode, state: AppState) -> InputAction
}
// RenderEngine.swift
actor RenderEngine {
func render(viewMode: ViewMode, state: AppState, screen: Screen) async
}
Tasks
Files
Sources/TUI/Routing/ViewRouter.swift (new)
Sources/TUI/Routing/InputHandler.swift (new)
Sources/TUI/Routing/RenderEngine.swift (new)
Sources/TUI/PackageCurator.swift
Summary
Break down the 500-line main event loop in PackageCurator into smaller, testable components.
Current Architecture
Proposed Architecture
Design
Tasks
Files
Sources/TUI/Routing/ViewRouter.swift(new)Sources/TUI/Routing/InputHandler.swift(new)Sources/TUI/Routing/RenderEngine.swift(new)Sources/TUI/PackageCurator.swift