vskill 0.5.0 → 0.5.2

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 (207) hide show
  1. package/dist/eval-ui/assets/{index-CcnlpaWS.js → index-CxHCKEhf.js} +2 -2
  2. package/dist/eval-ui/index.html +1 -1
  3. package/package.json +1 -1
  4. package/dist/agents/agents-registry.test.d.ts +0 -1
  5. package/dist/agents/agents-registry.test.js +0 -248
  6. package/dist/agents/agents-registry.test.js.map +0 -1
  7. package/dist/api/client.test.d.ts +0 -1
  8. package/dist/api/client.test.js +0 -428
  9. package/dist/api/client.test.js.map +0 -1
  10. package/dist/audit/audit-integration.test.d.ts +0 -1
  11. package/dist/audit/audit-integration.test.js +0 -92
  12. package/dist/audit/audit-integration.test.js.map +0 -1
  13. package/dist/audit/audit-llm.test.d.ts +0 -1
  14. package/dist/audit/audit-llm.test.js +0 -110
  15. package/dist/audit/audit-llm.test.js.map +0 -1
  16. package/dist/audit/audit-patterns.test.d.ts +0 -1
  17. package/dist/audit/audit-patterns.test.js +0 -91
  18. package/dist/audit/audit-patterns.test.js.map +0 -1
  19. package/dist/audit/audit-scanner.test.d.ts +0 -1
  20. package/dist/audit/audit-scanner.test.js +0 -112
  21. package/dist/audit/audit-scanner.test.js.map +0 -1
  22. package/dist/audit/audit-types.test.d.ts +0 -1
  23. package/dist/audit/audit-types.test.js +0 -140
  24. package/dist/audit/audit-types.test.js.map +0 -1
  25. package/dist/audit/config.test.d.ts +0 -1
  26. package/dist/audit/config.test.js +0 -44
  27. package/dist/audit/config.test.js.map +0 -1
  28. package/dist/audit/file-discovery.test.d.ts +0 -1
  29. package/dist/audit/file-discovery.test.js +0 -120
  30. package/dist/audit/file-discovery.test.js.map +0 -1
  31. package/dist/audit/fix-suggestions.test.d.ts +0 -1
  32. package/dist/audit/fix-suggestions.test.js +0 -35
  33. package/dist/audit/fix-suggestions.test.js.map +0 -1
  34. package/dist/audit/formatters/json-formatter.test.d.ts +0 -1
  35. package/dist/audit/formatters/json-formatter.test.js +0 -49
  36. package/dist/audit/formatters/json-formatter.test.js.map +0 -1
  37. package/dist/audit/formatters/report-formatter.test.d.ts +0 -1
  38. package/dist/audit/formatters/report-formatter.test.js +0 -51
  39. package/dist/audit/formatters/report-formatter.test.js.map +0 -1
  40. package/dist/audit/formatters/sarif-formatter.test.d.ts +0 -1
  41. package/dist/audit/formatters/sarif-formatter.test.js +0 -71
  42. package/dist/audit/formatters/sarif-formatter.test.js.map +0 -1
  43. package/dist/audit/formatters/terminal-formatter.test.d.ts +0 -1
  44. package/dist/audit/formatters/terminal-formatter.test.js +0 -51
  45. package/dist/audit/formatters/terminal-formatter.test.js.map +0 -1
  46. package/dist/blocklist/blocklist-e2e.test.d.ts +0 -1
  47. package/dist/blocklist/blocklist-e2e.test.js +0 -346
  48. package/dist/blocklist/blocklist-e2e.test.js.map +0 -1
  49. package/dist/blocklist/blocklist.test.d.ts +0 -1
  50. package/dist/blocklist/blocklist.test.js +0 -259
  51. package/dist/blocklist/blocklist.test.js.map +0 -1
  52. package/dist/commands/__tests__/eval-router.test.d.ts +0 -1
  53. package/dist/commands/__tests__/eval-router.test.js +0 -60
  54. package/dist/commands/__tests__/eval-router.test.js.map +0 -1
  55. package/dist/commands/__tests__/eval-serve.test.d.ts +0 -1
  56. package/dist/commands/__tests__/eval-serve.test.js +0 -23
  57. package/dist/commands/__tests__/eval-serve.test.js.map +0 -1
  58. package/dist/commands/add-blocklist-e2e.test.d.ts +0 -1
  59. package/dist/commands/add-blocklist-e2e.test.js +0 -397
  60. package/dist/commands/add-blocklist-e2e.test.js.map +0 -1
  61. package/dist/commands/add-wizard.test.d.ts +0 -1
  62. package/dist/commands/add-wizard.test.js +0 -392
  63. package/dist/commands/add-wizard.test.js.map +0 -1
  64. package/dist/commands/add.test.d.ts +0 -1
  65. package/dist/commands/add.test.js +0 -2365
  66. package/dist/commands/add.test.js.map +0 -1
  67. package/dist/commands/audit.test.d.ts +0 -1
  68. package/dist/commands/audit.test.js +0 -79
  69. package/dist/commands/audit.test.js.map +0 -1
  70. package/dist/commands/blocklist.test.d.ts +0 -1
  71. package/dist/commands/blocklist.test.js +0 -158
  72. package/dist/commands/blocklist.test.js.map +0 -1
  73. package/dist/commands/eval/__tests__/coverage.test.d.ts +0 -1
  74. package/dist/commands/eval/__tests__/coverage.test.js +0 -122
  75. package/dist/commands/eval/__tests__/coverage.test.js.map +0 -1
  76. package/dist/commands/eval/__tests__/generate-all.test.d.ts +0 -1
  77. package/dist/commands/eval/__tests__/generate-all.test.js +0 -133
  78. package/dist/commands/eval/__tests__/generate-all.test.js.map +0 -1
  79. package/dist/commands/eval/__tests__/init.test.d.ts +0 -1
  80. package/dist/commands/eval/__tests__/init.test.js +0 -116
  81. package/dist/commands/eval/__tests__/init.test.js.map +0 -1
  82. package/dist/commands/eval/__tests__/run.test.d.ts +0 -1
  83. package/dist/commands/eval/__tests__/run.test.js +0 -186
  84. package/dist/commands/eval/__tests__/run.test.js.map +0 -1
  85. package/dist/commands/find.test.d.ts +0 -1
  86. package/dist/commands/find.test.js +0 -481
  87. package/dist/commands/find.test.js.map +0 -1
  88. package/dist/commands/marketplace.test.d.ts +0 -1
  89. package/dist/commands/marketplace.test.js +0 -129
  90. package/dist/commands/marketplace.test.js.map +0 -1
  91. package/dist/commands/remove.test.d.ts +0 -1
  92. package/dist/commands/remove.test.js +0 -164
  93. package/dist/commands/remove.test.js.map +0 -1
  94. package/dist/commands/should-skip.test.d.ts +0 -1
  95. package/dist/commands/should-skip.test.js +0 -56
  96. package/dist/commands/should-skip.test.js.map +0 -1
  97. package/dist/commands/submit.test.d.ts +0 -1
  98. package/dist/commands/submit.test.js +0 -83
  99. package/dist/commands/submit.test.js.map +0 -1
  100. package/dist/commands/update.test.d.ts +0 -1
  101. package/dist/commands/update.test.js +0 -250
  102. package/dist/commands/update.test.js.map +0 -1
  103. package/dist/discovery/github-tree.test.d.ts +0 -1
  104. package/dist/discovery/github-tree.test.js +0 -372
  105. package/dist/discovery/github-tree.test.js.map +0 -1
  106. package/dist/eval/__tests__/activation-tester.test.d.ts +0 -1
  107. package/dist/eval/__tests__/activation-tester.test.js +0 -203
  108. package/dist/eval/__tests__/activation-tester.test.js.map +0 -1
  109. package/dist/eval/__tests__/benchmark-history.test.d.ts +0 -1
  110. package/dist/eval/__tests__/benchmark-history.test.js +0 -422
  111. package/dist/eval/__tests__/benchmark-history.test.js.map +0 -1
  112. package/dist/eval/__tests__/benchmark.test.d.ts +0 -1
  113. package/dist/eval/__tests__/benchmark.test.js +0 -94
  114. package/dist/eval/__tests__/benchmark.test.js.map +0 -1
  115. package/dist/eval/__tests__/comparator.test.d.ts +0 -1
  116. package/dist/eval/__tests__/comparator.test.js +0 -282
  117. package/dist/eval/__tests__/comparator.test.js.map +0 -1
  118. package/dist/eval/__tests__/judge.test.d.ts +0 -1
  119. package/dist/eval/__tests__/judge.test.js +0 -122
  120. package/dist/eval/__tests__/judge.test.js.map +0 -1
  121. package/dist/eval/__tests__/llm.test.d.ts +0 -1
  122. package/dist/eval/__tests__/llm.test.js +0 -543
  123. package/dist/eval/__tests__/llm.test.js.map +0 -1
  124. package/dist/eval/__tests__/mcp-detector.test.d.ts +0 -1
  125. package/dist/eval/__tests__/mcp-detector.test.js +0 -180
  126. package/dist/eval/__tests__/mcp-detector.test.js.map +0 -1
  127. package/dist/eval/__tests__/prompt-builder.test.d.ts +0 -1
  128. package/dist/eval/__tests__/prompt-builder.test.js +0 -142
  129. package/dist/eval/__tests__/prompt-builder.test.js.map +0 -1
  130. package/dist/eval/__tests__/schema.test.d.ts +0 -1
  131. package/dist/eval/__tests__/schema.test.js +0 -247
  132. package/dist/eval/__tests__/schema.test.js.map +0 -1
  133. package/dist/eval/__tests__/skill-scanner.test.d.ts +0 -1
  134. package/dist/eval/__tests__/skill-scanner.test.js +0 -228
  135. package/dist/eval/__tests__/skill-scanner.test.js.map +0 -1
  136. package/dist/eval/__tests__/verdict.test.d.ts +0 -1
  137. package/dist/eval/__tests__/verdict.test.js +0 -47
  138. package/dist/eval/__tests__/verdict.test.js.map +0 -1
  139. package/dist/eval-server/__tests__/benchmark-runner.test.d.ts +0 -1
  140. package/dist/eval-server/__tests__/benchmark-runner.test.js +0 -301
  141. package/dist/eval-server/__tests__/benchmark-runner.test.js.map +0 -1
  142. package/dist/eval-server/__tests__/comparison-sse-events.test.d.ts +0 -1
  143. package/dist/eval-server/__tests__/comparison-sse-events.test.js +0 -278
  144. package/dist/eval-server/__tests__/comparison-sse-events.test.js.map +0 -1
  145. package/dist/eval-server/__tests__/sse-helpers.test.d.ts +0 -1
  146. package/dist/eval-server/__tests__/sse-helpers.test.js +0 -128
  147. package/dist/eval-server/__tests__/sse-helpers.test.js.map +0 -1
  148. package/dist/installer/canonical.test.d.ts +0 -1
  149. package/dist/installer/canonical.test.js +0 -264
  150. package/dist/installer/canonical.test.js.map +0 -1
  151. package/dist/lockfile/lockfile.test.d.ts +0 -1
  152. package/dist/lockfile/lockfile.test.js +0 -204
  153. package/dist/lockfile/lockfile.test.js.map +0 -1
  154. package/dist/lockfile/project-root.test.d.ts +0 -1
  155. package/dist/lockfile/project-root.test.js +0 -49
  156. package/dist/lockfile/project-root.test.js.map +0 -1
  157. package/dist/marketplace/marketplace.test.d.ts +0 -1
  158. package/dist/marketplace/marketplace.test.js +0 -312
  159. package/dist/marketplace/marketplace.test.js.map +0 -1
  160. package/dist/resolvers/source-resolver.test.d.ts +0 -1
  161. package/dist/resolvers/source-resolver.test.js +0 -104
  162. package/dist/resolvers/source-resolver.test.js.map +0 -1
  163. package/dist/resolvers/url-resolver.test.d.ts +0 -1
  164. package/dist/resolvers/url-resolver.test.js +0 -49
  165. package/dist/resolvers/url-resolver.test.js.map +0 -1
  166. package/dist/scanner/dci-integration.test.d.ts +0 -1
  167. package/dist/scanner/dci-integration.test.js +0 -83
  168. package/dist/scanner/dci-integration.test.js.map +0 -1
  169. package/dist/scanner/patterns.test.d.ts +0 -1
  170. package/dist/scanner/patterns.test.js +0 -832
  171. package/dist/scanner/patterns.test.js.map +0 -1
  172. package/dist/scanner/tier1.test.d.ts +0 -1
  173. package/dist/scanner/tier1.test.js +0 -305
  174. package/dist/scanner/tier1.test.js.map +0 -1
  175. package/dist/security/platform-security.test.d.ts +0 -1
  176. package/dist/security/platform-security.test.js +0 -92
  177. package/dist/security/platform-security.test.js.map +0 -1
  178. package/dist/settings/settings.test.d.ts +0 -1
  179. package/dist/settings/settings.test.js +0 -103
  180. package/dist/settings/settings.test.js.map +0 -1
  181. package/dist/updater/source-fetcher.test.d.ts +0 -1
  182. package/dist/updater/source-fetcher.test.js +0 -192
  183. package/dist/updater/source-fetcher.test.js.map +0 -1
  184. package/dist/utils/__tests__/paths.test.d.ts +0 -1
  185. package/dist/utils/__tests__/paths.test.js +0 -22
  186. package/dist/utils/__tests__/paths.test.js.map +0 -1
  187. package/dist/utils/__tests__/resolve-binary.integration.test.d.ts +0 -1
  188. package/dist/utils/__tests__/resolve-binary.integration.test.js +0 -138
  189. package/dist/utils/__tests__/resolve-binary.integration.test.js.map +0 -1
  190. package/dist/utils/__tests__/resolve-binary.test.d.ts +0 -1
  191. package/dist/utils/__tests__/resolve-binary.test.js +0 -175
  192. package/dist/utils/__tests__/resolve-binary.test.js.map +0 -1
  193. package/dist/utils/__tests__/validation.test.d.ts +0 -1
  194. package/dist/utils/__tests__/validation.test.js +0 -107
  195. package/dist/utils/__tests__/validation.test.js.map +0 -1
  196. package/dist/utils/agent-filter.test.d.ts +0 -1
  197. package/dist/utils/agent-filter.test.js +0 -75
  198. package/dist/utils/agent-filter.test.js.map +0 -1
  199. package/dist/utils/output.test.d.ts +0 -1
  200. package/dist/utils/output.test.js +0 -28
  201. package/dist/utils/output.test.js.map +0 -1
  202. package/dist/utils/project-root.test.d.ts +0 -1
  203. package/dist/utils/project-root.test.js +0 -74
  204. package/dist/utils/project-root.test.js.map +0 -1
  205. package/dist/utils/prompts.test.d.ts +0 -1
  206. package/dist/utils/prompts.test.js +0 -285
  207. package/dist/utils/prompts.test.js.map +0 -1
