fix(cli): improve doctor system check
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -8,6 +8,26 @@ import { getLatestPluginVersion, getLoadedPluginVersion, getSuggestedInstallTag
|
|||||||
import { parseJsonc } from "../../../shared"
|
import { parseJsonc } from "../../../shared"
|
||||||
import { PUBLISHED_PACKAGE_NAME, PLUGIN_NAME, LEGACY_PLUGIN_NAME } from "../../../shared/plugin-identity"
|
import { PUBLISHED_PACKAGE_NAME, PLUGIN_NAME, LEGACY_PLUGIN_NAME } from "../../../shared/plugin-identity"
|
||||||
|
|
||||||
|
interface SystemCheckDeps {
|
||||||
|
findOpenCodeBinary: typeof findOpenCodeBinary
|
||||||
|
getOpenCodeVersion: typeof getOpenCodeVersion
|
||||||
|
compareVersions: typeof compareVersions
|
||||||
|
getPluginInfo: typeof getPluginInfo
|
||||||
|
getLoadedPluginVersion: typeof getLoadedPluginVersion
|
||||||
|
getLatestPluginVersion: typeof getLatestPluginVersion
|
||||||
|
getSuggestedInstallTag: typeof getSuggestedInstallTag
|
||||||
|
}
|
||||||
|
|
||||||
|
const defaultDeps: SystemCheckDeps = {
|
||||||
|
findOpenCodeBinary,
|
||||||
|
getOpenCodeVersion,
|
||||||
|
compareVersions,
|
||||||
|
getPluginInfo,
|
||||||
|
getLoadedPluginVersion,
|
||||||
|
getLatestPluginVersion,
|
||||||
|
getSuggestedInstallTag,
|
||||||
|
}
|
||||||
|
|
||||||
function isConfigValid(configPath: string | null): boolean {
|
function isConfigValid(configPath: string | null): boolean {
|
||||||
if (!configPath) return true
|
if (!configPath) return true
|
||||||
if (!existsSync(configPath)) return false
|
if (!existsSync(configPath)) return false
|
||||||
@@ -32,11 +52,14 @@ function buildMessage(status: CheckResult["status"], issues: DoctorIssue[]): str
|
|||||||
return `${issues.length} system warning(s) detected`
|
return `${issues.length} system warning(s) detected`
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function gatherSystemInfo(): Promise<SystemInfo> {
|
export async function gatherSystemInfo(deps: SystemCheckDeps = defaultDeps): Promise<SystemInfo> {
|
||||||
const [binaryInfo, pluginInfo] = await Promise.all([findOpenCodeBinary(), Promise.resolve(getPluginInfo())])
|
const [binaryInfo, pluginInfo] = await Promise.all([
|
||||||
const loadedInfo = getLoadedPluginVersion()
|
deps.findOpenCodeBinary(),
|
||||||
|
Promise.resolve(deps.getPluginInfo()),
|
||||||
|
])
|
||||||
|
const loadedInfo = deps.getLoadedPluginVersion()
|
||||||
|
|
||||||
const opencodeVersion = binaryInfo ? await getOpenCodeVersion(binaryInfo.path) : null
|
const opencodeVersion = binaryInfo ? await deps.getOpenCodeVersion(binaryInfo.path) : null
|
||||||
const pluginVersion = pluginInfo.pinnedVersion ?? loadedInfo.expectedVersion ?? loadedInfo.loadedVersion
|
const pluginVersion = pluginInfo.pinnedVersion ?? loadedInfo.expectedVersion ?? loadedInfo.loadedVersion
|
||||||
|
|
||||||
return {
|
return {
|
||||||
@@ -51,11 +74,14 @@ export async function gatherSystemInfo(): Promise<SystemInfo> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export async function checkSystem(): Promise<CheckResult> {
|
export async function checkSystem(deps: SystemCheckDeps = defaultDeps): Promise<CheckResult> {
|
||||||
const [systemInfo, pluginInfo] = await Promise.all([gatherSystemInfo(), Promise.resolve(getPluginInfo())])
|
const [systemInfo, pluginInfo] = await Promise.all([
|
||||||
const loadedInfo = getLoadedPluginVersion()
|
gatherSystemInfo(deps),
|
||||||
const latestVersion = await getLatestPluginVersion(systemInfo.loadedVersion)
|
Promise.resolve(deps.getPluginInfo()),
|
||||||
const installTag = getSuggestedInstallTag(systemInfo.loadedVersion)
|
])
|
||||||
|
const loadedInfo = deps.getLoadedPluginVersion()
|
||||||
|
const latestVersion = await deps.getLatestPluginVersion(systemInfo.loadedVersion)
|
||||||
|
const installTag = deps.getSuggestedInstallTag(systemInfo.loadedVersion)
|
||||||
const issues: DoctorIssue[] = []
|
const issues: DoctorIssue[] = []
|
||||||
|
|
||||||
if (!systemInfo.opencodePath) {
|
if (!systemInfo.opencodePath) {
|
||||||
@@ -70,7 +96,7 @@ export async function checkSystem(): Promise<CheckResult> {
|
|||||||
|
|
||||||
if (
|
if (
|
||||||
systemInfo.opencodeVersion &&
|
systemInfo.opencodeVersion &&
|
||||||
!compareVersions(systemInfo.opencodeVersion, MIN_OPENCODE_VERSION)
|
!deps.compareVersions(systemInfo.opencodeVersion, MIN_OPENCODE_VERSION)
|
||||||
) {
|
) {
|
||||||
issues.push({
|
issues.push({
|
||||||
title: "OpenCode version below minimum",
|
title: "OpenCode version below minimum",
|
||||||
@@ -120,7 +146,7 @@ export async function checkSystem(): Promise<CheckResult> {
|
|||||||
if (
|
if (
|
||||||
systemInfo.loadedVersion &&
|
systemInfo.loadedVersion &&
|
||||||
latestVersion &&
|
latestVersion &&
|
||||||
!compareVersions(systemInfo.loadedVersion, latestVersion)
|
!deps.compareVersions(systemInfo.loadedVersion, latestVersion)
|
||||||
) {
|
) {
|
||||||
issues.push({
|
issues.push({
|
||||||
title: "Loaded plugin is outdated",
|
title: "Loaded plugin is outdated",
|
||||||
|
|||||||
Reference in New Issue
Block a user