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,60 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from "vitest";
2
- // ---------------------------------------------------------------------------
3
- // Mocks
4
- // ---------------------------------------------------------------------------
5
- const mocks = vi.hoisted(() => ({
6
- runEvalInit: vi.fn(),
7
- runEvalRun: vi.fn(),
8
- runEvalCoverage: vi.fn(),
9
- runEvalGenerateAll: vi.fn(),
10
- }));
11
- vi.mock("../eval/init.js", () => ({ runEvalInit: mocks.runEvalInit }));
12
- vi.mock("../eval/run.js", () => ({ runEvalRun: mocks.runEvalRun }));
13
- vi.mock("../eval/coverage.js", () => ({
14
- runEvalCoverage: mocks.runEvalCoverage,
15
- }));
16
- vi.mock("../eval/generate-all.js", () => ({
17
- runEvalGenerateAll: mocks.runEvalGenerateAll,
18
- }));
19
- // ---------------------------------------------------------------------------
20
- // Import module under test AFTER mocks
21
- // ---------------------------------------------------------------------------
22
- const { evalCommand } = await import("../eval.js");
23
- // ---------------------------------------------------------------------------
24
- // Tests
25
- // ---------------------------------------------------------------------------
26
- describe("evalCommand router", () => {
27
- beforeEach(() => {
28
- vi.resetAllMocks();
29
- });
30
- it("routes init subcommand to runEvalInit", async () => {
31
- await evalCommand("init", "marketing/social-media-posting", {
32
- root: "/tmp/test",
33
- });
34
- expect(mocks.runEvalInit).toHaveBeenCalledWith(expect.stringContaining("marketing/skills/social-media-posting"), false);
35
- });
36
- it("routes run subcommand to runEvalRun", async () => {
37
- await evalCommand("run", "marketing/social-media-posting", {
38
- root: "/tmp/test",
39
- });
40
- expect(mocks.runEvalRun).toHaveBeenCalledWith(expect.stringContaining("marketing/skills/social-media-posting"));
41
- });
42
- it("routes coverage subcommand to runEvalCoverage", async () => {
43
- await evalCommand("coverage", undefined, { root: "/tmp/test" });
44
- expect(mocks.runEvalCoverage).toHaveBeenCalledWith("/tmp/test");
45
- });
46
- it("routes generate-all subcommand to runEvalGenerateAll", async () => {
47
- await evalCommand("generate-all", undefined, {
48
- root: "/tmp/test",
49
- force: true,
50
- });
51
- expect(mocks.runEvalGenerateAll).toHaveBeenCalledWith("/tmp/test", true);
52
- });
53
- it("prints error for unknown subcommand", async () => {
54
- const consoleSpy = vi.spyOn(console, "error").mockImplementation(() => { });
55
- await evalCommand("unknown", undefined, { root: "/tmp/test" });
56
- expect(consoleSpy).toHaveBeenCalledWith(expect.stringContaining("Unknown subcommand"));
57
- consoleSpy.mockRestore();
58
- });
59
- });
60
- //# sourceMappingURL=eval-router.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eval-router.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/eval-router.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,23 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- import { projectPort } from "../eval/serve.js";
3
- describe("projectPort", () => {
4
- it("returns a port in range 3077-3177", () => {
5
- const port = projectPort("/Users/alice/projects/my-skills");
6
- expect(port).toBeGreaterThanOrEqual(3077);
7
- expect(port).toBeLessThanOrEqual(3177);
8
- });
9
- it("returns the same port for the same path (deterministic)", () => {
10
- const a = projectPort("/Users/alice/projects/my-skills");
11
- const b = projectPort("/Users/alice/projects/my-skills");
12
- expect(a).toBe(b);
13
- });
14
- it("returns different ports for different paths", () => {
15
- const a = projectPort("/Users/alice/projects/repo-a");
16
- const b = projectPort("/Users/alice/projects/repo-b");
17
- // Not guaranteed by hash, but overwhelmingly likely for different inputs
18
- // We just check both are valid
19
- expect(a).toBeGreaterThanOrEqual(3077);
20
- expect(b).toBeGreaterThanOrEqual(3077);
21
- });
22
- });
23
- //# sourceMappingURL=eval-serve.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"eval-serve.test.js","sourceRoot":"","sources":["../../../src/commands/__tests__/eval-serve.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,QAAQ,CAAC,aAAa,EAAE,GAAG,EAAE;IAC3B,EAAE,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC3C,MAAM,IAAI,GAAG,WAAW,CAAC,iCAAiC,CAAC,CAAC;QAC5D,MAAM,CAAC,IAAI,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,yDAAyD,EAAE,GAAG,EAAE;QACjE,MAAM,CAAC,GAAG,WAAW,CAAC,iCAAiC,CAAC,CAAC;QACzD,MAAM,CAAC,GAAG,WAAW,CAAC,iCAAiC,CAAC,CAAC;QACzD,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6CAA6C,EAAE,GAAG,EAAE;QACrD,MAAM,CAAC,GAAG,WAAW,CAAC,8BAA8B,CAAC,CAAC;QACtD,MAAM,CAAC,GAAG,WAAW,CAAC,8BAA8B,CAAC,CAAC;QACtD,yEAAyE;QACzE,+BAA+B;QAC/B,MAAM,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;QACvC,MAAM,CAAC,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,397 +0,0 @@
1
- // ---------------------------------------------------------------------------
2
- // E2E integration tests: vskill install with blocklist enforcement
3
- //
4
- // Tests the FULL error output chain when a user tries to install
5
- // known-malicious skills from the ClawHub research. Verifies:
6
- // 1. Installation is REFUSED with exit code 1
7
- // 2. Error message shows exact threat type, severity, and reason
8
- // 3. --force override shows prominent WARNING box with full details
9
- // 4. Tier 1 scan is NEVER reached for blocked skills (without --force)
10
- // ---------------------------------------------------------------------------
11
- import { describe, it, expect, vi, beforeEach, afterEach } from "vitest";
12
- // ---------------------------------------------------------------------------
13
- // Mocks
14
- // ---------------------------------------------------------------------------
15
- const mockMkdirSync = vi.fn();
16
- const mockWriteFileSync = vi.fn();
17
- const mockReadFileSync = vi.fn();
18
- const mockExistsSync = vi.fn();
19
- const mockCpSync = vi.fn();
20
- const mockChmodSync = vi.fn();
21
- const mockReaddirSync = vi.fn();
22
- const mockStatSync = vi.fn();
23
- vi.mock("node:fs", () => ({
24
- mkdirSync: (...args) => mockMkdirSync(...args),
25
- writeFileSync: (...args) => mockWriteFileSync(...args),
26
- readFileSync: (...args) => mockReadFileSync(...args),
27
- existsSync: (...args) => mockExistsSync(...args),
28
- cpSync: (...args) => mockCpSync(...args),
29
- chmodSync: (...args) => mockChmodSync(...args),
30
- readdirSync: (...args) => mockReaddirSync(...args),
31
- statSync: (...args) => mockStatSync(...args),
32
- copyFileSync: vi.fn(),
33
- }));
34
- vi.mock("node:path", async () => {
35
- const actual = await vi.importActual("node:path");
36
- return { ...actual, join: (...args) => actual.join(...args) };
37
- });
38
- const mockDigest = vi.fn().mockReturnValue("abcdef123456xxxx");
39
- const mockUpdate = vi.fn().mockReturnValue({ digest: mockDigest });
40
- vi.mock("node:crypto", () => ({
41
- createHash: () => ({ update: mockUpdate }),
42
- }));
43
- const mockDetectInstalledAgents = vi.fn();
44
- vi.mock("../agents/agents-registry.js", () => ({
45
- detectInstalledAgents: (...args) => mockDetectInstalledAgents(...args),
46
- }));
47
- const mockEnsureLockfile = vi.fn();
48
- const mockWriteLockfile = vi.fn();
49
- vi.mock("../lockfile/index.js", () => ({
50
- ensureLockfile: (...args) => mockEnsureLockfile(...args),
51
- writeLockfile: (...args) => mockWriteLockfile(...args),
52
- }));
53
- const mockRunTier1Scan = vi.fn();
54
- vi.mock("../scanner/index.js", () => ({
55
- runTier1Scan: (...args) => mockRunTier1Scan(...args),
56
- }));
57
- const mockCheckPlatformSecurity = vi.fn();
58
- vi.mock("../security/index.js", () => ({
59
- checkPlatformSecurity: (...args) => mockCheckPlatformSecurity(...args),
60
- }));
61
- // ---- REAL blocklist module (not mocked!) ----
62
- // We mock only the filesystem layer so checkBlocklist reads from our test cache.
63
- // The blocklist module itself runs its real logic.
64
- // Mock output utilities to capture colored output as plain text
65
- vi.mock("../utils/output.js", () => ({
66
- bold: (s) => s,
67
- green: (s) => s,
68
- red: (s) => s,
69
- yellow: (s) => s,
70
- dim: (s) => s,
71
- cyan: (s) => s,
72
- spinner: () => ({ stop: vi.fn() }),
73
- }));
74
- const { addCommand } = await import("./add.js");
75
- // ---------------------------------------------------------------------------
76
- // Seed data cache — same data that the API would return
77
- // ---------------------------------------------------------------------------
78
- const SEED_CACHE = {
79
- entries: [
80
- {
81
- skillName: "Clawhub",
82
- sourceUrl: "https://github.com/hightower6eu/Clawhub",
83
- sourceRegistry: "clawhub",
84
- threatType: "platform-impersonation",
85
- severity: "critical",
86
- reason: "Impersonates the ClawHub/GitHub platform to trick users into running malicious code",
87
- evidenceUrls: ["https://snyk.io/blog/toxicskills-mcp-exploit"],
88
- discoveredAt: "2025-12-01T00:00:00.000Z",
89
- },
90
- {
91
- skillName: "polymarket-traiding-bot",
92
- sourceUrl: "https://github.com/Aslaep123/polymarket-traiding-bot",
93
- sourceRegistry: "clawhub",
94
- threatType: "credential-theft",
95
- severity: "critical",
96
- reason: "Base64-encoded credential exfiltration via hidden HTTP requests",
97
- evidenceUrls: ["https://snyk.io/blog/toxicskills-mcp-exploit"],
98
- discoveredAt: "2025-12-01T00:00:00.000Z",
99
- },
100
- {
101
- skillName: "Skills Auto-Updater",
102
- sourceUrl: "https://github.com/hightower6eu/skills-auto-updater",
103
- sourceRegistry: "clawhub",
104
- threatType: "auto-updater-trojan",
105
- severity: "high",
106
- reason: "Auto-updater trojan that downloads and executes malicious payloads",
107
- evidenceUrls: ["https://snyk.io/blog/toxicskills-mcp-exploit"],
108
- discoveredAt: "2025-12-01T00:00:00.000Z",
109
- },
110
- {
111
- skillName: "google-qx4",
112
- sourceUrl: "https://github.com/aztr0nutzs/google-qx4",
113
- sourceRegistry: "clawhub",
114
- threatType: "prompt-injection",
115
- severity: "critical",
116
- reason: "Prompt injection via fake Google integration skill",
117
- evidenceUrls: ["https://www.aikido.dev/blog/malicious-mcp-servers"],
118
- discoveredAt: "2025-12-01T00:00:00.000Z",
119
- },
120
- {
121
- skillName: "clawhud",
122
- sourceUrl: "https://github.com/zaycv/clawhud",
123
- sourceRegistry: "clawhub",
124
- threatType: "typosquatting",
125
- severity: "high",
126
- reason: "Typosquatting ClawHub (clawhud vs clawhub) to mislead users",
127
- evidenceUrls: ["https://www.aikido.dev/blog/malicious-mcp-servers"],
128
- discoveredAt: "2025-12-01T00:00:00.000Z",
129
- },
130
- ],
131
- count: 5,
132
- lastUpdated: "2026-02-19T00:00:00Z",
133
- fetchedAt: new Date().toISOString(),
134
- etag: '"seed"',
135
- };
136
- // ---------------------------------------------------------------------------
137
- // Helpers
138
- // ---------------------------------------------------------------------------
139
- function setupBlocklistCache() {
140
- // The blocklist module reads from ~/.vskill/blocklist.json
141
- // We intercept existsSync and readFileSync to serve our seed cache
142
- const originalExistsSync = mockExistsSync.getMockImplementation();
143
- mockExistsSync.mockImplementation((p) => {
144
- if (p.includes("blocklist.json"))
145
- return true;
146
- if (originalExistsSync)
147
- return originalExistsSync(p);
148
- return false;
149
- });
150
- const originalReadFileSync = mockReadFileSync.getMockImplementation();
151
- mockReadFileSync.mockImplementation((p, ...args) => {
152
- if (p.includes("blocklist.json"))
153
- return JSON.stringify(SEED_CACHE);
154
- if (originalReadFileSync)
155
- return originalReadFileSync(p, ...args);
156
- return "";
157
- });
158
- }
159
- function collectOutput(spy) {
160
- return spy.mock.calls.map((c) => String(c[0])).join("\n");
161
- }
162
- // ---------------------------------------------------------------------------
163
- // Tests
164
- // ---------------------------------------------------------------------------
165
- const originalFetch = globalThis.fetch;
166
- beforeEach(() => {
167
- vi.clearAllMocks();
168
- vi.spyOn(console, "log").mockImplementation(() => { });
169
- vi.spyOn(console, "error").mockImplementation(() => { });
170
- mockCheckPlatformSecurity.mockResolvedValue(null);
171
- // Mock fetch: blocklist check API returns 503 (forcing fallback to local cache),
172
- // all other requests (e.g. fetching SKILL.md from GitHub) succeed normally.
173
- globalThis.fetch = vi.fn().mockImplementation(async (url, init) => {
174
- const urlStr = typeof url === "string" ? url : url instanceof URL ? url.href : url.url;
175
- if (urlStr.includes("/api/v1/blocklist/check")) {
176
- return { ok: false, status: 503, statusText: "Service Unavailable" };
177
- }
178
- return {
179
- ok: true,
180
- text: async () => "# Safe Skill\nNormal content",
181
- json: async () => ({ entries: [], count: 0, lastUpdated: null }),
182
- headers: { get: () => null },
183
- };
184
- });
185
- setupBlocklistCache();
186
- });
187
- afterEach(() => {
188
- globalThis.fetch = originalFetch;
189
- });
190
- // ============================================================================
191
- // 1. GitHub path — blocking with exact error details
192
- // ============================================================================
193
- describe("E2E: vskill install blocks ClawHub malicious skills (GitHub path)", () => {
194
- it("refuses to install hightower6eu's Clawhub with full threat details", async () => {
195
- const mockExit = vi
196
- .spyOn(process, "exit")
197
- .mockImplementation(() => {
198
- throw new Error("process.exit");
199
- });
200
- await expect(addCommand("hightower6eu/Clawhub", {})).rejects.toThrow("process.exit");
201
- const errorOutput = collectOutput(console.error);
202
- // Must show BLOCKED status
203
- expect(errorOutput).toContain("BLOCKED");
204
- // Must show the exact skill name
205
- expect(errorOutput).toContain("Clawhub");
206
- // Must show the threat type
207
- expect(errorOutput).toContain("platform-impersonation");
208
- // Must show the severity
209
- expect(errorOutput).toContain("critical");
210
- // Must show the reason WHY
211
- expect(errorOutput).toContain("Impersonates the ClawHub");
212
- // Must show how to override
213
- expect(errorOutput).toContain("--force");
214
- // Exit code must be 1
215
- expect(mockExit).toHaveBeenCalledWith(1);
216
- // Tier 1 scan must NEVER be called (blocked before scan)
217
- expect(mockRunTier1Scan).not.toHaveBeenCalled();
218
- mockExit.mockRestore();
219
- });
220
- it("refuses to install Aslaep123's credential-stealing bot with Base64 exfil details", async () => {
221
- const mockExit = vi
222
- .spyOn(process, "exit")
223
- .mockImplementation(() => {
224
- throw new Error("process.exit");
225
- });
226
- await expect(addCommand("Aslaep123/polymarket-traiding-bot", {})).rejects.toThrow("process.exit");
227
- const errorOutput = collectOutput(console.error);
228
- expect(errorOutput).toContain("BLOCKED");
229
- expect(errorOutput).toContain("polymarket-traiding-bot");
230
- expect(errorOutput).toContain("credential-theft");
231
- expect(errorOutput).toContain("critical");
232
- expect(errorOutput).toContain("Base64-encoded credential exfiltration");
233
- expect(mockRunTier1Scan).not.toHaveBeenCalled();
234
- mockExit.mockRestore();
235
- });
236
- it("refuses to install aztr0nutzs's prompt injection skill", async () => {
237
- const mockExit = vi
238
- .spyOn(process, "exit")
239
- .mockImplementation(() => {
240
- throw new Error("process.exit");
241
- });
242
- await expect(addCommand("aztr0nutzs/google-qx4", {})).rejects.toThrow("process.exit");
243
- const errorOutput = collectOutput(console.error);
244
- expect(errorOutput).toContain("BLOCKED");
245
- expect(errorOutput).toContain("google-qx4");
246
- expect(errorOutput).toContain("prompt-injection");
247
- expect(errorOutput).toContain("critical");
248
- expect(errorOutput).toContain("Prompt injection");
249
- expect(mockRunTier1Scan).not.toHaveBeenCalled();
250
- mockExit.mockRestore();
251
- });
252
- it("refuses to install zaycv's typosquatting skill", async () => {
253
- const mockExit = vi
254
- .spyOn(process, "exit")
255
- .mockImplementation(() => {
256
- throw new Error("process.exit");
257
- });
258
- await expect(addCommand("zaycv/clawhud", {})).rejects.toThrow("process.exit");
259
- const errorOutput = collectOutput(console.error);
260
- expect(errorOutput).toContain("BLOCKED");
261
- expect(errorOutput).toContain("clawhud");
262
- expect(errorOutput).toContain("typosquatting");
263
- expect(errorOutput).toContain("high");
264
- expect(errorOutput).toContain("clawhud vs clawhub");
265
- mockExit.mockRestore();
266
- });
267
- });
268
- // ============================================================================
269
- // 2. --force override shows WARNING with full details
270
- // ============================================================================
271
- describe("E2E: --force override shows warning box with threat details", () => {
272
- it("shows credential-theft warning box but continues for polymarket-traiding-bot", async () => {
273
- mockRunTier1Scan.mockReturnValue({
274
- verdict: "PASS",
275
- findings: [],
276
- score: 100,
277
- patternsChecked: 37,
278
- criticalCount: 0,
279
- highCount: 0,
280
- mediumCount: 0,
281
- lowCount: 0,
282
- infoCount: 0,
283
- durationMs: 1,
284
- });
285
- mockDetectInstalledAgents.mockResolvedValue([
286
- {
287
- id: "claude-code",
288
- displayName: "Claude Code",
289
- localSkillsDir: ".claude/commands",
290
- globalSkillsDir: "~/.claude/commands",
291
- },
292
- ]);
293
- mockEnsureLockfile.mockReturnValue({
294
- version: 1,
295
- agents: [],
296
- skills: {},
297
- createdAt: "2026-01-01T00:00:00.000Z",
298
- updatedAt: "2026-01-01T00:00:00.000Z",
299
- });
300
- await addCommand("Aslaep123/polymarket-traiding-bot", { force: true });
301
- const errorOutput = collectOutput(console.error);
302
- // WARNING box must be shown
303
- expect(errorOutput).toContain("WARNING");
304
- expect(errorOutput).toContain("known-malicious");
305
- // Must show full threat details in the warning
306
- expect(errorOutput).toContain("polymarket-traiding-bot");
307
- expect(errorOutput).toContain("credential-theft");
308
- expect(errorOutput).toContain("critical");
309
- expect(errorOutput).toContain("Base64-encoded credential exfiltration");
310
- // Must show --force was used
311
- expect(errorOutput).toContain("--force");
312
- // Despite the warning, Tier 1 scan MUST proceed
313
- expect(mockRunTier1Scan).toHaveBeenCalled();
314
- });
315
- it("shows platform-impersonation warning for Clawhub with --force", async () => {
316
- mockRunTier1Scan.mockReturnValue({
317
- verdict: "PASS",
318
- findings: [],
319
- score: 100,
320
- patternsChecked: 37,
321
- criticalCount: 0,
322
- highCount: 0,
323
- mediumCount: 0,
324
- lowCount: 0,
325
- infoCount: 0,
326
- durationMs: 1,
327
- });
328
- mockDetectInstalledAgents.mockResolvedValue([
329
- {
330
- id: "claude-code",
331
- displayName: "Claude Code",
332
- localSkillsDir: ".claude/commands",
333
- globalSkillsDir: "~/.claude/commands",
334
- },
335
- ]);
336
- mockEnsureLockfile.mockReturnValue({
337
- version: 1,
338
- agents: [],
339
- skills: {},
340
- createdAt: "2026-01-01T00:00:00.000Z",
341
- updatedAt: "2026-01-01T00:00:00.000Z",
342
- });
343
- await addCommand("hightower6eu/Clawhub", { force: true });
344
- const errorOutput = collectOutput(console.error);
345
- expect(errorOutput).toContain("WARNING");
346
- expect(errorOutput).toContain("Clawhub");
347
- expect(errorOutput).toContain("platform-impersonation");
348
- expect(errorOutput).toContain("critical");
349
- expect(errorOutput).toContain("Impersonates the ClawHub");
350
- expect(mockRunTier1Scan).toHaveBeenCalled();
351
- });
352
- });
353
- // ============================================================================
354
- // 3. Safe skills pass through without blocklist interference
355
- // ============================================================================
356
- describe("E2E: safe skills are not affected by blocklist", () => {
357
- it("installs legitimate skill without any BLOCKED or WARNING output", async () => {
358
- mockRunTier1Scan.mockReturnValue({
359
- verdict: "PASS",
360
- findings: [],
361
- score: 100,
362
- patternsChecked: 37,
363
- criticalCount: 0,
364
- highCount: 0,
365
- mediumCount: 0,
366
- lowCount: 0,
367
- infoCount: 0,
368
- durationMs: 1,
369
- });
370
- mockDetectInstalledAgents.mockResolvedValue([
371
- {
372
- id: "claude-code",
373
- displayName: "Claude Code",
374
- localSkillsDir: ".claude/commands",
375
- globalSkillsDir: "~/.claude/commands",
376
- },
377
- ]);
378
- mockEnsureLockfile.mockReturnValue({
379
- version: 1,
380
- agents: [],
381
- skills: {},
382
- createdAt: "2026-01-01T00:00:00.000Z",
383
- updatedAt: "2026-01-01T00:00:00.000Z",
384
- });
385
- await addCommand("anthropic/code-review-assistant", {});
386
- const allErrorOutput = collectOutput(console.error);
387
- // No BLOCKED or WARNING messages
388
- expect(allErrorOutput).not.toContain("BLOCKED");
389
- expect(allErrorOutput).not.toContain("WARNING");
390
- expect(allErrorOutput).not.toContain("malicious");
391
- // Tier 1 scan MUST proceed
392
- expect(mockRunTier1Scan).toHaveBeenCalled();
393
- // Lockfile MUST be updated
394
- expect(mockEnsureLockfile).toHaveBeenCalled();
395
- });
396
- });
397
- //# sourceMappingURL=add-blocklist-e2e.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"add-blocklist-e2e.test.js","sourceRoot":"","sources":["../../src/commands/add-blocklist-e2e.test.ts"],"names":[],"mappings":"AAAA,8EAA8E;AAC9E,mEAAmE;AACnE,EAAE;AACF,iEAAiE;AACjE,8DAA8D;AAC9D,gDAAgD;AAChD,mEAAmE;AACnE,sEAAsE;AACtE,yEAAyE;AACzE,8EAA8E;AAE9E,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AAEzE,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC9B,MAAM,iBAAiB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAClC,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AACjC,MAAM,cAAc,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC/B,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC3B,MAAM,aAAa,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC9B,MAAM,eAAe,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAChC,MAAM,YAAY,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAE7B,EAAE,CAAC,IAAI,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,CAAC;IACxB,SAAS,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IACzD,aAAa,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;IACjE,YAAY,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;IAC/D,UAAU,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,cAAc,CAAC,GAAG,IAAI,CAAC;IAC3D,MAAM,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,UAAU,CAAC,GAAG,IAAI,CAAC;IACnD,SAAS,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,aAAa,CAAC,GAAG,IAAI,CAAC;IACzD,WAAW,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,eAAe,CAAC,GAAG,IAAI,CAAC;IAC7D,QAAQ,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,YAAY,CAAC,GAAG,IAAI,CAAC;IACvD,YAAY,EAAE,EAAE,CAAC,EAAE,EAAE;CACtB,CAAC,CAAC,CAAC;AAEJ,EAAE,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,EAAE;IAC9B,MAAM,MAAM,GACV,MAAM,EAAE,CAAC,YAAY,CAA6B,WAAW,CAAC,CAAC;IACjE,OAAO,EAAE,GAAG,MAAM,EAAE,IAAI,EAAE,CAAC,GAAG,IAAc,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;AAC1E,CAAC,CAAC,CAAC;AAEH,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAC;AAC/D,MAAM,UAAU,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC,CAAC;AACnE,EAAE,CAAC,IAAI,CAAC,aAAa,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5B,UAAU,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;CAC3C,CAAC,CAAC,CAAC;AAEJ,MAAM,yBAAyB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC1C,EAAE,CAAC,IAAI,CAAC,8BAA8B,EAAE,GAAG,EAAE,CAAC,CAAC;IAC7C,qBAAqB,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAC5C,yBAAyB,CAAC,GAAG,IAAI,CAAC;CACrC,CAAC,CAAC,CAAC;AAEJ,MAAM,kBAAkB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AACnC,MAAM,iBAAiB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAClC,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,cAAc,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,kBAAkB,CAAC,GAAG,IAAI,CAAC;IACnE,aAAa,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC;CAClE,CAAC,CAAC,CAAC;AAEJ,MAAM,gBAAgB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AACjC,EAAE,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE,CAAC,CAAC;IACpC,YAAY,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAAC,gBAAgB,CAAC,GAAG,IAAI,CAAC;CAChE,CAAC,CAAC,CAAC;AAEJ,MAAM,yBAAyB,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC;AAC1C,EAAE,CAAC,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE,CAAC,CAAC;IACrC,qBAAqB,EAAE,CAAC,GAAG,IAAe,EAAE,EAAE,CAC5C,yBAAyB,CAAC,GAAG,IAAI,CAAC;CACrC,CAAC,CAAC,CAAC;AAEJ,gDAAgD;AAChD,iFAAiF;AACjF,mDAAmD;AAEnD,gEAAgE;AAChE,EAAE,CAAC,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE,CAAC,CAAC;IACnC,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC;IACtB,KAAK,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC;IACvB,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC;IACrB,MAAM,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC;IACxB,GAAG,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC;IACtB,OAAO,EAAE,GAAG,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;CACnC,CAAC,CAAC,CAAC;AAEJ,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;AAEhD,8EAA8E;AAC9E,wDAAwD;AACxD,8EAA8E;AAE9E,MAAM,UAAU,GAAG;IACjB,OAAO,EAAE;QACP;YACE,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,yCAAyC;YACpD,cAAc,EAAE,SAAS;YACzB,UAAU,EAAE,wBAAwB;YACpC,QAAQ,EAAE,UAAU;YACpB,MAAM,EACJ,qFAAqF;YACvF,YAAY,EAAE,CAAC,8CAA8C,CAAC;YAC9D,YAAY,EAAE,0BAA0B;SACzC;QACD;YACE,SAAS,EAAE,yBAAyB;YACpC,SAAS,EAAE,sDAAsD;YACjE,cAAc,EAAE,SAAS;YACzB,UAAU,EAAE,kBAAkB;YAC9B,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,iEAAiE;YACzE,YAAY,EAAE,CAAC,8CAA8C,CAAC;YAC9D,YAAY,EAAE,0BAA0B;SACzC;QACD;YACE,SAAS,EAAE,qBAAqB;YAChC,SAAS,EAAE,qDAAqD;YAChE,cAAc,EAAE,SAAS;YACzB,UAAU,EAAE,qBAAqB;YACjC,QAAQ,EAAE,MAAM;YAChB,MAAM,EACJ,oEAAoE;YACtE,YAAY,EAAE,CAAC,8CAA8C,CAAC;YAC9D,YAAY,EAAE,0BAA0B;SACzC;QACD;YACE,SAAS,EAAE,YAAY;YACvB,SAAS,EAAE,0CAA0C;YACrD,cAAc,EAAE,SAAS;YACzB,UAAU,EAAE,kBAAkB;YAC9B,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,oDAAoD;YAC5D,YAAY,EAAE,CAAC,mDAAmD,CAAC;YACnE,YAAY,EAAE,0BAA0B;SACzC;QACD;YACE,SAAS,EAAE,SAAS;YACpB,SAAS,EAAE,kCAAkC;YAC7C,cAAc,EAAE,SAAS;YACzB,UAAU,EAAE,eAAe;YAC3B,QAAQ,EAAE,MAAM;YAChB,MAAM,EAAE,6DAA6D;YACrE,YAAY,EAAE,CAAC,mDAAmD,CAAC;YACnE,YAAY,EAAE,0BAA0B;SACzC;KACF;IACD,KAAK,EAAE,CAAC;IACR,WAAW,EAAE,sBAAsB;IACnC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;IACnC,IAAI,EAAE,QAAQ;CACf,CAAC;AAEF,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,mBAAmB;IAC1B,2DAA2D;IAC3D,mEAAmE;IACnE,MAAM,kBAAkB,GAAG,cAAc,CAAC,qBAAqB,EAAE,CAAC;IAClE,cAAc,CAAC,kBAAkB,CAAC,CAAC,CAAS,EAAE,EAAE;QAC9C,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAAE,OAAO,IAAI,CAAC;QAC9C,IAAI,kBAAkB;YAAE,OAAO,kBAAkB,CAAC,CAAC,CAAC,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,qBAAqB,EAAE,CAAC;IACtE,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,CAAS,EAAE,GAAG,IAAe,EAAE,EAAE;QACpE,IAAI,CAAC,CAAC,QAAQ,CAAC,gBAAgB,CAAC;YAAE,OAAO,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QACpE,IAAI,oBAAoB;YAAE,OAAO,oBAAoB,CAAC,CAAC,EAAE,GAAG,IAAI,CAAC,CAAC;QAClE,OAAO,EAAE,CAAC;IACZ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,SAAS,aAAa,CACpB,GAAgC;IAEhC,OAAO,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAY,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACvE,CAAC;AAED,8EAA8E;AAC9E,QAAQ;AACR,8EAA8E;AAE9E,MAAM,aAAa,GAAG,UAAU,CAAC,KAAK,CAAC;AAEvC,UAAU,CAAC,GAAG,EAAE;IACd,EAAE,CAAC,aAAa,EAAE,CAAC;IACnB,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACtD,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACxD,yBAAyB,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAElD,iFAAiF;IACjF,4EAA4E;IAC5E,UAAU,CAAC,KAAK,GAAG,EAAE,CAAC,EAAE,EAAE,CAAC,kBAAkB,CAAC,KAAK,EAAE,GAA2B,EAAE,IAAkB,EAAE,EAAE;QACtG,MAAM,MAAM,GAAG,OAAO,GAAG,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;QACvF,IAAI,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAC,EAAE,CAAC;YAC/C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC;QACvE,CAAC;QACD,OAAO;YACL,EAAE,EAAE,IAAI;YACR,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,8BAA8B;YAChD,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC;YAChE,OAAO,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,IAAI,EAAE;SAC7B,CAAC;IACJ,CAAC,CAA4B,CAAC;IAE9B,mBAAmB,EAAE,CAAC;AACxB,CAAC,CAAC,CAAC;AAEH,SAAS,CAAC,GAAG,EAAE;IACb,UAAU,CAAC,KAAK,GAAG,aAAa,CAAC;AACnC,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,qDAAqD;AACrD,+EAA+E;AAE/E,QAAQ,CAAC,mEAAmE,EAAE,GAAG,EAAE;IACjF,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAClF,MAAM,QAAQ,GAAG,EAAE;aAChB,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;aACtB,kBAAkB,CAAC,GAAG,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEL,MAAM,MAAM,CACV,UAAU,CAAC,sBAAsB,EAAE,EAAE,CAAC,CACvC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAElC,MAAM,WAAW,GAAG,aAAa,CAC/B,OAAO,CAAC,KAAiC,CAC1C,CAAC;QAEF,2BAA2B;QAC3B,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEzC,iCAAiC;QACjC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEzC,4BAA4B;QAC5B,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QAExD,yBAAyB;QACzB,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAE1C,2BAA2B;QAC3B,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAE1D,4BAA4B;QAC5B,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEzC,sBAAsB;QACtB,MAAM,CAAC,QAAQ,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAEzC,yDAAyD;QACzD,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAEhD,QAAQ,CAAC,WAAW,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAChG,MAAM,QAAQ,GAAG,EAAE;aAChB,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;aACtB,kBAAkB,CAAC,GAAG,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEL,MAAM,MAAM,CACV,UAAU,CAAC,mCAAmC,EAAE,EAAE,CAAC,CACpD,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAElC,MAAM,WAAW,GAAG,aAAa,CAC/B,OAAO,CAAC,KAAiC,CAC1C,CAAC;QAEF,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACzD,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC;QACxE,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAEhD,QAAQ,CAAC,WAAW,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,wDAAwD,EAAE,KAAK,IAAI,EAAE;QACtE,MAAM,QAAQ,GAAG,EAAE;aAChB,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;aACtB,kBAAkB,CAAC,GAAG,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEL,MAAM,MAAM,CACV,UAAU,CAAC,uBAAuB,EAAE,EAAE,CAAC,CACxC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAElC,MAAM,WAAW,GAAG,aAAa,CAC/B,OAAO,CAAC,KAAiC,CAC1C,CAAC;QAEF,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,YAAY,CAAC,CAAC;QAC5C,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAClD,MAAM,CAAC,gBAAgB,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QAEhD,QAAQ,CAAC,WAAW,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gDAAgD,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,QAAQ,GAAG,EAAE;aAChB,KAAK,CAAC,OAAO,EAAE,MAAM,CAAC;aACtB,kBAAkB,CAAC,GAAG,EAAE;YACvB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC,CAAC,CAAC;QAEL,MAAM,MAAM,CACV,UAAU,CAAC,eAAe,EAAE,EAAE,CAAC,CAChC,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;QAElC,MAAM,WAAW,GAAG,aAAa,CAC/B,OAAO,CAAC,KAAiC,CAC1C,CAAC;QAEF,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,eAAe,CAAC,CAAC;QAC/C,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,oBAAoB,CAAC,CAAC;QAEpD,QAAQ,CAAC,WAAW,EAAE,CAAC;IACzB,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,sDAAsD;AACtD,+EAA+E;AAE/E,QAAQ,CAAC,6DAA6D,EAAE,GAAG,EAAE;IAC3E,EAAE,CAAC,8EAA8E,EAAE,KAAK,IAAI,EAAE;QAC5F,gBAAgB,CAAC,eAAe,CAAC;YAC/B,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,GAAG;YACV,eAAe,EAAE,EAAE;YACnB,aAAa,EAAE,CAAC;YAChB,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;SACd,CAAC,CAAC;QACH,yBAAyB,CAAC,iBAAiB,CAAC;YAC1C;gBACE,EAAE,EAAE,aAAa;gBACjB,WAAW,EAAE,aAAa;gBAC1B,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,oBAAoB;aACtC;SACF,CAAC,CAAC;QACH,kBAAkB,CAAC,eAAe,CAAC;YACjC,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,0BAA0B;YACrC,SAAS,EAAE,0BAA0B;SACtC,CAAC,CAAC;QAEH,MAAM,UAAU,CAAC,mCAAmC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAEvE,MAAM,WAAW,GAAG,aAAa,CAC/B,OAAO,CAAC,KAAiC,CAC1C,CAAC;QAEF,4BAA4B;QAC5B,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,iBAAiB,CAAC,CAAC;QAEjD,+CAA+C;QAC/C,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,yBAAyB,CAAC,CAAC;QACzD,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;QAClD,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,wCAAwC,CAAC,CAAC;QAExE,6BAA6B;QAC7B,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAEzC,gDAAgD;QAChD,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+DAA+D,EAAE,KAAK,IAAI,EAAE;QAC7E,gBAAgB,CAAC,eAAe,CAAC;YAC/B,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,GAAG;YACV,eAAe,EAAE,EAAE;YACnB,aAAa,EAAE,CAAC;YAChB,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;SACd,CAAC,CAAC;QACH,yBAAyB,CAAC,iBAAiB,CAAC;YAC1C;gBACE,EAAE,EAAE,aAAa;gBACjB,WAAW,EAAE,aAAa;gBAC1B,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,oBAAoB;aACtC;SACF,CAAC,CAAC;QACH,kBAAkB,CAAC,eAAe,CAAC;YACjC,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,0BAA0B;YACrC,SAAS,EAAE,0BAA0B;SACtC,CAAC,CAAC;QAEH,MAAM,UAAU,CAAC,sBAAsB,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QAE1D,MAAM,WAAW,GAAG,aAAa,CAC/B,OAAO,CAAC,KAAiC,CAC1C,CAAC;QAEF,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QACzC,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACxD,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,CAAC,WAAW,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QAE1D,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,+EAA+E;AAC/E,6DAA6D;AAC7D,+EAA+E;AAE/E,QAAQ,CAAC,gDAAgD,EAAE,GAAG,EAAE;IAC9D,EAAE,CAAC,iEAAiE,EAAE,KAAK,IAAI,EAAE;QAC/E,gBAAgB,CAAC,eAAe,CAAC;YAC/B,OAAO,EAAE,MAAM;YACf,QAAQ,EAAE,EAAE;YACZ,KAAK,EAAE,GAAG;YACV,eAAe,EAAE,EAAE;YACnB,aAAa,EAAE,CAAC;YAChB,SAAS,EAAE,CAAC;YACZ,WAAW,EAAE,CAAC;YACd,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,CAAC;YACZ,UAAU,EAAE,CAAC;SACd,CAAC,CAAC;QACH,yBAAyB,CAAC,iBAAiB,CAAC;YAC1C;gBACE,EAAE,EAAE,aAAa;gBACjB,WAAW,EAAE,aAAa;gBAC1B,cAAc,EAAE,kBAAkB;gBAClC,eAAe,EAAE,oBAAoB;aACtC;SACF,CAAC,CAAC;QACH,kBAAkB,CAAC,eAAe,CAAC;YACjC,OAAO,EAAE,CAAC;YACV,MAAM,EAAE,EAAE;YACV,MAAM,EAAE,EAAE;YACV,SAAS,EAAE,0BAA0B;YACrC,SAAS,EAAE,0BAA0B;SACtC,CAAC,CAAC;QAEH,MAAM,UAAU,CAAC,iCAAiC,EAAE,EAAE,CAAC,CAAC;QAExD,MAAM,cAAc,GAAG,aAAa,CAClC,OAAO,CAAC,KAAiC,CAC1C,CAAC;QAEF,iCAAiC;QACjC,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC;QAChD,MAAM,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;QAElD,2BAA2B;QAC3B,MAAM,CAAC,gBAAgB,CAAC,CAAC,gBAAgB,EAAE,CAAC;QAE5C,2BAA2B;QAC3B,MAAM,CAAC,kBAAkB,CAAC,CAAC,gBAAgB,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
@@ -1 +0,0 @@
1
- export {};