40 lines
1.2 KiB
TypeScript
40 lines
1.2 KiB
TypeScript
import type { Agent, Project, ProviderListResponse } from "@opencode-ai/sdk/v2/client"
|
|
|
|
export const cmp = (a: string, b: string) => (a < b ? -1 : a > b ? 1 : 0)
|
|
|
|
function isAgent(input: unknown): input is Agent {
|
|
if (!input || typeof input !== "object") return false
|
|
const item = input as { name?: unknown; mode?: unknown }
|
|
if (typeof item.name !== "string") return false
|
|
return item.mode === "subagent" || item.mode === "primary" || item.mode === "all"
|
|
}
|
|
|
|
export function normalizeAgentList(input: unknown): Agent[] {
|
|
if (Array.isArray(input)) return input.filter(isAgent)
|
|
if (isAgent(input)) return [input]
|
|
if (!input || typeof input !== "object") return []
|
|
return Object.values(input).filter(isAgent)
|
|
}
|
|
|
|
export function normalizeProviderList(input: ProviderListResponse): ProviderListResponse {
|
|
return {
|
|
...input,
|
|
all: input.all.map((provider) => ({
|
|
...provider,
|
|
models: Object.fromEntries(Object.entries(provider.models).filter(([, info]) => info.status !== "deprecated")),
|
|
})),
|
|
}
|
|
}
|
|
|
|
export function sanitizeProject(project: Project) {
|
|
if (!project.icon?.url && !project.icon?.override) return project
|
|
return {
|
|
...project,
|
|
icon: {
|
|
...project.icon,
|
|
url: undefined,
|
|
override: undefined,
|
|
},
|
|
}
|
|
}
|