vskill 0.5.2 → 0.5.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (205) hide show
  1. package/dist/agents/agents-registry.test.d.ts +1 -0
  2. package/dist/agents/agents-registry.test.js +248 -0
  3. package/dist/agents/agents-registry.test.js.map +1 -0
  4. package/dist/api/client.test.d.ts +1 -0
  5. package/dist/api/client.test.js +428 -0
  6. package/dist/api/client.test.js.map +1 -0
  7. package/dist/audit/audit-integration.test.d.ts +1 -0
  8. package/dist/audit/audit-integration.test.js +92 -0
  9. package/dist/audit/audit-integration.test.js.map +1 -0
  10. package/dist/audit/audit-llm.test.d.ts +1 -0
  11. package/dist/audit/audit-llm.test.js +110 -0
  12. package/dist/audit/audit-llm.test.js.map +1 -0
  13. package/dist/audit/audit-patterns.test.d.ts +1 -0
  14. package/dist/audit/audit-patterns.test.js +91 -0
  15. package/dist/audit/audit-patterns.test.js.map +1 -0
  16. package/dist/audit/audit-scanner.test.d.ts +1 -0
  17. package/dist/audit/audit-scanner.test.js +112 -0
  18. package/dist/audit/audit-scanner.test.js.map +1 -0
  19. package/dist/audit/audit-types.test.d.ts +1 -0
  20. package/dist/audit/audit-types.test.js +140 -0
  21. package/dist/audit/audit-types.test.js.map +1 -0
  22. package/dist/audit/config.test.d.ts +1 -0
  23. package/dist/audit/config.test.js +44 -0
  24. package/dist/audit/config.test.js.map +1 -0
  25. package/dist/audit/file-discovery.test.d.ts +1 -0
  26. package/dist/audit/file-discovery.test.js +120 -0
  27. package/dist/audit/file-discovery.test.js.map +1 -0
  28. package/dist/audit/fix-suggestions.test.d.ts +1 -0
  29. package/dist/audit/fix-suggestions.test.js +35 -0
  30. package/dist/audit/fix-suggestions.test.js.map +1 -0
  31. package/dist/audit/formatters/json-formatter.test.d.ts +1 -0
  32. package/dist/audit/formatters/json-formatter.test.js +49 -0
  33. package/dist/audit/formatters/json-formatter.test.js.map +1 -0
  34. package/dist/audit/formatters/report-formatter.test.d.ts +1 -0
  35. package/dist/audit/formatters/report-formatter.test.js +51 -0
  36. package/dist/audit/formatters/report-formatter.test.js.map +1 -0
  37. package/dist/audit/formatters/sarif-formatter.test.d.ts +1 -0
  38. package/dist/audit/formatters/sarif-formatter.test.js +71 -0
  39. package/dist/audit/formatters/sarif-formatter.test.js.map +1 -0
  40. package/dist/audit/formatters/terminal-formatter.test.d.ts +1 -0
  41. package/dist/audit/formatters/terminal-formatter.test.js +51 -0
  42. package/dist/audit/formatters/terminal-formatter.test.js.map +1 -0
  43. package/dist/blocklist/blocklist-e2e.test.d.ts +1 -0
  44. package/dist/blocklist/blocklist-e2e.test.js +346 -0
  45. package/dist/blocklist/blocklist-e2e.test.js.map +1 -0
  46. package/dist/blocklist/blocklist.test.d.ts +1 -0
  47. package/dist/blocklist/blocklist.test.js +259 -0
  48. package/dist/blocklist/blocklist.test.js.map +1 -0
  49. package/dist/commands/__tests__/eval-router.test.d.ts +1 -0
  50. package/dist/commands/__tests__/eval-router.test.js +60 -0
  51. package/dist/commands/__tests__/eval-router.test.js.map +1 -0
  52. package/dist/commands/__tests__/eval-serve.test.d.ts +1 -0
  53. package/dist/commands/__tests__/eval-serve.test.js +23 -0
  54. package/dist/commands/__tests__/eval-serve.test.js.map +1 -0
  55. package/dist/commands/add-blocklist-e2e.test.d.ts +1 -0
  56. package/dist/commands/add-blocklist-e2e.test.js +397 -0
  57. package/dist/commands/add-blocklist-e2e.test.js.map +1 -0
  58. package/dist/commands/add-wizard.test.d.ts +1 -0
  59. package/dist/commands/add-wizard.test.js +392 -0
  60. package/dist/commands/add-wizard.test.js.map +1 -0
  61. package/dist/commands/add.test.d.ts +1 -0
  62. package/dist/commands/add.test.js +2365 -0
  63. package/dist/commands/add.test.js.map +1 -0
  64. package/dist/commands/audit.test.d.ts +1 -0
  65. package/dist/commands/audit.test.js +79 -0
  66. package/dist/commands/audit.test.js.map +1 -0
  67. package/dist/commands/blocklist.test.d.ts +1 -0
  68. package/dist/commands/blocklist.test.js +158 -0
  69. package/dist/commands/blocklist.test.js.map +1 -0
  70. package/dist/commands/eval/__tests__/coverage.test.d.ts +1 -0
  71. package/dist/commands/eval/__tests__/coverage.test.js +122 -0
  72. package/dist/commands/eval/__tests__/coverage.test.js.map +1 -0
  73. package/dist/commands/eval/__tests__/generate-all.test.d.ts +1 -0
  74. package/dist/commands/eval/__tests__/generate-all.test.js +133 -0
  75. package/dist/commands/eval/__tests__/generate-all.test.js.map +1 -0
  76. package/dist/commands/eval/__tests__/init.test.d.ts +1 -0
  77. package/dist/commands/eval/__tests__/init.test.js +116 -0
  78. package/dist/commands/eval/__tests__/init.test.js.map +1 -0
  79. package/dist/commands/eval/__tests__/run.test.d.ts +1 -0
  80. package/dist/commands/eval/__tests__/run.test.js +186 -0
  81. package/dist/commands/eval/__tests__/run.test.js.map +1 -0
  82. package/dist/commands/find.test.d.ts +1 -0
  83. package/dist/commands/find.test.js +481 -0
  84. package/dist/commands/find.test.js.map +1 -0
  85. package/dist/commands/marketplace.test.d.ts +1 -0
  86. package/dist/commands/marketplace.test.js +129 -0
  87. package/dist/commands/marketplace.test.js.map +1 -0
  88. package/dist/commands/remove.test.d.ts +1 -0
  89. package/dist/commands/remove.test.js +164 -0
  90. package/dist/commands/remove.test.js.map +1 -0
  91. package/dist/commands/should-skip.test.d.ts +1 -0
  92. package/dist/commands/should-skip.test.js +56 -0
  93. package/dist/commands/should-skip.test.js.map +1 -0
  94. package/dist/commands/submit.test.d.ts +1 -0
  95. package/dist/commands/submit.test.js +83 -0
  96. package/dist/commands/submit.test.js.map +1 -0
  97. package/dist/commands/update.test.d.ts +1 -0
  98. package/dist/commands/update.test.js +250 -0
  99. package/dist/commands/update.test.js.map +1 -0
  100. package/dist/discovery/github-tree.test.d.ts +1 -0
  101. package/dist/discovery/github-tree.test.js +372 -0
  102. package/dist/discovery/github-tree.test.js.map +1 -0
  103. package/dist/eval/__tests__/activation-tester.test.d.ts +1 -0
  104. package/dist/eval/__tests__/activation-tester.test.js +203 -0
  105. package/dist/eval/__tests__/activation-tester.test.js.map +1 -0
  106. package/dist/eval/__tests__/benchmark-history.test.d.ts +1 -0
  107. package/dist/eval/__tests__/benchmark-history.test.js +422 -0
  108. package/dist/eval/__tests__/benchmark-history.test.js.map +1 -0
  109. package/dist/eval/__tests__/benchmark.test.d.ts +1 -0
  110. package/dist/eval/__tests__/benchmark.test.js +94 -0
  111. package/dist/eval/__tests__/benchmark.test.js.map +1 -0
  112. package/dist/eval/__tests__/comparator.test.d.ts +1 -0
  113. package/dist/eval/__tests__/comparator.test.js +282 -0
  114. package/dist/eval/__tests__/comparator.test.js.map +1 -0
  115. package/dist/eval/__tests__/judge.test.d.ts +1 -0
  116. package/dist/eval/__tests__/judge.test.js +122 -0
  117. package/dist/eval/__tests__/judge.test.js.map +1 -0
  118. package/dist/eval/__tests__/llm.test.d.ts +1 -0
  119. package/dist/eval/__tests__/llm.test.js +543 -0
  120. package/dist/eval/__tests__/llm.test.js.map +1 -0
  121. package/dist/eval/__tests__/mcp-detector.test.d.ts +1 -0
  122. package/dist/eval/__tests__/mcp-detector.test.js +180 -0
  123. package/dist/eval/__tests__/mcp-detector.test.js.map +1 -0
  124. package/dist/eval/__tests__/prompt-builder.test.d.ts +1 -0
  125. package/dist/eval/__tests__/prompt-builder.test.js +142 -0
  126. package/dist/eval/__tests__/prompt-builder.test.js.map +1 -0
  127. package/dist/eval/__tests__/schema.test.d.ts +1 -0
  128. package/dist/eval/__tests__/schema.test.js +247 -0
  129. package/dist/eval/__tests__/schema.test.js.map +1 -0
  130. package/dist/eval/__tests__/skill-scanner.test.d.ts +1 -0
  131. package/dist/eval/__tests__/skill-scanner.test.js +228 -0
  132. package/dist/eval/__tests__/skill-scanner.test.js.map +1 -0
  133. package/dist/eval/__tests__/verdict.test.d.ts +1 -0
  134. package/dist/eval/__tests__/verdict.test.js +47 -0
  135. package/dist/eval/__tests__/verdict.test.js.map +1 -0
  136. package/dist/eval-server/__tests__/benchmark-runner.test.d.ts +1 -0
  137. package/dist/eval-server/__tests__/benchmark-runner.test.js +301 -0
  138. package/dist/eval-server/__tests__/benchmark-runner.test.js.map +1 -0
  139. package/dist/eval-server/__tests__/comparison-sse-events.test.d.ts +1 -0
  140. package/dist/eval-server/__tests__/comparison-sse-events.test.js +278 -0
  141. package/dist/eval-server/__tests__/comparison-sse-events.test.js.map +1 -0
  142. package/dist/eval-server/__tests__/sse-helpers.test.d.ts +1 -0
  143. package/dist/eval-server/__tests__/sse-helpers.test.js +128 -0
  144. package/dist/eval-server/__tests__/sse-helpers.test.js.map +1 -0
  145. package/dist/installer/canonical.test.d.ts +1 -0
  146. package/dist/installer/canonical.test.js +264 -0
  147. package/dist/installer/canonical.test.js.map +1 -0
  148. package/dist/lockfile/lockfile.test.d.ts +1 -0
  149. package/dist/lockfile/lockfile.test.js +204 -0
  150. package/dist/lockfile/lockfile.test.js.map +1 -0
  151. package/dist/lockfile/project-root.test.d.ts +1 -0
  152. package/dist/lockfile/project-root.test.js +49 -0
  153. package/dist/lockfile/project-root.test.js.map +1 -0
  154. package/dist/marketplace/marketplace.test.d.ts +1 -0
  155. package/dist/marketplace/marketplace.test.js +312 -0
  156. package/dist/marketplace/marketplace.test.js.map +1 -0
  157. package/dist/resolvers/source-resolver.test.d.ts +1 -0
  158. package/dist/resolvers/source-resolver.test.js +104 -0
  159. package/dist/resolvers/source-resolver.test.js.map +1 -0
  160. package/dist/resolvers/url-resolver.test.d.ts +1 -0
  161. package/dist/resolvers/url-resolver.test.js +49 -0
  162. package/dist/resolvers/url-resolver.test.js.map +1 -0
  163. package/dist/scanner/dci-integration.test.d.ts +1 -0
  164. package/dist/scanner/dci-integration.test.js +83 -0
  165. package/dist/scanner/dci-integration.test.js.map +1 -0
  166. package/dist/scanner/patterns.test.d.ts +1 -0
  167. package/dist/scanner/patterns.test.js +832 -0
  168. package/dist/scanner/patterns.test.js.map +1 -0
  169. package/dist/scanner/tier1.test.d.ts +1 -0
  170. package/dist/scanner/tier1.test.js +305 -0
  171. package/dist/scanner/tier1.test.js.map +1 -0
  172. package/dist/security/platform-security.test.d.ts +1 -0
  173. package/dist/security/platform-security.test.js +92 -0
  174. package/dist/security/platform-security.test.js.map +1 -0
  175. package/dist/settings/settings.test.d.ts +1 -0
  176. package/dist/settings/settings.test.js +103 -0
  177. package/dist/settings/settings.test.js.map +1 -0
  178. package/dist/updater/source-fetcher.test.d.ts +1 -0
  179. package/dist/updater/source-fetcher.test.js +192 -0
  180. package/dist/updater/source-fetcher.test.js.map +1 -0
  181. package/dist/utils/__tests__/paths.test.d.ts +1 -0
  182. package/dist/utils/__tests__/paths.test.js +22 -0
  183. package/dist/utils/__tests__/paths.test.js.map +1 -0
  184. package/dist/utils/__tests__/resolve-binary.integration.test.d.ts +1 -0
  185. package/dist/utils/__tests__/resolve-binary.integration.test.js +138 -0
  186. package/dist/utils/__tests__/resolve-binary.integration.test.js.map +1 -0
  187. package/dist/utils/__tests__/resolve-binary.test.d.ts +1 -0
  188. package/dist/utils/__tests__/resolve-binary.test.js +175 -0
  189. package/dist/utils/__tests__/resolve-binary.test.js.map +1 -0
  190. package/dist/utils/__tests__/validation.test.d.ts +1 -0
  191. package/dist/utils/__tests__/validation.test.js +107 -0
  192. package/dist/utils/__tests__/validation.test.js.map +1 -0
  193. package/dist/utils/agent-filter.test.d.ts +1 -0
  194. package/dist/utils/agent-filter.test.js +75 -0
  195. package/dist/utils/agent-filter.test.js.map +1 -0
  196. package/dist/utils/output.test.d.ts +1 -0
  197. package/dist/utils/output.test.js +28 -0
  198. package/dist/utils/output.test.js.map +1 -0
  199. package/dist/utils/project-root.test.d.ts +1 -0
  200. package/dist/utils/project-root.test.js +74 -0
  201. package/dist/utils/project-root.test.js.map +1 -0
  202. package/dist/utils/prompts.test.d.ts +1 -0
  203. package/dist/utils/prompts.test.js +285 -0
  204. package/dist/utils/prompts.test.js.map +1 -0
  205. package/package.json +1 -1
