Replace session picker modal with instance welcome view

Transform the session picker from a modal into a comprehensive welcome screen that displays instance metadata, session history, and creation options. The new view provides full keyboard navigation, shows MCP server status, OpenCode binary path, and project information in a compact, space-efficient layout.

Key features:
- Instance metadata sidebar showing folder, project, VCS, version, binary path, MCP status, and server info
- Session list with keyboard navigation (↑↓, PgUp/PgDn, Home/End, Enter)
- Cmd+Enter shortcut to create new session from anywhere
- Compact design with efficient space usage
- Visual MCP server status indicators (running/stopped/error)
- Scrollable layout that keeps "New Session" section accessible
This commit is contained in:
Shantur Rathore
2025-10-24 15:41:59 +01:00
parent a1a5c4b396
commit 6f31ffc467
8 changed files with 571 additions and 54 deletions

View File

@@ -6,6 +6,7 @@ import { execSync } from "child_process"
export interface ProcessInfo {
pid: number
port: number
binaryPath: string
}
interface ProcessMeta {
@@ -51,7 +52,7 @@ class ProcessManager {
async spawn(folder: string, instanceId: string): Promise<ProcessInfo> {
this.validateFolder(folder)
this.validateOpenCodeBinary()
const binaryPath = this.validateOpenCodeBinary()
this.sendLog(instanceId, "info", `Starting OpenCode server for ${folder}...`)
@@ -102,7 +103,7 @@ class ProcessManager {
}
this.processes.set(child.pid!, meta)
resolve({ pid: child.pid!, port })
resolve({ pid: child.pid!, port, binaryPath })
}
const meta = this.processes.get(child.pid!)
@@ -208,10 +209,12 @@ class ProcessManager {
}
}
private validateOpenCodeBinary(): void {
private validateOpenCodeBinary(): string {
const command = process.platform === "win32" ? "where opencode" : "which opencode"
try {
execSync(command, { stdio: "pipe" })
const output = execSync(command, { stdio: "pipe", encoding: "utf-8" })
const paths = output.trim().split("\n")
return paths[0].trim()
} catch {
throw new Error(
"opencode binary not found in PATH. Please install OpenCode CLI first: npm install -g @opencode/cli",