Add Phase 5 Kotlin desktop app: Compose Multiplatform with gRPC client
Kotlin/Compose Desktop application under desktop/ with: - Gradle build: Kotlin 2.1, Compose 1.8, gRPC/Protobuf codegen, detekt - ExoClient: gRPC client for both ArtifactService and KnowledgeGraphService - Obsidian-style layout: collapsible tree sidebar, contextual main panel - Five view modes: artifact detail, note editor, search results, catalog, graph (stub) - Unified search bar with selector prefix support - Command palette (Ctrl+Shift+A) for quick actions - Menu bar with keyboard shortcuts (Ctrl+I/L/F/Q) - Dark Material 3 theme - Detekt lint config with Compose/test naming exceptions - Unit tests for AppState and model types Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
26
PROGRESS.md
26
PROGRESS.md
@@ -83,6 +83,30 @@ Tracks implementation progress against the phases in `PROJECT_PLAN.md`.
|
||||
- `proto/exo/v1/kg.proto`, `proto/exo/v1/kg.pb.go`, `proto/exo/v1/kg_grpc.pb.go`
|
||||
- `server/kg_server.go`
|
||||
|
||||
## Phase 5: Desktop Application — NOT STARTED (Kotlin, out of scope for Go backend)
|
||||
## Phase 5: Desktop Application — COMPLETE
|
||||
|
||||
**Deliverables:**
|
||||
- [x] Kotlin/Compose Multiplatform desktop application (`desktop/`)
|
||||
- [x] Gradle build with Kotlin 2.1, Compose 1.8, gRPC, Protobuf code generation
|
||||
- [x] gRPC client (`ExoClient`) connecting to exod for both ArtifactService and KnowledgeGraphService
|
||||
- [x] Observable `AppState` model driving reactive Compose UI
|
||||
- [x] Tree/outline sidebar (Obsidian-style) showing KG hierarchy and unlinked artifacts section
|
||||
- [x] Contextual main panel: Artifact detail view, Note editor view, Search results view, Catalog view, Graph view stub
|
||||
- [x] Unified search bar with selector prefix support (`artifact:`, `note:`, `tag:`, `doi:`, `author:`)
|
||||
- [x] Command palette (Ctrl+Shift+A, IntelliJ-style): create note, import artifact, search, switch views
|
||||
- [x] Menu bar with keyboard shortcuts: Ctrl+I (import), Ctrl+L (new note), Ctrl+F (search), Ctrl+Q (quit)
|
||||
- [x] Dark theme (Material 3 dark color scheme)
|
||||
- [x] Detekt static analysis (`detekt.yml`): strict config, Compose naming exceptions, test naming exceptions
|
||||
- [x] Unit tests for AppState and model types (9 tests)
|
||||
- [x] Proto files copied and generated for Kotlin (artifacts, kg, common)
|
||||
|
||||
**Files created:**
|
||||
- `desktop/build.gradle.kts`, `desktop/settings.gradle.kts`, `desktop/detekt.yml`
|
||||
- `desktop/src/main/proto/exo/v1/{common,artifacts,kg}.proto`
|
||||
- `desktop/src/main/kotlin/dev/wntrmute/exo/Main.kt`
|
||||
- `desktop/src/main/kotlin/dev/wntrmute/exo/client/ExoClient.kt`
|
||||
- `desktop/src/main/kotlin/dev/wntrmute/exo/model/AppState.kt`
|
||||
- `desktop/src/main/kotlin/dev/wntrmute/exo/ui/{App,Sidebar,MainPanel,SearchBar,CommandPalette}.kt`
|
||||
- `desktop/src/test/kotlin/dev/wntrmute/exo/model/{AppStateTest,SearchResultTest}.kt`
|
||||
|
||||
## Phase 6: Remote Access & Backup — NOT STARTED
|
||||
|
||||
Reference in New Issue
Block a user