1a734adb4d
Moves effect logging, observability, runtime utilities, flags, installation version info, and process utilities from opencode to core package. This enables better code sharing across packages and establishes core as the single source of truth for foundational utilities. All internal imports updated to use @opencode-ai/core paths for consistency.
34 lines
1.3 KiB
TypeScript
34 lines
1.3 KiB
TypeScript
import { Bus } from "@/bus"
|
|
import { Config } from "@/config"
|
|
import { AppRuntime } from "@/effect/app-runtime"
|
|
import { Flag } from "@opencode-ai/core/flag/flag"
|
|
import { Installation } from "@/installation"
|
|
import { InstallationVersion } from "@opencode-ai/core/installation/version"
|
|
|
|
export async function upgrade() {
|
|
const config = await AppRuntime.runPromise(Config.Service.use((cfg) => cfg.getGlobal()))
|
|
if (config.autoupdate === false || Flag.OPENCODE_DISABLE_AUTOUPDATE) return
|
|
const method = await AppRuntime.runPromise(Installation.Service.use((svc) => svc.method()))
|
|
const latest = await AppRuntime.runPromise(Installation.Service.use((svc) => svc.latest(method))).catch(() => {})
|
|
if (!latest) return
|
|
|
|
if (Flag.OPENCODE_ALWAYS_NOTIFY_UPDATE) {
|
|
await Bus.publish(Installation.Event.UpdateAvailable, { version: latest })
|
|
return
|
|
}
|
|
|
|
if (InstallationVersion === latest) return
|
|
|
|
const kind = Installation.getReleaseType(InstallationVersion, latest)
|
|
|
|
if (config.autoupdate === "notify" || kind !== "patch") {
|
|
await Bus.publish(Installation.Event.UpdateAvailable, { version: latest })
|
|
return
|
|
}
|
|
|
|
if (method === "unknown") return
|
|
await AppRuntime.runPromise(Installation.Service.use((svc) => svc.upgrade(method, latest)))
|
|
.then(() => Bus.publish(Installation.Event.Updated, { version: latest }))
|
|
.catch(() => {})
|
|
}
|