Files
NomadArch/PROGRESS.md
Gemini AI 1d427f4cf5
Some checks failed
Release Binaries / release (push) Has been cancelled
v0.5.0: NomadArch - Binary-Free Mode Release
Features:
- Binary-Free Mode: No OpenCode binary required
- NomadArch Native mode with free Zen models
- Native session management
- Provider routing (Zen, Qwen, Z.AI)
- Fixed MCP connection with explicit connectAll()
- Updated installers and launchers for all platforms
- UI binary selector with Native option

Free Models Available:
- GPT-5 Nano (400K context)
- Grok Code Fast 1 (256K context)
- GLM-4.7 (205K context)
- Doubao Seed Code (256K context)
- Big Pickle (200K context)
2025-12-26 11:27:03 +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)