providers.test.ts 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. /// <reference types="bun-types" />
  2. import { describe, expect, test } from 'bun:test';
  3. import { generateLiteConfig, MODEL_MAPPINGS } from './providers';
  4. describe('providers', () => {
  5. test('MODEL_MAPPINGS has exactly 4 providers', () => {
  6. const keys = Object.keys(MODEL_MAPPINGS);
  7. expect(keys.sort()).toEqual(['copilot', 'kimi', 'openai', 'zai-plan']);
  8. });
  9. test('generateLiteConfig always generates openai preset', () => {
  10. const config = generateLiteConfig({
  11. hasTmux: false,
  12. installSkills: false,
  13. installCustomSkills: false,
  14. reset: false,
  15. });
  16. expect(config.$schema).toBe(
  17. 'https://unpkg.com/oh-my-opencode-slim@latest/oh-my-opencode-slim.schema.json',
  18. );
  19. expect(config.preset).toBe('openai');
  20. const agents = (config.presets as any).openai;
  21. expect(agents).toBeDefined();
  22. expect(agents.orchestrator.model).toBe('openai/gpt-5.4');
  23. expect(agents.orchestrator.variant).toBeUndefined();
  24. expect(agents.fixer.model).toBe('openai/gpt-5.4-mini');
  25. expect(agents.fixer.variant).toBe('low');
  26. });
  27. test('generateLiteConfig uses correct OpenAI models', () => {
  28. const config = generateLiteConfig({
  29. hasTmux: false,
  30. installSkills: false,
  31. installCustomSkills: false,
  32. reset: false,
  33. });
  34. const agents = (config.presets as any).openai;
  35. expect(agents.orchestrator.model).toBe(
  36. MODEL_MAPPINGS.openai.orchestrator.model,
  37. );
  38. expect(agents.oracle.model).toBe('openai/gpt-5.4');
  39. expect(agents.oracle.variant).toBe('high');
  40. expect(agents.librarian.model).toBe('openai/gpt-5.4-mini');
  41. expect(agents.librarian.variant).toBe('low');
  42. expect(agents.explorer.model).toBe('openai/gpt-5.4-mini');
  43. expect(agents.explorer.variant).toBe('low');
  44. expect(agents.designer.model).toBe('openai/gpt-5.4-mini');
  45. expect(agents.designer.variant).toBe('medium');
  46. });
  47. test('generateLiteConfig enables tmux when requested', () => {
  48. const config = generateLiteConfig({
  49. hasTmux: true,
  50. installSkills: false,
  51. installCustomSkills: false,
  52. reset: false,
  53. });
  54. expect(config.tmux).toBeDefined();
  55. expect((config.tmux as any).enabled).toBe(true);
  56. expect((config.tmux as any).layout).toBe('main-vertical');
  57. });
  58. test('generateLiteConfig includes default skills', () => {
  59. const config = generateLiteConfig({
  60. hasTmux: false,
  61. installSkills: true,
  62. installCustomSkills: false,
  63. reset: false,
  64. });
  65. const agents = (config.presets as any).openai;
  66. // Orchestrator should always have '*'
  67. expect(agents.orchestrator.skills).toEqual(['*']);
  68. // Designer should have 'agent-browser'
  69. expect(agents.designer.skills).toContain('agent-browser');
  70. // Fixer should have no skills by default (empty recommended list)
  71. expect(agents.fixer.skills).toEqual([]);
  72. });
  73. test('generateLiteConfig includes mcps field', () => {
  74. const config = generateLiteConfig({
  75. hasTmux: false,
  76. installSkills: false,
  77. installCustomSkills: false,
  78. reset: false,
  79. });
  80. const agents = (config.presets as any).openai;
  81. expect(agents.orchestrator.mcps).toBeDefined();
  82. expect(Array.isArray(agents.orchestrator.mcps)).toBe(true);
  83. expect(agents.librarian.mcps).toBeDefined();
  84. expect(Array.isArray(agents.librarian.mcps)).toBe(true);
  85. });
  86. test('generateLiteConfig openai includes correct mcps', () => {
  87. const config = generateLiteConfig({
  88. hasTmux: false,
  89. installSkills: false,
  90. installCustomSkills: false,
  91. reset: false,
  92. });
  93. const agents = (config.presets as any).openai;
  94. expect(agents.orchestrator.mcps).toContain('*');
  95. expect(agents.librarian.mcps).toContain('websearch');
  96. expect(agents.librarian.mcps).toContain('context7');
  97. expect(agents.librarian.mcps).toContain('grep_app');
  98. expect(agents.designer.mcps).toEqual([]);
  99. });
  100. });