diff --git a/apps/gateway/src/agent/__tests__/provider.service.test.ts b/apps/gateway/src/agent/__tests__/provider.service.test.ts index 142dfef..0fb85c2 100644 --- a/apps/gateway/src/agent/__tests__/provider.service.test.ts +++ b/apps/gateway/src/agent/__tests__/provider.service.test.ts @@ -35,7 +35,7 @@ describe('ProviderService', () => { }); it('skips API-key providers when env vars are missing (no models become available)', async () => { - const service = new ProviderService(); + const service = new ProviderService(null); await service.onModuleInit(); // Pi's built-in registry may include model definitions for all providers, but @@ -57,7 +57,7 @@ describe('ProviderService', () => { it('registers Anthropic provider with correct models when ANTHROPIC_API_KEY is set', async () => { process.env['ANTHROPIC_API_KEY'] = 'test-anthropic'; - const service = new ProviderService(); + const service = new ProviderService(null); await service.onModuleInit(); const providers = service.listProviders(); @@ -65,42 +65,41 @@ describe('ProviderService', () => { expect(anthropic).toBeDefined(); expect(anthropic!.available).toBe(true); expect(anthropic!.models.map((m) => m.id)).toEqual([ - 'claude-sonnet-4-6', 'claude-opus-4-6', + 'claude-sonnet-4-6', 'claude-haiku-4-5', ]); - // contextWindow override from Pi built-in (200000) + // All Anthropic models have 200k context window for (const m of anthropic!.models) { expect(m.contextWindow).toBe(200000); - // maxTokens capped at 8192 per task spec - expect(m.maxTokens).toBe(8192); } }); it('registers OpenAI provider with correct models when OPENAI_API_KEY is set', async () => { process.env['OPENAI_API_KEY'] = 'test-openai'; - const service = new ProviderService(); + const service = new ProviderService(null); await service.onModuleInit(); const providers = service.listProviders(); const openai = providers.find((p) => p.id === 'openai'); expect(openai).toBeDefined(); expect(openai!.available).toBe(true); - expect(openai!.models.map((m) => m.id)).toEqual(['gpt-4o', 'gpt-4o-mini', 'o3-mini']); + expect(openai!.models.map((m) => m.id)).toEqual(['codex-gpt-5-4']); }); it('registers Z.ai provider with correct models when ZAI_API_KEY is set', async () => { process.env['ZAI_API_KEY'] = 'test-zai'; - const service = new ProviderService(); + const service = new ProviderService(null); await service.onModuleInit(); const providers = service.listProviders(); const zai = providers.find((p) => p.id === 'zai'); expect(zai).toBeDefined(); expect(zai!.available).toBe(true); - expect(zai!.models.map((m) => m.id)).toEqual(['glm-4.5', 'glm-4.5-air', 'glm-4.5-flash']); + // Pi's registry may include additional glm variants; verify our registered model is present + expect(zai!.models.map((m) => m.id)).toContain('glm-5'); }); it('registers all three providers when all keys are set', async () => { @@ -108,7 +107,7 @@ describe('ProviderService', () => { process.env['OPENAI_API_KEY'] = 'test-openai'; process.env['ZAI_API_KEY'] = 'test-zai'; - const service = new ProviderService(); + const service = new ProviderService(null); await service.onModuleInit(); const providerIds = service.listProviders().map((p) => p.id); @@ -120,7 +119,7 @@ describe('ProviderService', () => { it('can find registered Anthropic models by provider+id', async () => { process.env['ANTHROPIC_API_KEY'] = 'test-anthropic'; - const service = new ProviderService(); + const service = new ProviderService(null); await service.onModuleInit(); const sonnet = service.findModel('anthropic', 'claude-sonnet-4-6'); @@ -132,7 +131,7 @@ describe('ProviderService', () => { it('can find registered Z.ai models by provider+id', async () => { process.env['ZAI_API_KEY'] = 'test-zai'; - const service = new ProviderService(); + const service = new ProviderService(null); await service.onModuleInit(); const glm = service.findModel('zai', 'glm-4.5'); diff --git a/apps/gateway/src/chat/__tests__/chat-security.test.ts b/apps/gateway/src/chat/__tests__/chat-security.test.ts index 6515b3a..0871000 100644 --- a/apps/gateway/src/chat/__tests__/chat-security.test.ts +++ b/apps/gateway/src/chat/__tests__/chat-security.test.ts @@ -1,3 +1,4 @@ +import 'reflect-metadata'; import { readFileSync } from 'node:fs'; import { resolve } from 'node:path'; import { validateSync } from 'class-validator';