@@ -0,0 +1,543 @@
1
+ import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
2
+ // ---------------------------------------------------------------------------
3
+ // Mocks
4
+ // ---------------------------------------------------------------------------
5
+ const mockCreate = vi.hoisted(() => vi.fn());
6
+ const mockSpawn = vi.hoisted(() => vi.fn());
7
+ const mockResolveCliBinary = vi.hoisted(() => vi.fn((name) => name));
8
+ const mockEnhancedPath = vi.hoisted(() => vi.fn((p) => p || process.env.PATH || ""));
9
+ vi.mock("@anthropic-ai/sdk", () => ({
10
+ default: class MockAnthropic {
11
+ messages = { create: mockCreate };
12
+ },
13
+ }));
14
+ vi.mock("node:child_process", () => ({
15
+ spawn: mockSpawn,
16
+ }));
17
+ vi.mock("../../utils/resolve-binary.js", () => ({
18
+ resolveCliBinary: mockResolveCliBinary,
19
+ enhancedPath: mockEnhancedPath,
20
+ }));
21
+ // ---------------------------------------------------------------------------
22
+ // Spawn helper — creates a fake ChildProcess for testing
23
+ // ---------------------------------------------------------------------------
24
+ import { EventEmitter } from "node:events";
25
+ function createFakeProc(stdoutData, exitCode = 0, stderrData = "") {
26
+ const proc = new EventEmitter();
27
+ proc.stdout = new EventEmitter();
28
+ proc.stderr = new EventEmitter();
29
+ proc.stdin = { end: vi.fn(), write: vi.fn() };
30
+ proc.kill = vi.fn();
31
+ // Emit stdout/stderr and close on next tick
32
+ setTimeout(() => {
33
+ if (stdoutData)
34
+ proc.stdout.emit("data", Buffer.from(stdoutData));
35
+ if (stderrData)
36
+ proc.stderr.emit("data", Buffer.from(stderrData));
37
+ proc.emit("close", exitCode);
38
+ }, 0);
39
+ return proc;
40
+ }
41
+ // ---------------------------------------------------------------------------
42
+ // Import module under test AFTER mocks
43
+ // ---------------------------------------------------------------------------
44
+ const { createLlmClient } = await import("../llm.js");
45
+ // ---------------------------------------------------------------------------
46
+ // Tests
47
+ // ---------------------------------------------------------------------------
48
+ describe("createLlmClient", () => {
49
+ const origEnv = { ...process.env };
50
+ beforeEach(() => {
51
+ vi.resetAllMocks();
52
+ delete process.env.VSKILL_EVAL_PROVIDER;
53
+ delete process.env.VSKILL_EVAL_MODEL;
54
+ delete process.env.ANTHROPIC_API_KEY;
55
+ delete process.env.OLLAMA_BASE_URL;
56
+ delete process.env.CLAUDECODE;
57
+ delete process.env.CODEX_API_KEY;
58
+ delete process.env.GOOGLE_API_KEY;
59
+ });
60
+ afterEach(() => {
61
+ process.env = { ...origEnv };
62
+ });
63
+ // -------------------------------------------------------------------------
64
+ // Auto-detection
65
+ // -------------------------------------------------------------------------
66
+ it("defaults to claude-cli from a plain terminal", () => {
67
+ const client = createLlmClient();
68
+ expect(client.model).toBe("claude-sonnet");
69
+ });
70
+ it("defaults to claude-cli even inside Claude Code session", () => {
71
+ process.env.CLAUDECODE = "1";
72
+ const client = createLlmClient();
73
+ expect(client.model).toBe("claude-sonnet");
74
+ });
75
+ it("explicit VSKILL_EVAL_PROVIDER overrides auto-detection", () => {
76
+ process.env.VSKILL_EVAL_PROVIDER = "ollama";
77
+ process.env.ANTHROPIC_API_KEY = "test-key";
78
+ const client = createLlmClient();
79
+ expect(client.model).toBe("llama3.1:8b");
80
+ });
81
+ it("throws on unknown provider", () => {
82
+ process.env.VSKILL_EVAL_PROVIDER = "gpt-magic";
83
+ expect(() => createLlmClient()).toThrow('Unknown VSKILL_EVAL_PROVIDER: "gpt-magic"');
84
+ });
85
+ it("selects codex-cli provider from env", () => {
86
+ process.env.VSKILL_EVAL_PROVIDER = "codex-cli";
87
+ const client = createLlmClient();
88
+ expect(client.model).toBe("codex-o4-mini");
89
+ });
90
+ it("selects gemini-cli provider from env", () => {
91
+ process.env.VSKILL_EVAL_PROVIDER = "gemini-cli";
92
+ const client = createLlmClient();
93
+ expect(client.model).toBe("gemini-2.5-pro");
94
+ });
95
+ // -------------------------------------------------------------------------
96
+ // Override params
97
+ // -------------------------------------------------------------------------
98
+ it("override provider takes precedence over env var", () => {
99
+ process.env.VSKILL_EVAL_PROVIDER = "ollama";
100
+ process.env.ANTHROPIC_API_KEY = "test-key";
101
+ const client = createLlmClient({ provider: "anthropic" });
102
+ expect(client.model).toBe("claude-sonnet-4-6");
103
+ });
104
+ it("override model takes precedence over env var", () => {
105
+ process.env.ANTHROPIC_API_KEY = "test-key";
106
+ const client = createLlmClient({ provider: "anthropic", model: "claude-opus-4-6" });
107
+ expect(client.model).toBe("claude-opus-4-6");
108
+ });
109
+ it("override provider=claude-cli with custom model", () => {
110
+ const client = createLlmClient({ provider: "claude-cli", model: "opus" });
111
+ expect(client.model).toBe("claude-opus");
112
+ });
113
+ it("override provider=ollama with custom model", () => {
114
+ const client = createLlmClient({ provider: "ollama", model: "qwen2.5:32b" });
115
+ expect(client.model).toBe("qwen2.5:32b");
116
+ });
117
+ it("override provider=claude-cli inside Claude Code session", () => {
118
+ process.env.CLAUDECODE = "1";
119
+ const client = createLlmClient({ provider: "claude-cli" });
120
+ expect(client.model).toBe("claude-sonnet");
121
+ });
122
+ it("override provider=codex-cli with custom model", () => {
123
+ const client = createLlmClient({ provider: "codex-cli", model: "codex-1" });
124
+ expect(client.model).toBe("codex-codex-1");
125
+ });
126
+ it("override provider=gemini-cli with custom model", () => {
127
+ const client = createLlmClient({ provider: "gemini-cli", model: "gemini-2.5-flash" });
128
+ expect(client.model).toBe("gemini-2.5-flash");
129
+ });
130
+ // -------------------------------------------------------------------------
131
+ // Anthropic provider
132
+ // -------------------------------------------------------------------------
133
+ describe("anthropic provider", () => {
134
+ beforeEach(() => {
135
+ process.env.VSKILL_EVAL_PROVIDER = "anthropic";
136
+ process.env.ANTHROPIC_API_KEY = "test-key";
137
+ });
138
+ it("returns text content on successful generate call", async () => {
139
+ mockCreate.mockResolvedValue({
140
+ content: [{ type: "text", text: "Generated response" }],
141
+ usage: { input_tokens: 50, output_tokens: 100 },
142
+ });
143
+ const client = createLlmClient();
144
+ const result = await client.generate("system prompt", "user prompt");
145
+ expect(result.text).toBe("Generated response");
146
+ expect(result.durationMs).toBeGreaterThanOrEqual(0);
147
+ expect(result.inputTokens).toBe(50);
148
+ expect(result.outputTokens).toBe(100);
149
+ expect(mockCreate).toHaveBeenCalledOnce();
150
+ });
151
+ it("uses default model claude-sonnet-4-6", async () => {
152
+ mockCreate.mockResolvedValue({
153
+ content: [{ type: "text", text: "ok" }],
154
+ });
155
+ const client = createLlmClient();
156
+ await client.generate("sys", "usr");
157
+ expect(mockCreate).toHaveBeenCalledWith(expect.objectContaining({ model: "claude-sonnet-4-6" }), expect.anything());
158
+ });
159
+ it("uses custom model from VSKILL_EVAL_MODEL", async () => {
160
+ process.env.VSKILL_EVAL_MODEL = "claude-opus-4-6";
161
+ mockCreate.mockResolvedValue({
162
+ content: [{ type: "text", text: "ok" }],
163
+ });
164
+ const client = createLlmClient();
165
+ await client.generate("sys", "usr");
166
+ expect(mockCreate).toHaveBeenCalledWith(expect.objectContaining({ model: "claude-opus-4-6" }), expect.anything());
167
+ });
168
+ it("propagates network error from SDK", async () => {
169
+ mockCreate.mockRejectedValue(new Error("Connection timeout"));
170
+ const client = createLlmClient();
171
+ await expect(client.generate("sys", "usr")).rejects.toThrow("Connection timeout");
172
+ });
173
+ it("passes system and user prompts correctly", async () => {
174
+ mockCreate.mockResolvedValue({
175
+ content: [{ type: "text", text: "ok" }],
176
+ });
177
+ const client = createLlmClient();
178
+ await client.generate("my system prompt", "my user prompt");
179
+ expect(mockCreate).toHaveBeenCalledWith(expect.objectContaining({
180
+ system: "my system prompt",
181
+ messages: [{ role: "user", content: "my user prompt" }],
182
+ max_tokens: 4096,
183
+ }), expect.anything());
184
+ });
185
+ it("throws when ANTHROPIC_API_KEY is not set", () => {
186
+ delete process.env.ANTHROPIC_API_KEY;
187
+ expect(() => createLlmClient()).toThrow("ANTHROPIC_API_KEY is not set");
188
+ });
189
+ });
190
+ // -------------------------------------------------------------------------
191
+ // Claude CLI provider
192
+ // -------------------------------------------------------------------------
193
+ describe("claude-cli provider", () => {
194
+ beforeEach(() => {
195
+ process.env.VSKILL_EVAL_PROVIDER = "claude-cli";
196
+ });
197
+ it("spawns claude CLI with -p and --model, pipes prompt via stdin", async () => {
198
+ mockSpawn.mockReturnValue(createFakeProc("CLI response\n"));
199
+ const client = createLlmClient();
200
+ const result = await client.generate("system prompt", "user prompt");
201
+ expect(result.text).toBe("CLI response");
202
+ expect(mockSpawn).toHaveBeenCalledWith("claude", ["-p", "--model", "sonnet"], expect.objectContaining({ stdio: ["pipe", "pipe", "pipe"] }));
203
+ // Verify prompt was piped via stdin
204
+ const proc = mockSpawn.mock.results[0].value;
205
+ expect(proc.stdin.end).toHaveBeenCalledWith("system prompt\n\nuser prompt");
206
+ });
207
+ it("defaults to sonnet model", () => {
208
+ const client = createLlmClient();
209
+ expect(client.model).toBe("claude-sonnet");
210
+ });
211
+ it("passes custom model from VSKILL_EVAL_MODEL", async () => {
212
+ process.env.VSKILL_EVAL_MODEL = "opus";
213
+ mockSpawn.mockReturnValue(createFakeProc("ok\n"));
214
+ const client = createLlmClient();
215
+ expect(client.model).toBe("claude-opus");
216
+ await client.generate("sys", "usr");
217
+ expect(mockSpawn).toHaveBeenCalledWith("claude", ["-p", "--model", "opus"], expect.anything());
218
+ });
219
+ it("throws helpful error when claude CLI not found", async () => {
220
+ const proc = new EventEmitter();
221
+ proc.stdout = new EventEmitter();
222
+ proc.stderr = new EventEmitter();
223
+ proc.stdin = { end: vi.fn(), write: vi.fn() };
224
+ proc.kill = vi.fn();
225
+ mockSpawn.mockReturnValue(proc);
226
+ const client = createLlmClient();
227
+ const promise = client.generate("sys", "usr");
228
+ // Emit ENOENT error
229
+ setTimeout(() => {
230
+ const err = new Error("spawn claude ENOENT");
231
+ err.code = "ENOENT";
232
+ proc.emit("error", err);
233
+ }, 0);
234
+ await expect(promise).rejects.toThrow("Claude CLI not found");
235
+ });
236
+ it("throws with truncated error on non-zero exit", async () => {
237
+ mockSpawn.mockReturnValue(createFakeProc("", 1, "Something went wrong"));
238
+ const client = createLlmClient();
239
+ await expect(client.generate("sys", "usr")).rejects.toThrow("Claude CLI exited with code 1: Something went wrong");
240
+ });
241
+ it("works inside Claude Code session (strips CLAUDE* env vars)", async () => {
242
+ process.env.CLAUDECODE = "1";
243
+ mockSpawn.mockReturnValue(createFakeProc("response\n"));
244
+ const client = createLlmClient();
245
+ expect(client.model).toBe("claude-sonnet");
246
+ await client.generate("sys", "usr");
247
+ // Verify CLAUDE* env vars are stripped from spawned process
248
+ const spawnCall = mockSpawn.mock.calls[0];
249
+ const env = spawnCall[2].env;
250
+ expect(env.CLAUDECODE).toBeUndefined();
251
+ });
252
+ });
253
+ // -------------------------------------------------------------------------
254
+ // Codex CLI provider
255
+ // -------------------------------------------------------------------------
256
+ describe("codex-cli provider", () => {
257
+ beforeEach(() => {
258
+ process.env.VSKILL_EVAL_PROVIDER = "codex-cli";
259
+ });
260
+ it("spawns codex CLI with exec and --model, pipes prompt via stdin", async () => {
261
+ mockSpawn.mockReturnValue(createFakeProc("Codex response\n"));
262
+ const client = createLlmClient();
263
+ const result = await client.generate("system prompt", "user prompt");
264
+ expect(result.text).toBe("Codex response");
265
+ expect(mockSpawn).toHaveBeenCalledWith("codex", ["exec", "--model", "o4-mini"], expect.objectContaining({ stdio: ["pipe", "pipe", "pipe"] }));
266
+ // Verify prompt was piped via stdin
267
+ const proc = mockSpawn.mock.results[0].value;
268
+ expect(proc.stdin.end).toHaveBeenCalledWith("system prompt\n\nuser prompt");
269
+ });
270
+ it("defaults to o4-mini model", () => {
271
+ const client = createLlmClient();
272
+ expect(client.model).toBe("codex-o4-mini");
273
+ });
274
+ it("passes custom model from VSKILL_EVAL_MODEL", async () => {
275
+ process.env.VSKILL_EVAL_MODEL = "codex-1";
276
+ mockSpawn.mockReturnValue(createFakeProc("ok\n"));
277
+ const client = createLlmClient();
278
+ expect(client.model).toBe("codex-codex-1");
279
+ await client.generate("sys", "usr");
280
+ expect(mockSpawn).toHaveBeenCalledWith("codex", ["exec", "--model", "codex-1"], expect.anything());
281
+ });
282
+ it("passes gpt-5.3-codex model", async () => {
283
+ process.env.VSKILL_EVAL_MODEL = "gpt-5.3-codex";
284
+ mockSpawn.mockReturnValue(createFakeProc("ok\n"));
285
+ const client = createLlmClient();
286
+ expect(client.model).toBe("codex-gpt-5.3-codex");
287
+ await client.generate("sys", "usr");
288
+ expect(mockSpawn).toHaveBeenCalledWith("codex", ["exec", "--model", "gpt-5.3-codex"], expect.anything());
289
+ });
290
+ it("throws helpful error when codex CLI not found", async () => {
291
+ const proc = new EventEmitter();
292
+ proc.stdout = new EventEmitter();
293
+ proc.stderr = new EventEmitter();
294
+ proc.stdin = { end: vi.fn(), write: vi.fn() };
295
+ proc.kill = vi.fn();
296
+ mockSpawn.mockReturnValue(proc);
297
+ const client = createLlmClient();
298
+ const promise = client.generate("sys", "usr");
299
+ // Emit ENOENT error
300
+ setTimeout(() => {
301
+ const err = new Error("spawn codex ENOENT");
302
+ err.code = "ENOENT";
303
+ proc.emit("error", err);
304
+ }, 0);
305
+ await expect(promise).rejects.toThrow("Codex CLI not found");
306
+ });
307
+ it("error message suggests install command and fallback provider", async () => {
308
+ const proc = new EventEmitter();
309
+ proc.stdout = new EventEmitter();
310
+ proc.stderr = new EventEmitter();
311
+ proc.stdin = { end: vi.fn(), write: vi.fn() };
312
+ proc.kill = vi.fn();
313
+ mockSpawn.mockReturnValue(proc);
314
+ const client = createLlmClient();
315
+ const promise = client.generate("sys", "usr");
316
+ setTimeout(() => {
317
+ const err = new Error("spawn codex ENOENT");
318
+ err.code = "ENOENT";
319
+ proc.emit("error", err);
320
+ }, 0);
321
+ await expect(promise).rejects.toThrow("npm install -g @openai/codex");
322
+ // Also suggests claude-cli as fallback
323
+ });
324
+ it("throws with truncated error on non-zero exit", async () => {
325
+ mockSpawn.mockReturnValue(createFakeProc("", 1, "Authentication failed"));
326
+ const client = createLlmClient();
327
+ await expect(client.generate("sys", "usr")).rejects.toThrow("Codex CLI exited with code 1: Authentication failed");
328
+ });
329
+ it("returns null for token counts (CLI does not report them)", async () => {
330
+ mockSpawn.mockReturnValue(createFakeProc("response\n"));
331
+ const client = createLlmClient();
332
+ const result = await client.generate("sys", "usr");
333
+ expect(result.inputTokens).toBeNull();
334
+ expect(result.outputTokens).toBeNull();
335
+ });
336
+ it("measures duration", async () => {
337
+ mockSpawn.mockReturnValue(createFakeProc("response\n"));
338
+ const client = createLlmClient();
339
+ const result = await client.generate("sys", "usr");
340
+ expect(result.durationMs).toBeGreaterThanOrEqual(0);
341
+ });
342
+ it("does not strip env vars (no nesting detection like Claude)", async () => {
343
+ process.env.CLAUDECODE = "1";
344
+ mockSpawn.mockReturnValue(createFakeProc("response\n"));
345
+ const client = createLlmClient();
346
+ await client.generate("sys", "usr");
347
+ // Codex CLI doesn't strip CLAUDE* env vars — they should be preserved
348
+ const spawnCall = mockSpawn.mock.calls[0];
349
+ const env = spawnCall[2].env;
350
+ expect(env).toBeDefined();
351
+ expect(env.CLAUDECODE).toBe("1"); // preserved, unlike claude-cli provider
352
+ });
353
+ });
354
+ // -------------------------------------------------------------------------
355
+ // Gemini CLI provider
356
+ // -------------------------------------------------------------------------
357
+ describe("gemini-cli provider", () => {
358
+ beforeEach(() => {
359
+ process.env.VSKILL_EVAL_PROVIDER = "gemini-cli";
360
+ });
361
+ it("spawns gemini CLI with -p and --model, pipes prompt via stdin", async () => {
362
+ mockSpawn.mockReturnValue(createFakeProc("Gemini response\n"));
363
+ const client = createLlmClient();
364
+ const result = await client.generate("system prompt", "user prompt");
365
+ expect(result.text).toBe("Gemini response");
366
+ expect(mockSpawn).toHaveBeenCalledWith("gemini", ["-p", "--model", "gemini-2.5-pro"], expect.objectContaining({ stdio: ["pipe", "pipe", "pipe"] }));
367
+ // Verify prompt was piped via stdin
368
+ const proc = mockSpawn.mock.results[0].value;
369
+ expect(proc.stdin.end).toHaveBeenCalledWith("system prompt\n\nuser prompt");
370
+ });
371
+ it("defaults to gemini-2.5-pro model", () => {
372
+ const client = createLlmClient();
373
+ expect(client.model).toBe("gemini-2.5-pro");
374
+ });
375
+ it("passes custom model from VSKILL_EVAL_MODEL", async () => {
376
+ process.env.VSKILL_EVAL_MODEL = "gemini-2.5-flash";
377
+ mockSpawn.mockReturnValue(createFakeProc("ok\n"));
378
+ const client = createLlmClient();
379
+ expect(client.model).toBe("gemini-2.5-flash");
380
+ await client.generate("sys", "usr");
381
+ expect(mockSpawn).toHaveBeenCalledWith("gemini", ["-p", "--model", "gemini-2.5-flash"], expect.anything());
382
+ });
383
+ it("uses model name directly without prefix (already has gemini- prefix)", () => {
384
+ const client = createLlmClient();
385
+ // Unlike claude-cli (claude-{model}) or codex-cli (codex-{model}),
386
+ // gemini models already have the gemini- prefix in their names
387
+ expect(client.model).toBe("gemini-2.5-pro");
388
+ });
389
+ it("throws helpful error when gemini CLI not found", async () => {
390
+ const proc = new EventEmitter();
391
+ proc.stdout = new EventEmitter();
392
+ proc.stderr = new EventEmitter();
393
+ proc.stdin = { end: vi.fn(), write: vi.fn() };
394
+ proc.kill = vi.fn();
395
+ mockSpawn.mockReturnValue(proc);
396
+ const client = createLlmClient();
397
+ const promise = client.generate("sys", "usr");
398
+ // Emit ENOENT error
399
+ setTimeout(() => {
400
+ const err = new Error("spawn gemini ENOENT");
401
+ err.code = "ENOENT";
402
+ proc.emit("error", err);
403
+ }, 0);
404
+ await expect(promise).rejects.toThrow("Gemini CLI not found");
405
+ });
406
+ it("error message suggests install via npm", async () => {
407
+ const proc = new EventEmitter();
408
+ proc.stdout = new EventEmitter();
409
+ proc.stderr = new EventEmitter();
410
+ proc.stdin = { end: vi.fn(), write: vi.fn() };
411
+ proc.kill = vi.fn();
412
+ mockSpawn.mockReturnValue(proc);
413
+ const client = createLlmClient();
414
+ const promise = client.generate("sys", "usr");
415
+ setTimeout(() => {
416
+ const err = new Error("spawn gemini ENOENT");
417
+ err.code = "ENOENT";
418
+ proc.emit("error", err);
419
+ }, 0);
420
+ await expect(promise).rejects.toThrow("npm install -g @google/gemini-cli");
421
+ });
422
+ it("throws with truncated error on non-zero exit", async () => {
423
+ mockSpawn.mockReturnValue(createFakeProc("", 1, "Rate limit exceeded"));
424
+ const client = createLlmClient();
425
+ await expect(client.generate("sys", "usr")).rejects.toThrow("Gemini CLI exited with code 1: Rate limit exceeded");
426
+ });
427
+ it("returns null for token counts (CLI does not report them)", async () => {
428
+ mockSpawn.mockReturnValue(createFakeProc("response\n"));
429
+ const client = createLlmClient();
430
+ const result = await client.generate("sys", "usr");
431
+ expect(result.inputTokens).toBeNull();
432
+ expect(result.outputTokens).toBeNull();
433
+ });
434
+ it("measures duration", async () => {
435
+ mockSpawn.mockReturnValue(createFakeProc("response\n"));
436
+ const client = createLlmClient();
437
+ const result = await client.generate("sys", "usr");
438
+ expect(result.durationMs).toBeGreaterThanOrEqual(0);
439
+ });
440
+ it("does not strip env vars", async () => {
441
+ process.env.GOOGLE_API_KEY = "test-key";
442
+ mockSpawn.mockReturnValue(createFakeProc("response\n"));
443
+ const client = createLlmClient();
444
+ await client.generate("sys", "usr");
445
+ // Gemini CLI doesn't strip any env vars — all should be preserved
446
+ const spawnCall = mockSpawn.mock.calls[0];
447
+ const env = spawnCall[2].env;
448
+ expect(env).toBeDefined();
449
+ expect(env.GOOGLE_API_KEY).toBe("test-key"); // preserved
450
+ });
451
+ });
452
+ // -------------------------------------------------------------------------
453
+ // Cross-provider consistency
454
+ // -------------------------------------------------------------------------
455
+ describe("cross-provider consistency", () => {
456
+ it("all CLI providers use stdin piping for prompts", async () => {
457
+ const providers = [
458
+ { provider: "claude-cli", binary: "claude" },
459
+ { provider: "codex-cli", binary: "codex" },
460
+ { provider: "gemini-cli", binary: "gemini" },
461
+ ];
462
+ for (const { provider, binary } of providers) {
463
+ mockSpawn.mockReturnValue(createFakeProc("ok\n"));
464
+ process.env.VSKILL_EVAL_PROVIDER = provider;
465
+ const client = createLlmClient();
466
+ await client.generate("sys", "usr");
467
+ const proc = mockSpawn.mock.results[mockSpawn.mock.results.length - 1].value;
468
+ expect(proc.stdin.end).toHaveBeenCalledWith("sys\n\nusr");
469
+ vi.resetAllMocks();
470
+ }
471
+ });
472
+ it("all CLI providers use pipe stdio", async () => {
473
+ const providers = [
474
+ { provider: "claude-cli" },
475
+ { provider: "codex-cli" },
476
+ { provider: "gemini-cli" },
477
+ ];
478
+ for (const { provider } of providers) {
479
+ mockSpawn.mockReturnValue(createFakeProc("ok\n"));
480
+ process.env.VSKILL_EVAL_PROVIDER = provider;
481
+ const client = createLlmClient();
482
+ await client.generate("sys", "usr");
483
+ const spawnCall = mockSpawn.mock.calls[mockSpawn.mock.calls.length - 1];
484
+ expect(spawnCall[2].stdio).toEqual(["pipe", "pipe", "pipe"]);
485
+ vi.resetAllMocks();
486
+ }
487
+ });
488
+ it("all providers implement the LlmClient interface", () => {
489
+ const configs = [
490
+ { provider: "claude-cli", setup: () => { } },
491
+ { provider: "codex-cli", setup: () => { } },
492
+ { provider: "gemini-cli", setup: () => { } },
493
+ { provider: "anthropic", setup: () => { process.env.ANTHROPIC_API_KEY = "test"; } },
494
+ { provider: "ollama", setup: () => { } },
495
+ ];
496
+ for (const { provider, setup } of configs) {
497
+ setup();
498
+ const client = createLlmClient({ provider });
499
+ expect(client).toHaveProperty("model");
500
+ expect(client).toHaveProperty("generate");
501
+ expect(typeof client.generate).toBe("function");
502
+ expect(typeof client.model).toBe("string");
503
+ }
504
+ });
505
+ });
506
+ // -------------------------------------------------------------------------
507
+ // Ollama provider
508
+ // -------------------------------------------------------------------------
509
+ describe("ollama provider", () => {
510
+ beforeEach(() => {
511
+ process.env.VSKILL_EVAL_PROVIDER = "ollama";
512
+ });
513
+ it("uses default model llama3.1:8b", () => {
514
+ const client = createLlmClient();
515
+ expect(client.model).toBe("llama3.1:8b");
516
+ });
517
+ it("uses custom model from VSKILL_EVAL_MODEL", () => {
518
+ process.env.VSKILL_EVAL_MODEL = "qwen2.5:32b";
519
+ const client = createLlmClient();
520
+ expect(client.model).toBe("qwen2.5:32b");
521
+ });
522
+ it("calls Ollama HTTP API with correct payload", async () => {
523
+ const mockFetch = vi.spyOn(globalThis, "fetch").mockResolvedValue(new Response(JSON.stringify({ response: "Ollama reply" }), { status: 200 }));
524
+ const client = createLlmClient();
525
+ const result = await client.generate("system prompt", "user prompt");
526
+ expect(result.text).toBe("Ollama reply");
527
+ expect(mockFetch).toHaveBeenCalledWith("http://localhost:11434/api/generate", expect.objectContaining({
528
+ method: "POST",
529
+ body: expect.stringContaining('"model":"llama3.1:8b"'),
530
+ }));
531
+ mockFetch.mockRestore();
532
+ });
533
+ it("uses custom base URL from OLLAMA_BASE_URL", async () => {
534
+ process.env.OLLAMA_BASE_URL = "http://gpu-server:11434";
535
+ const mockFetch = vi.spyOn(globalThis, "fetch").mockResolvedValue(new Response(JSON.stringify({ response: "ok" }), { status: 200 }));
536
+ const client = createLlmClient();
537
+ await client.generate("sys", "usr");
538
+ expect(mockFetch).toHaveBeenCalledWith("http://gpu-server:11434/api/generate", expect.anything());
539
+ mockFetch.mockRestore();
540
+ });
541
+ });
542
+ });
543
+ //# sourceMappingURL=llm.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"llm.test.js","sourceRoot":"","sources":["../../../src/eval/__tests__/llm.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ export {};