diff --git a/package.json b/package.json index 641102b..32ac407 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "paperclip-adapter-opencode-k8s", - "version": "0.1.35", + "version": "0.1.36", "description": "Paperclip adapter plugin that runs OpenCode agents as Kubernetes Jobs", "license": "MIT", "type": "module", diff --git a/src/server/index.ts b/src/server/index.ts index 1f6aa1d..626969f 100644 --- a/src/server/index.ts +++ b/src/server/index.ts @@ -1,7 +1,7 @@ import type { ServerAdapterModule } from "@paperclipai/adapter-utils"; import { getAdapterSessionManagement } from "@paperclipai/adapter-utils"; import { type, agentConfigurationDoc } from "../index.js"; -import { listK8sModels } from "./models.js"; +import { listK8sModels, STATIC_MODELS } from "./models.js"; import { execute } from "./execute.js"; import { testEnvironment } from "./test.js"; import { sessionCodec } from "./session.js"; @@ -14,6 +14,7 @@ export function createServerAdapter(): ServerAdapterModule { execute, testEnvironment, sessionCodec, + models: STATIC_MODELS, listModels: listK8sModels, listSkills: listOpenCodeSkills, syncSkills: syncOpenCodeSkills, diff --git a/src/server/models.ts b/src/server/models.ts index cf92024..42cb524 100644 --- a/src/server/models.ts +++ b/src/server/models.ts @@ -3,6 +3,15 @@ import os from "node:os"; import type { AdapterModel } from "@paperclipai/adapter-utils"; import { asString, ensurePathInEnv, runChildProcess } from "@paperclipai/adapter-utils/server-utils"; +export const STATIC_MODELS: AdapterModel[] = [ + { id: "anthropic/claude-opus-4-7", label: "anthropic/claude-opus-4-7" }, + { id: "anthropic/claude-sonnet-4-6", label: "anthropic/claude-sonnet-4-6" }, + { id: "anthropic/claude-haiku-4-5", label: "anthropic/claude-haiku-4-5" }, + { id: "openai/gpt-4o", label: "openai/gpt-4o" }, + { id: "google/gemini-2.5-pro", label: "google/gemini-2.5-pro" }, + { id: "google/gemini-2.5-flash", label: "google/gemini-2.5-flash" }, +]; + const MODELS_CACHE_TTL_MS = 60_000; const MODELS_DISCOVERY_TIMEOUT_MS = 20_000; diff --git a/src/server/server-adapter.test.ts b/src/server/server-adapter.test.ts index 3831605..ae01bd1 100644 --- a/src/server/server-adapter.test.ts +++ b/src/server/server-adapter.test.ts @@ -7,6 +7,16 @@ describe("createServerAdapter", () => { expect(adapter.type).toBe("opencode_k8s"); }); + it("exposes a non-empty static models list so the UI renders before listModels resolves", () => { + const adapter = createServerAdapter(); + expect(Array.isArray(adapter.models)).toBe(true); + expect(adapter.models!.length).toBeGreaterThan(0); + for (const m of adapter.models!) { + expect(m.id).toMatch(/^[^/]+\/.+/); + expect(m.label).toBe(m.id); + } + }); + it("exposes listModels for dynamic model discovery", () => { const adapter = createServerAdapter(); expect(typeof adapter.listModels).toBe("function");