@@ -1,180 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { detectMcpDependencies, detectSkillDependencies } from "../mcp-detector.js";
3
- describe("detectMcpDependencies", () => {
4
- it("detects Slack tool patterns in body", () => {
5
- const content = `---
6
- description: "Slack messaging skill"
7
- ---
8
- Use slack_send_message to post and slack_list_channels to browse.`;
9
- const deps = detectMcpDependencies(content);
10
- expect(deps).toHaveLength(1);
11
- expect(deps[0].server).toBe("Slack");
12
- expect(deps[0].url).toBe("https://mcp.slack.com/mcp");
13
- expect(deps[0].transport).toBe("http");
14
- expect(deps[0].matchedTools).toContain("slack_send_message");
15
- expect(deps[0].matchedTools).toContain("slack_list_channels");
16
- });
17
- it("detects GitHub tool patterns", () => {
18
- const content = `Use github_create_pr and github_list_repos for code management.`;
19
- const deps = detectMcpDependencies(content);
20
- expect(deps).toHaveLength(1);
21
- expect(deps[0].server).toBe("GitHub");
22
- expect(deps[0].matchedTools).toContain("github_create_pr");
23
- });
24
- it("detects Google Workspace from multiple prefixes", () => {
25
- const content = `Use drive_list_files and gmail_send to handle docs.`;
26
- const deps = detectMcpDependencies(content);
27
- expect(deps).toHaveLength(1);
28
- expect(deps[0].server).toBe("Google Workspace");
29
- expect(deps[0].matchedTools).toContain("drive_list_files");
30
- expect(deps[0].matchedTools).toContain("gmail_send");
31
- });
32
- it("detects Linear tool patterns", () => {
33
- const content = `Call linear_create_issue when a bug is reported.`;
34
- const deps = detectMcpDependencies(content);
35
- expect(deps).toHaveLength(1);
36
- expect(deps[0].server).toBe("Linear");
37
- });
38
- it("detects tools from frontmatter allowed-tools", () => {
39
- const content = `---
40
- description: "Slack skill"
41
- allowed-tools: [slack_post, slack_reply]
42
- ---
43
- Body text here.`;
44
- const deps = detectMcpDependencies(content);
45
- expect(deps).toHaveLength(1);
46
- expect(deps[0].server).toBe("Slack");
47
- expect(deps[0].matchedTools).toContain("slack_post");
48
- expect(deps[0].matchedTools).toContain("slack_reply");
49
- });
50
- it("returns empty for no known patterns", () => {
51
- const content = `---
52
- description: "A generic skill"
53
- ---
54
- This skill does basic text processing.`;
55
- const deps = detectMcpDependencies(content);
56
- expect(deps).toHaveLength(0);
57
- });
58
- it("generates valid JSON config snippets", () => {
59
- const content = `Use slack_send_message for messaging.`;
60
- const deps = detectMcpDependencies(content);
61
- expect(deps).toHaveLength(1);
62
- const parsed = JSON.parse(deps[0].configSnippet);
63
- expect(parsed.mcpServers).toBeDefined();
64
- expect(parsed.mcpServers.slack).toBeDefined();
65
- expect(parsed.mcpServers.slack.url).toBe("https://mcp.slack.com/mcp");
66
- });
67
- it("detects Notion tool patterns", () => {
68
- const content = `Use notion_create_page and notion_search to manage Notion workspace.`;
69
- const deps = detectMcpDependencies(content);
70
- expect(deps).toHaveLength(1);
71
- expect(deps[0].server).toBe("Notion");
72
- expect(deps[0].url).toBe("https://mcp.notion.com/mcp");
73
- expect(deps[0].transport).toBe("http");
74
- expect(deps[0].matchedTools).toContain("notion_create_page");
75
- expect(deps[0].matchedTools).toContain("notion_search");
76
- });
77
- it("detects Jira tool patterns", () => {
78
- const content = `Use jira_create_issue to file bugs in Jira.`;
79
- const deps = detectMcpDependencies(content);
80
- expect(deps).toHaveLength(1);
81
- expect(deps[0].server).toBe("Jira");
82
- expect(deps[0].url).toBe("https://mcp.atlassian.com/jira/mcp");
83
- expect(deps[0].transport).toBe("http");
84
- expect(deps[0].matchedTools).toContain("jira_create_issue");
85
- });
86
- it("detects Confluence tool patterns", () => {
87
- const content = `Use confluence_create_page to write documentation.`;
88
- const deps = detectMcpDependencies(content);
89
- expect(deps).toHaveLength(1);
90
- expect(deps[0].server).toBe("Confluence");
91
- expect(deps[0].url).toBe("https://mcp.atlassian.com/confluence/mcp");
92
- expect(deps[0].transport).toBe("http");
93
- expect(deps[0].matchedTools).toContain("confluence_create_page");
94
- });
95
- it("detects Figma tool patterns", () => {
96
- const content = `Use figma_get_file to inspect design files.`;
97
- const deps = detectMcpDependencies(content);
98
- expect(deps).toHaveLength(1);
99
- expect(deps[0].server).toBe("Figma");
100
- expect(deps[0].url).toBe("https://mcp.figma.com/mcp");
101
- expect(deps[0].transport).toBe("http");
102
- expect(deps[0].matchedTools).toContain("figma_get_file");
103
- });
104
- it("detects Sentry tool patterns", () => {
105
- const content = `Use sentry_list_issues to monitor errors.`;
106
- const deps = detectMcpDependencies(content);
107
- expect(deps).toHaveLength(1);
108
- expect(deps[0].server).toBe("Sentry");
109
- expect(deps[0].url).toBe("https://mcp.sentry.dev/mcp");
110
- expect(deps[0].transport).toBe("http");
111
- expect(deps[0].matchedTools).toContain("sentry_list_issues");
112
- });
113
- it("detects multiple new servers simultaneously", () => {
114
- const content = `Use notion_create_page for docs, jira_create_issue for bugs, and figma_get_file for design.`;
115
- const deps = detectMcpDependencies(content);
116
- expect(deps).toHaveLength(3);
117
- const servers = deps.map((d) => d.server);
118
- expect(servers).toContain("Notion");
119
- expect(servers).toContain("Jira");
120
- expect(servers).toContain("Figma");
121
- });
122
- it("deduplicates tools from frontmatter and body", () => {
123
- const content = `---
124
- allowed-tools: [slack_send_message]
125
- ---
126
- Also uses slack_send_message and slack_reply in text.`;
127
- const deps = detectMcpDependencies(content);
128
- expect(deps).toHaveLength(1);
129
- const slackTools = deps[0].matchedTools;
130
- // slack_send_message should appear only once
131
- expect(slackTools.filter((t) => t === "slack_send_message")).toHaveLength(1);
132
- });
133
- });
134
- describe("detectSkillDependencies", () => {
135
- it("detects 'use the X skill' pattern", () => {
136
- const content = `---
137
- description: "test"
138
- ---
139
- This skill uses the scout skill for research.`;
140
- const deps = detectSkillDependencies(content);
141
- expect(deps).toHaveLength(1);
142
- expect(deps[0].name).toBe("scout");
143
- expect(deps[0].source).toBe("body-reference");
144
- });
145
- it("detects 'chains with X' pattern", () => {
146
- const content = `This chains with social-media-posting for distribution.`;
147
- const deps = detectSkillDependencies(content);
148
- expect(deps).toHaveLength(1);
149
- expect(deps[0].name).toBe("social-media-posting");
150
- });
151
- it("detects explicit frontmatter dependencies", () => {
152
- const content = `---
153
- dependencies: [scout, social-media-posting]
154
- ---
155
- Body content.`;
156
- const deps = detectSkillDependencies(content);
157
- expect(deps).toHaveLength(2);
158
- expect(deps[0].name).toBe("scout");
159
- expect(deps[0].source).toBe("frontmatter");
160
- expect(deps[1].name).toBe("social-media-posting");
161
- });
162
- it("returns empty for no references", () => {
163
- const content = `---
164
- description: "standalone skill"
165
- ---
166
- No dependencies here.`;
167
- const deps = detectSkillDependencies(content);
168
- expect(deps).toHaveLength(0);
169
- });
170
- it("deduplicates across patterns", () => {
171
- const content = `---
172
- dependencies: [scout]
173
- ---
174
- Use the scout skill for research.`;
175
- const deps = detectSkillDependencies(content);
176
- expect(deps).toHaveLength(1);
177
- expect(deps[0].source).toBe("frontmatter"); // frontmatter takes priority
178
- });
179
- });
180
- //# sourceMappingURL=mcp-detector.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-detector.test.js","sourceRoot":"","sources":["../../../src/eval/__tests__/mcp-detector.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,142 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { buildEvalInitPrompt, buildEvalSystemPrompt, buildBaselineSystemPrompt, parseGeneratedEvals, } from "../prompt-builder.js";
3
- // ---------------------------------------------------------------------------
4
- // buildEvalInitPrompt
5
- // ---------------------------------------------------------------------------
6
- describe("buildEvalInitPrompt", () => {
7
- const skillContent = "# My Skill\nThis skill does amazing things.";
8
- it("includes skill content in the prompt", () => {
9
- const prompt = buildEvalInitPrompt(skillContent);
10
- expect(prompt).toContain(skillContent);
11
- });
12
- it("includes schema reference fields", () => {
13
- const prompt = buildEvalInitPrompt(skillContent);
14
- expect(prompt).toContain("skill_name");
15
- expect(prompt).toContain("assertions");
16
- expect(prompt).toContain("expected_output");
17
- });
18
- it("includes social-media-posting example", () => {
19
- const prompt = buildEvalInitPrompt(skillContent);
20
- expect(prompt).toContain("social-media-posting");
21
- });
22
- it("includes best practices section", () => {
23
- const prompt = buildEvalInitPrompt(skillContent);
24
- expect(prompt).toContain("Best Practices");
25
- expect(prompt).toContain("objectively verifiable");
26
- });
27
- it("includes MCP context for Slack skill", () => {
28
- const slackSkill = "Use slack_send_message to post messages to Slack channels.";
29
- const prompt = buildEvalInitPrompt(slackSkill);
30
- expect(prompt).toContain("MCP Simulation Context");
31
- expect(prompt).toContain("Slack");
32
- });
33
- it("is unchanged for non-MCP skill", () => {
34
- const plainSkill = "# My Skill\nThis skill does text processing.";
35
- const prompt = buildEvalInitPrompt(plainSkill);
36
- expect(prompt).not.toContain("MCP Simulation Context");
37
- });
38
- it("lists all detected MCP servers", () => {
39
- const multiSkill = "Use slack_send_message for chat and github_create_pr for PRs.";
40
- const prompt = buildEvalInitPrompt(multiSkill);
41
- expect(prompt).toContain("Slack");
42
- expect(prompt).toContain("GitHub");
43
- expect(prompt).toContain("MCP Simulation Context");
44
- });
45
- });
46
- // ---------------------------------------------------------------------------
47
- // buildEvalSystemPrompt (MCP-aware)
48
- // ---------------------------------------------------------------------------
49
- describe("buildEvalSystemPrompt", () => {
50
- it("returns standard prompt for non-MCP skills", () => {
51
- const result = buildEvalSystemPrompt("# My Skill\nDoes text processing.");
52
- expect(result).toContain("You are an AI assistant enhanced with the following skill");
53
- expect(result).toContain("# My Skill");
54
- expect(result).not.toContain("Evaluation Mode");
55
- });
56
- it("returns simulation prompt for Slack MCP skill", () => {
57
- const slackSkill = "Use slack_send_message and slack_read_channel to interact with Slack.";
58
- const result = buildEvalSystemPrompt(slackSkill);
59
- expect(result).toContain("Evaluation Mode");
60
- expect(result).toContain("slack_send_message");
61
- expect(result).toContain("slack_read_channel");
62
- expect(result).toContain("Slack");
63
- expect(result).toContain("Do NOT");
64
- });
65
- it("returns simulation prompt for GitHub MCP skill", () => {
66
- const githubSkill = "Use github_create_pr to create pull requests.";
67
- const result = buildEvalSystemPrompt(githubSkill);
68
- expect(result).toContain("Evaluation Mode");
69
- expect(result).toContain("github_create_pr");
70
- expect(result).toContain("GitHub");
71
- });
72
- it("lists multiple MCP servers when skill uses several", () => {
73
- const multiSkill = "Use slack_send_message for chat and github_create_pr for PRs and drive_list_files for docs.";
74
- const result = buildEvalSystemPrompt(multiSkill);
75
- expect(result).toContain("Slack");
76
- expect(result).toContain("GitHub");
77
- expect(result).toContain("Google Workspace");
78
- });
79
- it("returns baseline prompt for empty content", () => {
80
- expect(buildEvalSystemPrompt("")).toBe("You are a helpful AI assistant.");
81
- });
82
- it("includes simulation instructions that prevent tool-unavailable responses", () => {
83
- const skill = "Use slack_send_message to send messages.";
84
- const result = buildEvalSystemPrompt(skill);
85
- expect(result).toContain("Do NOT");
86
- expect(result).toContain("tools are unavailable");
87
- expect(result).toContain("Walk through each tool call step by step");
88
- });
89
- });
90
- // ---------------------------------------------------------------------------
91
- // buildBaselineSystemPrompt
92
- // ---------------------------------------------------------------------------
93
- describe("buildBaselineSystemPrompt", () => {
94
- it("returns baseline prompt", () => {
95
- expect(buildBaselineSystemPrompt()).toBe("You are a helpful AI assistant.");
96
- });
97
- });
98
- // ---------------------------------------------------------------------------
99
- // parseGeneratedEvals
100
- // ---------------------------------------------------------------------------
101
- describe("parseGeneratedEvals", () => {
102
- it("extracts JSON from markdown code fence", () => {
103
- const raw = `Here is the evals.json:
104
-
105
- \`\`\`json
106
- {
107
- "skill_name": "test-skill",
108
- "evals": [
109
- {
110
- "id": 1,
111
- "name": "Basic test",
112
- "prompt": "Test prompt",
113
- "expected_output": "Expected output",
114
- "files": [],
115
- "assertions": [
116
- { "id": "a1", "text": "Check result", "type": "boolean" }
117
- ]
118
- }
119
- ]
120
- }
121
- \`\`\`
122
-
123
- That's the evals file.`;
124
- const result = parseGeneratedEvals(raw);
125
- expect(result.skill_name).toBe("test-skill");
126
- expect(result.evals).toHaveLength(1);
127
- expect(result.evals[0].assertions).toHaveLength(1);
128
- });
129
- it("throws when no code block is found", () => {
130
- const raw = "Just some text without any JSON code block.";
131
- expect(() => parseGeneratedEvals(raw)).toThrow(/code block/i);
132
- });
133
- it("throws when JSON inside fence is invalid", () => {
134
- const raw = "```json\n{ invalid json }\n```";
135
- expect(() => parseGeneratedEvals(raw)).toThrow();
136
- });
137
- it("validates extracted JSON against schema", () => {
138
- const raw = '```json\n{ "skill_name": "test" }\n```';
139
- expect(() => parseGeneratedEvals(raw)).toThrow(); // missing evals array
140
- });
141
- });
142
- //# sourceMappingURL=prompt-builder.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prompt-builder.test.js","sourceRoot":"","sources":["../../../src/eval/__tests__/prompt-builder.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,247 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from "vitest";
2
- // ---------------------------------------------------------------------------
3
- // Mocks
4
- // ---------------------------------------------------------------------------
5
- const mocks = vi.hoisted(() => ({
6
- readFileSync: vi.fn(),
7
- existsSync: vi.fn(),
8
- }));
9
- vi.mock("node:fs", () => ({
10
- readFileSync: mocks.readFileSync,
11
- existsSync: mocks.existsSync,
12
- }));
13
- // ---------------------------------------------------------------------------
14
- // Import module under test AFTER mocks
15
- // ---------------------------------------------------------------------------
16
- const { loadAndValidateEvals, EvalValidationError } = await import("../schema.js");
17
- // ---------------------------------------------------------------------------
18
- // Fixtures
19
- // ---------------------------------------------------------------------------
20
- const VALID_EVALS = {
21
- skill_name: "social-media-posting",
22
- evals: [
23
- {
24
- id: 1,
25
- name: "Basic post generation",
26
- prompt: "Create a social media post about AI",
27
- expected_output: "A well-crafted social media post",
28
- files: [],
29
- assertions: [
30
- { id: "assert-1", text: "Output mentions AI", type: "boolean" },
31
- { id: "assert-2", text: "Output is under 280 chars", type: "boolean" },
32
- ],
33
- },
34
- ],
35
- };
36
- // ---------------------------------------------------------------------------
37
- // Tests
38
- // ---------------------------------------------------------------------------
39
- describe("loadAndValidateEvals", () => {
40
- beforeEach(() => {
41
- vi.resetAllMocks();
42
- });
43
- it("accepts valid evals.json and returns typed EvalsFile", () => {
44
- mocks.existsSync.mockReturnValue(true);
45
- mocks.readFileSync.mockReturnValue(JSON.stringify(VALID_EVALS));
46
- const result = loadAndValidateEvals("/skills/my-skill");
47
- expect(result.skill_name).toBe("social-media-posting");
48
- expect(result.evals).toHaveLength(1);
49
- expect(result.evals[0].assertions).toHaveLength(2);
50
- });
51
- it("throws for missing skill_name", () => {
52
- const invalid = { ...VALID_EVALS, skill_name: undefined };
53
- mocks.existsSync.mockReturnValue(true);
54
- mocks.readFileSync.mockReturnValue(JSON.stringify(invalid));
55
- expect(() => loadAndValidateEvals("/skills/my-skill")).toThrow(EvalValidationError);
56
- try {
57
- loadAndValidateEvals("/skills/my-skill");
58
- }
59
- catch (e) {
60
- expect(e.errors.some((err) => err.path === "skill_name")).toBe(true);
61
- }
62
- });
63
- it("throws for missing evals array", () => {
64
- const invalid = { skill_name: "test" };
65
- mocks.existsSync.mockReturnValue(true);
66
- mocks.readFileSync.mockReturnValue(JSON.stringify(invalid));
67
- expect(() => loadAndValidateEvals("/skills/my-skill")).toThrow(EvalValidationError);
68
- try {
69
- loadAndValidateEvals("/skills/my-skill");
70
- }
71
- catch (e) {
72
- expect(e.errors.some((err) => err.path === "evals")).toBe(true);
73
- }
74
- });
75
- it("throws for missing prompt in eval case", () => {
76
- const invalid = {
77
- skill_name: "test",
78
- evals: [
79
- {
80
- id: 1,
81
- name: "Test",
82
- expected_output: "output",
83
- assertions: [{ id: "a1", text: "ok", type: "boolean" }],
84
- },
85
- ],
86
- };
87
- mocks.existsSync.mockReturnValue(true);
88
- mocks.readFileSync.mockReturnValue(JSON.stringify(invalid));
89
- expect(() => loadAndValidateEvals("/skills/my-skill")).toThrow(EvalValidationError);
90
- try {
91
- loadAndValidateEvals("/skills/my-skill");
92
- }
93
- catch (e) {
94
- expect(e.errors.some((err) => err.path === "evals[0].prompt")).toBe(true);
95
- }
96
- });
97
- it("throws for missing assertions", () => {
98
- const invalid = {
99
- skill_name: "test",
100
- evals: [
101
- {
102
- id: 1,
103
- name: "Test",
104
- prompt: "do something",
105
- expected_output: "output",
106
- },
107
- ],
108
- };
109
- mocks.existsSync.mockReturnValue(true);
110
- mocks.readFileSync.mockReturnValue(JSON.stringify(invalid));
111
- expect(() => loadAndValidateEvals("/skills/my-skill")).toThrow(EvalValidationError);
112
- try {
113
- loadAndValidateEvals("/skills/my-skill");
114
- }
115
- catch (e) {
116
- expect(e.errors.some((err) => err.path === "evals[0].assertions")).toBe(true);
117
- }
118
- });
119
- it("throws for duplicate assertion IDs within a case", () => {
120
- const invalid = {
121
- skill_name: "test",
122
- evals: [
123
- {
124
- id: 1,
125
- name: "Test",
126
- prompt: "do something",
127
- expected_output: "output",
128
- assertions: [
129
- { id: "assert-1", text: "first", type: "boolean" },
130
- { id: "assert-1", text: "duplicate", type: "boolean" },
131
- ],
132
- },
133
- ],
134
- };
135
- mocks.existsSync.mockReturnValue(true);
136
- mocks.readFileSync.mockReturnValue(JSON.stringify(invalid));
137
- expect(() => loadAndValidateEvals("/skills/my-skill")).toThrow(EvalValidationError);
138
- try {
139
- loadAndValidateEvals("/skills/my-skill");
140
- }
141
- catch (e) {
142
- expect(e.errors.some((err) => err.message.includes("assert-1"))).toBe(true);
143
- }
144
- });
145
- it("throws for invalid JSON with file path info", () => {
146
- mocks.existsSync.mockReturnValue(true);
147
- mocks.readFileSync.mockReturnValue("{ broken json");
148
- expect(() => loadAndValidateEvals("/skills/my-skill")).toThrow(EvalValidationError);
149
- try {
150
- loadAndValidateEvals("/skills/my-skill");
151
- }
152
- catch (e) {
153
- expect(e.errors[0].path).toContain("evals.json");
154
- expect(e.errors[0].message).toMatch(/parse|JSON/i);
155
- }
156
- });
157
- it("throws for empty assertions array", () => {
158
- const invalid = {
159
- skill_name: "test",
160
- evals: [
161
- {
162
- id: 1,
163
- name: "Test",
164
- prompt: "do something",
165
- expected_output: "output",
166
- assertions: [],
167
- },
168
- ],
169
- };
170
- mocks.existsSync.mockReturnValue(true);
171
- mocks.readFileSync.mockReturnValue(JSON.stringify(invalid));
172
- expect(() => loadAndValidateEvals("/skills/my-skill")).toThrow(EvalValidationError);
173
- try {
174
- loadAndValidateEvals("/skills/my-skill");
175
- }
176
- catch (e) {
177
- expect(e.errors.some((err) => err.message.includes("at least 1"))).toBe(true);
178
- }
179
- });
180
- it("throws when evals.json does not exist", () => {
181
- mocks.existsSync.mockReturnValue(false);
182
- expect(() => loadAndValidateEvals("/skills/my-skill")).toThrow(EvalValidationError);
183
- try {
184
- loadAndValidateEvals("/skills/my-skill");
185
- }
186
- catch (e) {
187
- expect(e.errors[0].message).toMatch(/not found|No evals\.json/i);
188
- }
189
- });
190
- it("migrates Anthropic standard 'expectations' format to assertions with scoped IDs", () => {
191
- const anthropicFormat = {
192
- skill_name: "my-skill",
193
- evals: [
194
- {
195
- id: 2,
196
- name: "Test prompt",
197
- prompt: "do something",
198
- expected_output: "output",
199
- expectations: ["Output includes X", "Output is under 280 chars"],
200
- },
201
- ],
202
- };
203
- mocks.existsSync.mockReturnValue(true);
204
- mocks.readFileSync.mockReturnValue(JSON.stringify(anthropicFormat));
205
- const result = loadAndValidateEvals("/skills/my-skill");
206
- expect(result.evals[0].assertions).toHaveLength(2);
207
- expect(result.evals[0].assertions[0]).toEqual({ id: "2_1", text: "Output includes X", type: "boolean" });
208
- expect(result.evals[0].assertions[1]).toEqual({ id: "2_2", text: "Output is under 280 chars", type: "boolean" });
209
- });
210
- it("auto-fills missing 'name' (Anthropic format) from eval id", () => {
211
- const anthropicFormatNoName = {
212
- skill_name: "my-skill",
213
- evals: [
214
- {
215
- id: 5,
216
- prompt: "do something",
217
- expected_output: "output",
218
- expectations: ["Output includes X"],
219
- },
220
- ],
221
- };
222
- mocks.existsSync.mockReturnValue(true);
223
- mocks.readFileSync.mockReturnValue(JSON.stringify(anthropicFormatNoName));
224
- const result = loadAndValidateEvals("/skills/my-skill");
225
- expect(result.evals[0].name).toBe("case-5");
226
- expect(result.evals[0].assertions[0].id).toBe("5_1");
227
- });
228
- it("accepts evals with optional files field defaulting to empty array", () => {
229
- const valid = {
230
- skill_name: "test",
231
- evals: [
232
- {
233
- id: 1,
234
- name: "Test",
235
- prompt: "do something",
236
- expected_output: "output",
237
- assertions: [{ id: "a1", text: "check", type: "boolean" }],
238
- },
239
- ],
240
- };
241
- mocks.existsSync.mockReturnValue(true);
242
- mocks.readFileSync.mockReturnValue(JSON.stringify(valid));
243
- const result = loadAndValidateEvals("/skills/my-skill");
244
- expect(result.evals[0].files).toEqual([]);
245
- });
246
- });
247
- //# sourceMappingURL=schema.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"schema.test.js","sourceRoot":"","sources":["../../../src/eval/__tests__/schema.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};