/** * Source of truth for "is a newer Agent Canvas published?". * * The npm registry `latest` dist-tag endpoint is CORS-open and returns the * abbreviated packument for that version as JSON. Isolated here so the * release channel can change (e.g. GitHub releases) without touching the * query hook or the settings update card. */ const NPM_LATEST_VERSION_URL = "https://registry.npmjs.org/@openhands/agent-canvas/latest"; export const AGENT_CANVAS_RELEASE_NOTES_URL = "https://github.com/OpenHands/OpenHands/releases"; /** Literal shell commands — intentionally not localized. */ export const AGENT_CANVAS_UPDATE_COMMANDS = { npm: "npm install -g @openhands/agent-canvas@latest", docker: "docker pull ghcr.io/openhands/agent-canvas:latest", } as const; export async function fetchLatestAgentCanvasVersion( signal?: AbortSignal, ): Promise { const response = await fetch(NPM_LATEST_VERSION_URL, { signal, headers: { Accept: "application/json" }, }); if (!response.ok) { throw new Error(`npm registry responded ${response.status}`); } const body: unknown = await response.json(); const version = (body as { version?: unknown } | null)?.version; if (typeof version !== "string" || !version.trim()) { throw new Error("npm registry response missing version"); } return version.trim(); }