add sub-bar usage widget extension with opencode-go support

This commit is contained in:
2026-03-12 12:30:09 +00:00
parent 9ad10a016c
commit 5179fc6471
70 changed files with 14775 additions and 6 deletions
@@ -0,0 +1,71 @@
/**
* Error utilities for the sub-bar extension
*/
import type { UsageError, UsageErrorCode } from "./types.js";
export function createError(code: UsageErrorCode, message: string, httpStatus?: number): UsageError {
return { code, message, httpStatus };
}
export function noCredentials(): UsageError {
return createError("NO_CREDENTIALS", "No credentials found");
}
export function noCli(cliName: string): UsageError {
return createError("NO_CLI", `${cliName} CLI not found`);
}
export function notLoggedIn(): UsageError {
return createError("NOT_LOGGED_IN", "Not logged in");
}
export function fetchFailed(reason?: string): UsageError {
return createError("FETCH_FAILED", reason ?? "Fetch failed");
}
export function httpError(status: number): UsageError {
return createError("HTTP_ERROR", `HTTP ${status}`, status);
}
export function apiError(message: string): UsageError {
return createError("API_ERROR", message);
}
export function timeout(): UsageError {
return createError("TIMEOUT", "Request timed out");
}
/**
* Check if an error should be considered "no data available" vs actual error
* These are expected states when provider isn't configured
*/
export function isExpectedMissingData(error: UsageError): boolean {
const ignoreCodes = new Set<UsageErrorCode>(["NO_CREDENTIALS", "NO_CLI", "NOT_LOGGED_IN"]);
return ignoreCodes.has(error.code);
}
/**
* Format error for display in the usage widget
*/
export function formatErrorForDisplay(error: UsageError): string {
switch (error.code) {
case "NO_CREDENTIALS":
return "No creds";
case "NO_CLI":
return "No CLI";
case "NOT_LOGGED_IN":
return "Not logged in";
case "HTTP_ERROR":
if (error.httpStatus === 401) {
return "token no longer valid please /login again";
}
return `${error.httpStatus}`;
case "FETCH_FAILED":
case "API_ERROR":
case "TIMEOUT":
case "UNKNOWN":
default:
return "Fetch failed";
}
}