88148fe248
Fixes #1920 Installer-written exact versions (e.g., oh-my-opencode@3.5.2) were incorrectly treated as user-pinned, blocking auto-updates for all installer users. Fix isPinned to only block auto-update when pinnedVersion is an explicit semver string (user's intent). Channel tags (latest, beta, next) and bare package name all allow auto-update. Fix installer fallback to return bare PACKAGE_NAME for stable versions and PACKAGE_NAME@{channel} for prerelease versions, preserving channel tracking.
29 lines
804 B
TypeScript
29 lines
804 B
TypeScript
import { fetchNpmDistTags } from "./npm-dist-tags"
|
|
|
|
const PACKAGE_NAME = "oh-my-opencode"
|
|
const PRIORITIZED_TAGS = ["latest", "beta", "next"] as const
|
|
|
|
function getFallbackEntry(version: string): string {
|
|
const prereleaseMatch = version.match(/-([a-zA-Z][a-zA-Z0-9]*)\./)
|
|
if (prereleaseMatch) {
|
|
return `${PACKAGE_NAME}@${prereleaseMatch[1]}`
|
|
}
|
|
|
|
return PACKAGE_NAME
|
|
}
|
|
|
|
export async function getPluginNameWithVersion(currentVersion: string): Promise<string> {
|
|
const distTags = await fetchNpmDistTags(PACKAGE_NAME)
|
|
|
|
if (distTags) {
|
|
const allTags = new Set([...PRIORITIZED_TAGS, ...Object.keys(distTags)])
|
|
for (const tag of allTags) {
|
|
if (distTags[tag] === currentVersion) {
|
|
return `${PACKAGE_NAME}@${tag}`
|
|
}
|
|
}
|
|
}
|
|
|
|
return getFallbackEntry(currentVersion)
|
|
}
|