Skip to content

Commit 18e95b3

Browse files
committed
fix(eslint): migrate provider literals and shared rule tests
1 parent a1c77b2 commit 18e95b3

34 files changed

Lines changed: 303 additions & 365 deletions

packages/config-eslint/provider-identifiers.test.js

Lines changed: 63 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,16 @@ import { createProviderIdentifierConfig } from "./provider-identifiers.js"
44

55
const config = createProviderIdentifierConfig({
66
providerIdentifiers: {
7+
anthropic: "anthropic",
8+
openaiNative: "openai-native",
79
openrouter: "openrouter",
10+
poe: "poe",
811
vercelAiGateway: "vercel-ai-gateway",
912
},
10-
retiredProviderIdentifiers: {},
13+
retiredProviderIdentifiers: {
14+
groq: "groq",
15+
roo: "roo",
16+
},
1117
})
1218
const rule = config.plugins.zoo.rules["no-raw-provider-identifiers"]
1319

@@ -40,3 +46,59 @@ ruleTester.run("no-raw-provider-identifiers provider map keys", rule, {
4046
},
4147
],
4248
})
49+
50+
ruleTester.run("no-raw-provider-identifiers provider-like values", rule, {
51+
valid: [
52+
"const apiProvider = retiredProviderIdentifiers.roo",
53+
"const provider = retiredProviderIdentifiers.groq",
54+
'const config = { apiProvider: "external-provider" }',
55+
"const config = { apiProvider: providerIdentifiers.poe }",
56+
'const response = { protocol: "anthropic", format: "openrouter" }',
57+
],
58+
invalid: [
59+
{
60+
code: 'const apiProvider = "roo"',
61+
errors: [
62+
{
63+
messageId: "useCanonical",
64+
data: { replacement: "retiredProviderIdentifiers.roo", value: "roo" },
65+
type: "Literal",
66+
},
67+
],
68+
},
69+
{
70+
code: "const persistedProvider = `groq`",
71+
errors: [
72+
{
73+
messageId: "useCanonical",
74+
data: { replacement: "retiredProviderIdentifiers.groq", value: "groq" },
75+
type: "TemplateLiteral",
76+
},
77+
],
78+
},
79+
{
80+
code: 'const config = { apiProvider: "poe", imageProvider: `openrouter` }',
81+
errors: [
82+
{ messageId: "useCanonical", data: { replacement: "providerIdentifiers.poe", value: "poe" } },
83+
{
84+
messageId: "useCanonical",
85+
data: { replacement: "providerIdentifiers.openrouter", value: "openrouter" },
86+
},
87+
],
88+
},
89+
{
90+
code: 'config["apiProvider"] = "poe"; if (imageProvider === "openrouter") {}',
91+
errors: [
92+
{ messageId: "useCanonical", data: { replacement: "providerIdentifiers.poe", value: "poe" } },
93+
{
94+
messageId: "useCanonical",
95+
data: { replacement: "providerIdentifiers.openrouter", value: "openrouter" },
96+
},
97+
],
98+
},
99+
{
100+
code: 'switch (config.apiProvider) { case "poe": break; case providerIdentifiers.openrouter: break }',
101+
errors: [{ messageId: "useCanonical", data: { replacement: "providerIdentifiers.poe", value: "poe" } }],
102+
},
103+
],
104+
})

