vskill 0.5.127 → 0.5.129

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 (232) hide show
  1. package/agents.json +1 -1
  2. package/dist/bin.js +0 -0
  3. package/dist/eval-server/api-routes.js +32 -0
  4. package/dist/eval-server/api-routes.js.map +1 -1
  5. package/dist/eval-server/eval-server.js +2 -0
  6. package/dist/eval-server/eval-server.js.map +1 -1
  7. package/dist/eval-server/git-routes.d.ts +5 -0
  8. package/dist/eval-server/git-routes.js +172 -0
  9. package/dist/eval-server/git-routes.js.map +1 -0
  10. package/dist/eval-server/router.d.ts +2 -0
  11. package/dist/eval-server/router.js +3 -1
  12. package/dist/eval-server/router.js.map +1 -1
  13. package/dist/eval-server/skill-name-resolver.d.ts +13 -0
  14. package/dist/eval-server/skill-name-resolver.js +42 -0
  15. package/dist/eval-server/skill-name-resolver.js.map +1 -1
  16. package/dist/eval-ui/assets/{CommandPalette-LtejhB76.js → CommandPalette-BIjKkHCC.js} +1 -1
  17. package/dist/eval-ui/assets/{CreateSkillPage-3RuqLQnm.js → CreateSkillPage-CmV0WZOn.js} +1 -1
  18. package/dist/eval-ui/assets/{FindSkillsPalette-Dbl2_IC4.js → FindSkillsPalette-BtYgEsVD.js} +2 -2
  19. package/dist/eval-ui/assets/{SearchPaletteCore-CLZmxDat.js → SearchPaletteCore-CAEO357X.js} +1 -1
  20. package/dist/eval-ui/assets/{SkillDetailPanel-RQc5u4nm.js → SkillDetailPanel-AH9wV3VU.js} +1 -1
  21. package/dist/eval-ui/assets/{UpdateDropdown-O8YGQyMH.js → UpdateDropdown-BwMxB2Ub.js} +1 -1
  22. package/dist/eval-ui/assets/index-ZByf-wxl.js +102 -0
  23. package/dist/eval-ui/assets/skill-url-C4ekwoGs.js +1 -0
  24. package/dist/eval-ui/index.html +1 -1
  25. package/dist/index.js +0 -0
  26. package/package.json +1 -1
  27. package/dist/agents/agents-registry.test.d.ts +0 -1
  28. package/dist/agents/agents-registry.test.js +0 -248
  29. package/dist/agents/agents-registry.test.js.map +0 -1
  30. package/dist/api/client.test.d.ts +0 -1
  31. package/dist/api/client.test.js +0 -428
  32. package/dist/api/client.test.js.map +0 -1
  33. package/dist/audit/audit-integration.test.d.ts +0 -1
  34. package/dist/audit/audit-integration.test.js +0 -92
  35. package/dist/audit/audit-integration.test.js.map +0 -1
  36. package/dist/audit/audit-llm.test.d.ts +0 -1
  37. package/dist/audit/audit-llm.test.js +0 -110
  38. package/dist/audit/audit-llm.test.js.map +0 -1
  39. package/dist/audit/audit-patterns.test.d.ts +0 -1
  40. package/dist/audit/audit-patterns.test.js +0 -91
  41. package/dist/audit/audit-patterns.test.js.map +0 -1
  42. package/dist/audit/audit-scanner.test.d.ts +0 -1
  43. package/dist/audit/audit-scanner.test.js +0 -112
  44. package/dist/audit/audit-scanner.test.js.map +0 -1
  45. package/dist/audit/audit-types.test.d.ts +0 -1
  46. package/dist/audit/audit-types.test.js +0 -140
  47. package/dist/audit/audit-types.test.js.map +0 -1
  48. package/dist/audit/config.test.d.ts +0 -1
  49. package/dist/audit/config.test.js +0 -44
  50. package/dist/audit/config.test.js.map +0 -1
  51. package/dist/audit/file-discovery.test.d.ts +0 -1
  52. package/dist/audit/file-discovery.test.js +0 -120
  53. package/dist/audit/file-discovery.test.js.map +0 -1
  54. package/dist/audit/fix-suggestions.test.d.ts +0 -1
  55. package/dist/audit/fix-suggestions.test.js +0 -35
  56. package/dist/audit/fix-suggestions.test.js.map +0 -1
  57. package/dist/audit/formatters/json-formatter.test.d.ts +0 -1
  58. package/dist/audit/formatters/json-formatter.test.js +0 -49
  59. package/dist/audit/formatters/json-formatter.test.js.map +0 -1
  60. package/dist/audit/formatters/report-formatter.test.d.ts +0 -1
  61. package/dist/audit/formatters/report-formatter.test.js +0 -51
  62. package/dist/audit/formatters/report-formatter.test.js.map +0 -1
  63. package/dist/audit/formatters/sarif-formatter.test.d.ts +0 -1
  64. package/dist/audit/formatters/sarif-formatter.test.js +0 -71
  65. package/dist/audit/formatters/sarif-formatter.test.js.map +0 -1
  66. package/dist/audit/formatters/terminal-formatter.test.d.ts +0 -1
  67. package/dist/audit/formatters/terminal-formatter.test.js +0 -51
  68. package/dist/audit/formatters/terminal-formatter.test.js.map +0 -1
  69. package/dist/blocklist/blocklist-e2e.test.d.ts +0 -1
  70. package/dist/blocklist/blocklist-e2e.test.js +0 -346
  71. package/dist/blocklist/blocklist-e2e.test.js.map +0 -1
  72. package/dist/blocklist/blocklist.test.d.ts +0 -1
  73. package/dist/blocklist/blocklist.test.js +0 -259
  74. package/dist/blocklist/blocklist.test.js.map +0 -1
  75. package/dist/commands/__tests__/eval-router.test.d.ts +0 -1
  76. package/dist/commands/__tests__/eval-router.test.js +0 -60
  77. package/dist/commands/__tests__/eval-router.test.js.map +0 -1
  78. package/dist/commands/__tests__/eval-serve.test.d.ts +0 -1
  79. package/dist/commands/__tests__/eval-serve.test.js +0 -23
  80. package/dist/commands/__tests__/eval-serve.test.js.map +0 -1
  81. package/dist/commands/add-blocklist-e2e.test.d.ts +0 -1
  82. package/dist/commands/add-blocklist-e2e.test.js +0 -397
  83. package/dist/commands/add-blocklist-e2e.test.js.map +0 -1
  84. package/dist/commands/add-wizard.test.d.ts +0 -1
  85. package/dist/commands/add-wizard.test.js +0 -392
  86. package/dist/commands/add-wizard.test.js.map +0 -1
  87. package/dist/commands/add.test.d.ts +0 -1
  88. package/dist/commands/add.test.js +0 -2365
  89. package/dist/commands/add.test.js.map +0 -1
  90. package/dist/commands/audit.test.d.ts +0 -1
  91. package/dist/commands/audit.test.js +0 -79
  92. package/dist/commands/audit.test.js.map +0 -1
  93. package/dist/commands/blocklist.test.d.ts +0 -1
  94. package/dist/commands/blocklist.test.js +0 -158
  95. package/dist/commands/blocklist.test.js.map +0 -1
  96. package/dist/commands/eval/__tests__/coverage.test.d.ts +0 -1
  97. package/dist/commands/eval/__tests__/coverage.test.js +0 -122
  98. package/dist/commands/eval/__tests__/coverage.test.js.map +0 -1
  99. package/dist/commands/eval/__tests__/generate-all.test.d.ts +0 -1
  100. package/dist/commands/eval/__tests__/generate-all.test.js +0 -133
  101. package/dist/commands/eval/__tests__/generate-all.test.js.map +0 -1
  102. package/dist/commands/eval/__tests__/init.test.d.ts +0 -1
  103. package/dist/commands/eval/__tests__/init.test.js +0 -116
  104. package/dist/commands/eval/__tests__/init.test.js.map +0 -1
  105. package/dist/commands/eval/__tests__/run.test.d.ts +0 -1
  106. package/dist/commands/eval/__tests__/run.test.js +0 -186
  107. package/dist/commands/eval/__tests__/run.test.js.map +0 -1
  108. package/dist/commands/find.test.d.ts +0 -1
  109. package/dist/commands/find.test.js +0 -481
  110. package/dist/commands/find.test.js.map +0 -1
  111. package/dist/commands/marketplace.test.d.ts +0 -1
  112. package/dist/commands/marketplace.test.js +0 -129
  113. package/dist/commands/marketplace.test.js.map +0 -1
  114. package/dist/commands/remove.test.d.ts +0 -1
  115. package/dist/commands/remove.test.js +0 -164
  116. package/dist/commands/remove.test.js.map +0 -1
  117. package/dist/commands/should-skip.test.d.ts +0 -1
  118. package/dist/commands/should-skip.test.js +0 -56
  119. package/dist/commands/should-skip.test.js.map +0 -1
  120. package/dist/commands/submit.test.d.ts +0 -1
  121. package/dist/commands/submit.test.js +0 -83
  122. package/dist/commands/submit.test.js.map +0 -1
  123. package/dist/commands/update.test.d.ts +0 -1
  124. package/dist/commands/update.test.js +0 -250
  125. package/dist/commands/update.test.js.map +0 -1
  126. package/dist/discovery/github-tree.test.d.ts +0 -1
  127. package/dist/discovery/github-tree.test.js +0 -372
  128. package/dist/discovery/github-tree.test.js.map +0 -1
  129. package/dist/eval/__tests__/activation-tester.test.d.ts +0 -1
  130. package/dist/eval/__tests__/activation-tester.test.js +0 -203
  131. package/dist/eval/__tests__/activation-tester.test.js.map +0 -1
  132. package/dist/eval/__tests__/benchmark-history.test.d.ts +0 -1
  133. package/dist/eval/__tests__/benchmark-history.test.js +0 -422
  134. package/dist/eval/__tests__/benchmark-history.test.js.map +0 -1
  135. package/dist/eval/__tests__/benchmark.test.d.ts +0 -1
  136. package/dist/eval/__tests__/benchmark.test.js +0 -94
  137. package/dist/eval/__tests__/benchmark.test.js.map +0 -1
  138. package/dist/eval/__tests__/comparator.test.d.ts +0 -1
  139. package/dist/eval/__tests__/comparator.test.js +0 -282
  140. package/dist/eval/__tests__/comparator.test.js.map +0 -1
  141. package/dist/eval/__tests__/judge.test.d.ts +0 -1
  142. package/dist/eval/__tests__/judge.test.js +0 -122
  143. package/dist/eval/__tests__/judge.test.js.map +0 -1
  144. package/dist/eval/__tests__/llm.test.d.ts +0 -1
  145. package/dist/eval/__tests__/llm.test.js +0 -543
  146. package/dist/eval/__tests__/llm.test.js.map +0 -1
  147. package/dist/eval/__tests__/mcp-detector.test.d.ts +0 -1
  148. package/dist/eval/__tests__/mcp-detector.test.js +0 -180
  149. package/dist/eval/__tests__/mcp-detector.test.js.map +0 -1
  150. package/dist/eval/__tests__/prompt-builder.test.d.ts +0 -1
  151. package/dist/eval/__tests__/prompt-builder.test.js +0 -142
  152. package/dist/eval/__tests__/prompt-builder.test.js.map +0 -1
  153. package/dist/eval/__tests__/schema.test.d.ts +0 -1
  154. package/dist/eval/__tests__/schema.test.js +0 -247
  155. package/dist/eval/__tests__/schema.test.js.map +0 -1
  156. package/dist/eval/__tests__/skill-scanner.test.d.ts +0 -1
  157. package/dist/eval/__tests__/skill-scanner.test.js +0 -228
  158. package/dist/eval/__tests__/skill-scanner.test.js.map +0 -1
  159. package/dist/eval/__tests__/verdict.test.d.ts +0 -1
  160. package/dist/eval/__tests__/verdict.test.js +0 -47
  161. package/dist/eval/__tests__/verdict.test.js.map +0 -1
  162. package/dist/eval-server/__tests__/benchmark-runner.test.d.ts +0 -1
  163. package/dist/eval-server/__tests__/benchmark-runner.test.js +0 -301
  164. package/dist/eval-server/__tests__/benchmark-runner.test.js.map +0 -1
  165. package/dist/eval-server/__tests__/comparison-sse-events.test.d.ts +0 -1
  166. package/dist/eval-server/__tests__/comparison-sse-events.test.js +0 -278
  167. package/dist/eval-server/__tests__/comparison-sse-events.test.js.map +0 -1
  168. package/dist/eval-server/__tests__/sse-helpers.test.d.ts +0 -1
  169. package/dist/eval-server/__tests__/sse-helpers.test.js +0 -128
  170. package/dist/eval-server/__tests__/sse-helpers.test.js.map +0 -1
  171. package/dist/eval-ui/assets/index-DlZduKAT.js +0 -102
  172. package/dist/eval-ui/assets/skill-url-BpZjDR8A.js +0 -1
  173. package/dist/installer/canonical.test.d.ts +0 -1
  174. package/dist/installer/canonical.test.js +0 -264
  175. package/dist/installer/canonical.test.js.map +0 -1
  176. package/dist/lockfile/lockfile.test.d.ts +0 -1
  177. package/dist/lockfile/lockfile.test.js +0 -204
  178. package/dist/lockfile/lockfile.test.js.map +0 -1
  179. package/dist/lockfile/project-root.test.d.ts +0 -1
  180. package/dist/lockfile/project-root.test.js +0 -49
  181. package/dist/lockfile/project-root.test.js.map +0 -1
  182. package/dist/marketplace/marketplace.test.d.ts +0 -1
  183. package/dist/marketplace/marketplace.test.js +0 -312
  184. package/dist/marketplace/marketplace.test.js.map +0 -1
  185. package/dist/resolvers/source-resolver.test.d.ts +0 -1
  186. package/dist/resolvers/source-resolver.test.js +0 -104
  187. package/dist/resolvers/source-resolver.test.js.map +0 -1
  188. package/dist/resolvers/url-resolver.test.d.ts +0 -1
  189. package/dist/resolvers/url-resolver.test.js +0 -49
  190. package/dist/resolvers/url-resolver.test.js.map +0 -1
  191. package/dist/scanner/dci-integration.test.d.ts +0 -1
  192. package/dist/scanner/dci-integration.test.js +0 -83
  193. package/dist/scanner/dci-integration.test.js.map +0 -1
  194. package/dist/scanner/patterns.test.d.ts +0 -1
  195. package/dist/scanner/patterns.test.js +0 -832
  196. package/dist/scanner/patterns.test.js.map +0 -1
  197. package/dist/scanner/tier1.test.d.ts +0 -1
  198. package/dist/scanner/tier1.test.js +0 -305
  199. package/dist/scanner/tier1.test.js.map +0 -1
  200. package/dist/security/platform-security.test.d.ts +0 -1
  201. package/dist/security/platform-security.test.js +0 -92
  202. package/dist/security/platform-security.test.js.map +0 -1
  203. package/dist/settings/settings.test.d.ts +0 -1
  204. package/dist/settings/settings.test.js +0 -103
  205. package/dist/settings/settings.test.js.map +0 -1
  206. package/dist/updater/source-fetcher.test.d.ts +0 -1
  207. package/dist/updater/source-fetcher.test.js +0 -192
  208. package/dist/updater/source-fetcher.test.js.map +0 -1
  209. package/dist/utils/__tests__/paths.test.d.ts +0 -1
  210. package/dist/utils/__tests__/paths.test.js +0 -22
  211. package/dist/utils/__tests__/paths.test.js.map +0 -1
  212. package/dist/utils/__tests__/resolve-binary.integration.test.d.ts +0 -1
  213. package/dist/utils/__tests__/resolve-binary.integration.test.js +0 -138
  214. package/dist/utils/__tests__/resolve-binary.integration.test.js.map +0 -1
  215. package/dist/utils/__tests__/resolve-binary.test.d.ts +0 -1
  216. package/dist/utils/__tests__/resolve-binary.test.js +0 -175
  217. package/dist/utils/__tests__/resolve-binary.test.js.map +0 -1
  218. package/dist/utils/__tests__/validation.test.d.ts +0 -1
  219. package/dist/utils/__tests__/validation.test.js +0 -107
  220. package/dist/utils/__tests__/validation.test.js.map +0 -1
  221. package/dist/utils/agent-filter.test.d.ts +0 -1
  222. package/dist/utils/agent-filter.test.js +0 -75
  223. package/dist/utils/agent-filter.test.js.map +0 -1
  224. package/dist/utils/output.test.d.ts +0 -1
  225. package/dist/utils/output.test.js +0 -28
  226. package/dist/utils/output.test.js.map +0 -1
  227. package/dist/utils/project-root.test.d.ts +0 -1
  228. package/dist/utils/project-root.test.js +0 -74
  229. package/dist/utils/project-root.test.js.map +0 -1
  230. package/dist/utils/prompts.test.d.ts +0 -1
  231. package/dist/utils/prompts.test.js +0 -285
  232. 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 {};