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

4.2 KiB

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

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)