packages/types/src/__tests__/kimi-code.test.ts

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { providerIdentifiers } from "../provider-identifiers.js"
12
import {
23
SECRET_STATE_KEYS,
34
dynamicProviders,
@@ -16,13 +17,15 @@ describe("Kimi Code provider types", () => {
1617
it("parses OAuth and API-key settings independently from Moonshot", () => {
1718
expect(
1819
providerSettingsSchemaDiscriminated.parse({
19-
apiProvider: "kimi-code",
20+
apiProvider: providerIdentifiers.kimiCode,
2021
kimiCodeAuthMethod: "api-key",
2122
kimiCodeApiKey: "kimi-key",
2223
apiModelId: kimiCodeDefaultModelId,
2324
}),
2425
).toMatchObject({ kimiCodeApiKey: "kimi-key" })
25-
expect(providerSettingsSchema.parse({ apiProvider: "kimi-code", kimiCodeAuthMethod: "oauth" })).toMatchObject({
26+
expect(
27+
providerSettingsSchema.parse({ apiProvider: providerIdentifiers.kimiCode, kimiCodeAuthMethod: "oauth" }),
28+
).toMatchObject({
2629
kimiCodeAuthMethod: "oauth",
2730
})
2831
})

packages/types/src/__tests__/provider-model-id.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { retiredProviderIdentifiers } from "../provider-identifiers.js"
12
import { getModelId, modelIdKeys, providerIdentifiers, type ProviderSettings } from "../index.js"
23

34
const expectedModelIdKeys = [
@@ -75,7 +76,7 @@ describe("getModelId", () => {
7576

7677
it("preserves legacy model ID precedence for retired providers", () => {
7778
const settings: ProviderSettings = {
78-
apiProvider: "groq",
79+
apiProvider: retiredProviderIdentifiers.groq,
7980
lmStudioDraftModelId: "draft-model",
8081
requestyModelId: "requesty-model",
8182
}

packages/types/src/__tests__/telemetry.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { providerIdentifiers } from "../provider-identifiers.js"
12
// pnpm --filter @roo-code/types test src/__tests__/telemetry.test.ts
23

34
import {
@@ -536,7 +537,7 @@ describe("telemetry error utilities", () => {
536537
consecutiveMistakeCount: 5,
537538
consecutiveMistakeLimit: 3,
538539
reason: "no_tools_used",
539-
provider: "anthropic",
540+
provider: providerIdentifiers.anthropic,
540541
modelId: "claude-3-sonnet-20240229",
541542
})
542543
})

packages/types/src/image-generation.ts

Lines changed: 24 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
import { providerIdentifiers } from "./provider-identifiers.js"
2+
13
/**
24
* Image generation model constants
35
*/
@@ -16,12 +18,28 @@ export interface ImageGenerationModel {
1618

1719
export const IMAGE_GENERATION_MODELS: ImageGenerationModel[] = [
1820
// OpenRouter models
19-
{ value: "google/gemini-2.5-flash-image", label: "Gemini 2.5 Flash Image", provider: "openrouter" },
20-
{ value: "google/gemini-3-pro-image-preview", label: "Gemini 3 Pro Image Preview", provider: "openrouter" },
21-
{ value: "openai/gpt-5-image", label: "GPT-5 Image", provider: "openrouter" },
22-
{ value: "openai/gpt-5-image-mini", label: "GPT-5 Image Mini", provider: "openrouter" },
23-
{ value: "black-forest-labs/flux.2-flex", label: "Black Forest Labs FLUX.2 Flex", provider: "openrouter" },
24-
{ value: "black-forest-labs/flux.2-pro", label: "Black Forest Labs FLUX.2 Pro", provider: "openrouter" },
21+
{
22+
value: "google/gemini-2.5-flash-image",
23+
label: "Gemini 2.5 Flash Image",
24+
provider: providerIdentifiers.openrouter,
25+
},
26+
{
27+
value: "google/gemini-3-pro-image-preview",
28+
label: "Gemini 3 Pro Image Preview",
29+
provider: providerIdentifiers.openrouter,
30+
},
31+
{ value: "openai/gpt-5-image", label: "GPT-5 Image", provider: providerIdentifiers.openrouter },
32+
{ value: "openai/gpt-5-image-mini", label: "GPT-5 Image Mini", provider: providerIdentifiers.openrouter },
33+
{
34+
value: "black-forest-labs/flux.2-flex",
35+
label: "Black Forest Labs FLUX.2 Flex",
36+
provider: providerIdentifiers.openrouter,
37+
},
38+
{
39+
value: "black-forest-labs/flux.2-pro",
40+
label: "Black Forest Labs FLUX.2 Pro",
41+
provider: providerIdentifiers.openrouter,
42+
},
2543
]
2644

2745
/**

pnpm-lock.yaml

Lines changed: 1 addition & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/__tests__/no-raw-provider-identifiers.spec.mjs

Lines changed: 0 additions & 137 deletions
This file was deleted.

src/eslint-rules/no-raw-provider-identifiers.test.mjs

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/package.json

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -529,7 +529,6 @@
529529
},
530530
"devDependencies": {
531531
"@ai-sdk/openai-compatible": "2.0.56",
532-
"@typescript-eslint/parser": "8.32.1",
533532
"@roo-code/build": "workspace:^",
534533
"@roo-code/config-eslint": "workspace:^",
535534
"@roo-code/config-typescript": "workspace:^",

0 commit comments

Comments
 (0)