import { Component, Show, For, onMount, createSignal } from "solid-js" import type { Instance } from "../types/instance" interface InstanceInfoProps { instance: Instance compact?: boolean } function parseMcpStatus(status: unknown): Array<{ name: string; status: "running" | "stopped" | "error" }> { if (!status || typeof status !== "object") return [] try { const obj = status as Record return Object.entries(obj).map(([name, statusValue]) => { let mappedStatus: "running" | "stopped" | "error" if (statusValue === "connected") { mappedStatus = "running" } else if (statusValue === "disabled") { mappedStatus = "stopped" } else if (statusValue === "failed") { mappedStatus = "error" } else { mappedStatus = "stopped" } return { name, status: mappedStatus, } }) } catch { return [] } } const InstanceInfo: Component = (props) => { const [isLoadingMetadata, setIsLoadingMetadata] = createSignal(true) const metadata = () => props.instance.metadata const mcpServers = () => { const status = metadata()?.mcpStatus return parseMcpStatus(status) } onMount(async () => { if (!props.instance.client) { setIsLoadingMetadata(false) return } setIsLoadingMetadata(true) try { const [projectResult, mcpResult] = await Promise.allSettled([ props.instance.client.project.current(), props.instance.client.mcp.status(), ]) const project = projectResult.status === "fulfilled" ? projectResult.value.data : undefined const mcpStatus = mcpResult.status === "fulfilled" ? mcpResult.value.data : undefined const { updateInstance } = await import("../stores/instances") updateInstance(props.instance.id, { metadata: { project, mcpStatus, version: "0.15.8", }, }) } catch (error) { console.error("Failed to load instance metadata:", error) } finally { setIsLoadingMetadata(false) } }) return (

Instance Information

Folder
{props.instance.folder}
{(project) => ( <>
Project
{project().id}
Version Control
{project().vcs}
)}
OpenCode Version
v{metadata()?.version}
Binary Path
{props.instance.binaryPath}
0}>
Environment Variables ({Object.keys(props.instance.environmentVariables!).length})
{([key, value]) => (
{key} {value}
)}
0}>
MCP Servers
{(server) => (
{server.name}
} >
} >
)}
Loading...
Server
Port: {props.instance.port}
PID: {props.instance.pid}
Status:
{props.instance.status}
) } export default InstanceInfo