Files
NomadArch/PROGRESS.md
Gemini AI 157449a9ad restore: recover deleted documentation, CI/CD, and infrastructure files
Restored from origin/main (b4663fb):
- .github/ workflows and issue templates
- .gitignore (proper exclusions)
- .opencode/agent/web_developer.md
- AGENTS.md, BUILD.md, PROGRESS.md
- dev-docs/ (9 architecture/implementation docs)
- docs/screenshots/ (4 UI screenshots)
- images/ (CodeNomad icons)
- package-lock.json (dependency lockfile)
- tasks/ (25+ project task files)

Also restored original source files that were modified:
- packages/ui/src/App.tsx
- packages/ui/src/lib/logger.ts
- packages/ui/src/stores/instances.ts
- packages/server/src/server/routes/workspaces.ts
- packages/server/src/workspaces/manager.ts
- packages/server/src/workspaces/runtime.ts
- packages/server/package.json

Kept new additions:
- Install-*.bat/.sh (enhanced installers)
- Launch-*.bat/.sh (new launchers)
- README.md (SEO optimized with GLM 4.7)
2025-12-23 13:03:48 +04:00

150 lines
4.2 KiB
Markdown

# CodeNomad - Development Progress
## Completed Tasks
### Task 001: Project Setup ✅
- Set up Electron + SolidJS + Vite + TypeScript
- Configured TailwindCSS v3 (downgraded from v4 for electron-vite compatibility)
- Build pipeline with electron-vite
- Application window management
- Application menu with keyboard shortcuts
### Task 002: Empty State UI & Folder Selection ✅
- Empty state component with styled UI
- Native folder picker integration
- IPC handlers for folder selection
- UI state management with SolidJS signals
- Loading states with spinner
- Keyboard shortcuts (Cmd/Ctrl+N)
### Task 003: Process Manager ✅
- Process spawning: `opencode serve --port 0`
- Port detection from stdout (regex: `opencode server listening on http://...`)
- Process lifecycle management (spawn, kill, cleanup)
- IPC communication for instance management
- Instance state tracking (starting → ready → stopped/error)
- Auto-cleanup on app quit
- Error handling & timeout protection (10s)
- Graceful shutdown (SIGTERM → SIGKILL)
### Task 004: SDK Integration ✅
- Installed `@opencode-ai/sdk` package
- SDK manager for client lifecycle
- Session fetching from OpenCode server
- Agent fetching (`client.app.agents()`)
- Provider fetching (`client.config.providers()`)
- Session store with SolidJS signals
- Instance store updated with SDK client
- Loading states for async operations
- Error handling for network failures
### Task 005: Session Picker Modal ✅
- Modal dialog with Kobalte Dialog
- Lists ALL existing sessions (scrollable)
- Session metadata display (title, relative timestamp)
- Native HTML select dropdown for agents
- Auto-selects first agent by default
- Create new session with selected agent
- Cancel button stops instance and closes modal
- Resume session on click
- Empty state for no sessions
- Loading state for agents
- Keyboard navigation (Escape to cancel)
## Current State
**Working Features:**
- ✅ App launches with empty state
- ✅ Folder selection via native dialog
- ✅ OpenCode server spawning per folder
- ✅ Port extraction and process tracking
- ✅ SDK client connection to running servers
- ✅ Session list fetching and display
- ✅ Agent and provider data fetching
- ✅ Session picker modal on instance creation
- ✅ Resume existing sessions
- ✅ Create new sessions with agent selection
**File Structure:**
```
packages/opencode-client/
├── electron/
│ ├── main/
│ │ ├── main.ts (window + IPC setup)
│ │ ├── menu.ts (app menu)
│ │ ├── ipc.ts (instance IPC handlers)
│ │ └── process-manager.ts (server spawning)
│ └── preload/
│ └── index.ts (IPC bridge)
├── src/
│ ├── components/
│ │ ├── empty-state.tsx
│ │ └── session-picker.tsx
│ ├── lib/
│ │ └── sdk-manager.ts
│ ├── stores/
│ │ ├── ui.ts
│ │ ├── instances.ts
│ │ └── sessions.ts
│ ├── types/
│ │ ├── electron.d.ts
│ │ ├── instance.ts
│ │ └── session.ts
│ └── App.tsx
├── tasks/
│ ├── done/ (001-005)
│ └── todo/ (006+)
└── docs/
```
## Next Steps
### Task 006: Message Stream UI (NEXT)
- Message display component
- User/assistant message rendering
- Markdown support with syntax highlighting
- Tool use visualization
- Auto-scroll behavior
### Task 007: Prompt Input
- Text input with multi-line support
- Send button
- File attachment support
- Keyboard shortcuts (Enter for new line; Cmd+Enter/Ctrl+Enter to send)
### Task 008: Instance Tabs
- Tab bar for multiple instances
- Switch between instances
- Close instance tabs
- "+" button for new instance
## Build & Test
```bash
cd packages/opencode-client
bun run build
bunx electron .
```
**Known Issue:**
- Dev mode (`bun dev`) fails due to Bun workspace hoisting + electron-vite
- Workaround: Use production builds for testing
## Dependencies
- Electron 38
- SolidJS 1.8
- TailwindCSS 3.x
- @opencode-ai/sdk
- @kobalte/core (Dialog)
- Vite 5
- TypeScript 5
## Stats
- **Tasks completed:** 5/5 (Phase 1)
- **Files created:** 18+
- **Lines of code:** ~1500+
- **Build time:** ~7s
- **Bundle size:** 152KB (renderer)