/** * Bundled Devin model roster. * * The Cascade catalog is credential-scoped (gated per account/team), so it is * never fetched at boot: baking one account's roster into the plugin would * misstate every other account's entitlements. This seed mirrors the SWE-2 lane * verified live through `GetCliModelConfigs`, so it resolves synchronously * before any credential-scoped discovery could run. * * Discovery publishes only the allowlisted lanes below: the account's Cascade * roster is a few hundred entries (mostly the fusion combinatorial matrix), so * exposing it verbatim floods the model picker and the teammate catalog. */ /** * Lane ids kept from a discovered roster. Everything else — fusion lanes, * routers, unclassified/internal lanes — is dropped before publishing. */ export const DEVIN_MODEL_ALLOWLIST: ReadonlySet = new Set([ "gpt-6-astra", "gpt-5-6-sol", "swe-2", ]); import type { ProviderModelConfig } from "@earendil-works/pi-coding-agent"; import type { DevinRoute } from "./routing.ts"; export const DEVIN_MODELS: readonly ProviderModelConfig[] = [ { id: "swe-2", name: "SWE-2", api: "devin-agent", reasoning: true, input: ["text", "image"], // Included in the Devin Coding Plan: upstream reports no cost dimensions. cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 }, contextWindow: 262_000, maxTokens: 128_000, }, ]; /** * Wire uids for the seed. Cascade expresses reasoning strength as separate wire * uids, so the offline roster still needs the ladder that discovery would * otherwise supply; a successful discovery replaces this table wholesale. */ export const DEVIN_SEED_ROUTES: ReadonlyMap = new Map([ ["swe-2", { uid: "swe-2-high", byEffort: { medium: "swe-2-medium", high: "swe-2-high", max: "swe-2-max" }, router: false }], ]);