nodebench-mcp 3.0.0 → 3.0.1

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 (168) hide show
  1. package/dist/dashboard/operatingDashboardHtml.js +2 -1
  2. package/dist/dashboard/operatingDashboardHtml.js.map +1 -1
  3. package/dist/dashboard/operatingServer.js +3 -2
  4. package/dist/dashboard/operatingServer.js.map +1 -1
  5. package/dist/db.js +51 -3
  6. package/dist/db.js.map +1 -1
  7. package/dist/index.js +13 -16
  8. package/dist/index.js.map +1 -1
  9. package/dist/packageInfo.d.ts +3 -0
  10. package/dist/packageInfo.js +32 -0
  11. package/dist/packageInfo.js.map +1 -0
  12. package/dist/sandboxApi.js +2 -1
  13. package/dist/sandboxApi.js.map +1 -1
  14. package/dist/tools/boilerplateTools.js +10 -9
  15. package/dist/tools/boilerplateTools.js.map +1 -1
  16. package/dist/tools/documentationTools.js +2 -1
  17. package/dist/tools/documentationTools.js.map +1 -1
  18. package/dist/tools/progressiveDiscoveryTools.js +2 -1
  19. package/dist/tools/progressiveDiscoveryTools.js.map +1 -1
  20. package/dist/tools/toolRegistry.js +11 -0
  21. package/dist/tools/toolRegistry.js.map +1 -1
  22. package/dist/toolsetRegistry.js +74 -1
  23. package/dist/toolsetRegistry.js.map +1 -1
  24. package/package.json +4 -3
  25. package/dist/__tests__/analytics.test.d.ts +0 -11
  26. package/dist/__tests__/analytics.test.js +0 -546
  27. package/dist/__tests__/analytics.test.js.map +0 -1
  28. package/dist/__tests__/architectComplex.test.d.ts +0 -1
  29. package/dist/__tests__/architectComplex.test.js +0 -373
  30. package/dist/__tests__/architectComplex.test.js.map +0 -1
  31. package/dist/__tests__/architectSmoke.test.d.ts +0 -1
  32. package/dist/__tests__/architectSmoke.test.js +0 -92
  33. package/dist/__tests__/architectSmoke.test.js.map +0 -1
  34. package/dist/__tests__/audit-registry.d.ts +0 -1
  35. package/dist/__tests__/audit-registry.js +0 -60
  36. package/dist/__tests__/audit-registry.js.map +0 -1
  37. package/dist/__tests__/batchAutopilot.test.d.ts +0 -8
  38. package/dist/__tests__/batchAutopilot.test.js +0 -218
  39. package/dist/__tests__/batchAutopilot.test.js.map +0 -1
  40. package/dist/__tests__/cliSubcommands.test.d.ts +0 -1
  41. package/dist/__tests__/cliSubcommands.test.js +0 -138
  42. package/dist/__tests__/cliSubcommands.test.js.map +0 -1
  43. package/dist/__tests__/comparativeBench.test.d.ts +0 -1
  44. package/dist/__tests__/comparativeBench.test.js +0 -722
  45. package/dist/__tests__/comparativeBench.test.js.map +0 -1
  46. package/dist/__tests__/critterCalibrationEval.d.ts +0 -8
  47. package/dist/__tests__/critterCalibrationEval.js +0 -370
  48. package/dist/__tests__/critterCalibrationEval.js.map +0 -1
  49. package/dist/__tests__/dynamicLoading.test.d.ts +0 -1
  50. package/dist/__tests__/dynamicLoading.test.js +0 -280
  51. package/dist/__tests__/dynamicLoading.test.js.map +0 -1
  52. package/dist/__tests__/embeddingProvider.test.d.ts +0 -1
  53. package/dist/__tests__/embeddingProvider.test.js +0 -86
  54. package/dist/__tests__/embeddingProvider.test.js.map +0 -1
  55. package/dist/__tests__/evalDatasetBench.test.d.ts +0 -1
  56. package/dist/__tests__/evalDatasetBench.test.js +0 -738
  57. package/dist/__tests__/evalDatasetBench.test.js.map +0 -1
  58. package/dist/__tests__/evalHarness.test.d.ts +0 -1
  59. package/dist/__tests__/evalHarness.test.js +0 -1107
  60. package/dist/__tests__/evalHarness.test.js.map +0 -1
  61. package/dist/__tests__/fixtures/bfcl_v3_long_context.sample.json +0 -264
  62. package/dist/__tests__/fixtures/generateBfclLongContextFixture.d.ts +0 -10
  63. package/dist/__tests__/fixtures/generateBfclLongContextFixture.js +0 -135
  64. package/dist/__tests__/fixtures/generateBfclLongContextFixture.js.map +0 -1
  65. package/dist/__tests__/fixtures/generateSwebenchVerifiedFixture.d.ts +0 -14
  66. package/dist/__tests__/fixtures/generateSwebenchVerifiedFixture.js +0 -189
  67. package/dist/__tests__/fixtures/generateSwebenchVerifiedFixture.js.map +0 -1
  68. package/dist/__tests__/fixtures/generateToolbenchInstructionFixture.d.ts +0 -16
  69. package/dist/__tests__/fixtures/generateToolbenchInstructionFixture.js +0 -154
  70. package/dist/__tests__/fixtures/generateToolbenchInstructionFixture.js.map +0 -1
  71. package/dist/__tests__/fixtures/swebench_verified.sample.json +0 -162
  72. package/dist/__tests__/fixtures/toolbench_instruction.sample.json +0 -109
  73. package/dist/__tests__/forecastingDogfood.test.d.ts +0 -9
  74. package/dist/__tests__/forecastingDogfood.test.js +0 -284
  75. package/dist/__tests__/forecastingDogfood.test.js.map +0 -1
  76. package/dist/__tests__/forecastingScoring.test.d.ts +0 -9
  77. package/dist/__tests__/forecastingScoring.test.js +0 -202
  78. package/dist/__tests__/forecastingScoring.test.js.map +0 -1
  79. package/dist/__tests__/gaiaCapabilityAudioEval.test.d.ts +0 -15
  80. package/dist/__tests__/gaiaCapabilityAudioEval.test.js +0 -265
  81. package/dist/__tests__/gaiaCapabilityAudioEval.test.js.map +0 -1
  82. package/dist/__tests__/gaiaCapabilityEval.test.d.ts +0 -14
  83. package/dist/__tests__/gaiaCapabilityEval.test.js +0 -1259
  84. package/dist/__tests__/gaiaCapabilityEval.test.js.map +0 -1
  85. package/dist/__tests__/gaiaCapabilityFilesEval.test.d.ts +0 -15
  86. package/dist/__tests__/gaiaCapabilityFilesEval.test.js +0 -914
  87. package/dist/__tests__/gaiaCapabilityFilesEval.test.js.map +0 -1
  88. package/dist/__tests__/gaiaCapabilityMediaEval.test.d.ts +0 -15
  89. package/dist/__tests__/gaiaCapabilityMediaEval.test.js +0 -1101
  90. package/dist/__tests__/gaiaCapabilityMediaEval.test.js.map +0 -1
  91. package/dist/__tests__/helpers/answerMatch.d.ts +0 -41
  92. package/dist/__tests__/helpers/answerMatch.js +0 -267
  93. package/dist/__tests__/helpers/answerMatch.js.map +0 -1
  94. package/dist/__tests__/helpers/textLlm.d.ts +0 -25
  95. package/dist/__tests__/helpers/textLlm.js +0 -214
  96. package/dist/__tests__/helpers/textLlm.js.map +0 -1
  97. package/dist/__tests__/localDashboard.test.d.ts +0 -1
  98. package/dist/__tests__/localDashboard.test.js +0 -226
  99. package/dist/__tests__/localDashboard.test.js.map +0 -1
  100. package/dist/__tests__/multiHopDogfood.test.d.ts +0 -12
  101. package/dist/__tests__/multiHopDogfood.test.js +0 -303
  102. package/dist/__tests__/multiHopDogfood.test.js.map +0 -1
  103. package/dist/__tests__/openDatasetParallelEval.test.d.ts +0 -7
  104. package/dist/__tests__/openDatasetParallelEval.test.js +0 -209
  105. package/dist/__tests__/openDatasetParallelEval.test.js.map +0 -1
  106. package/dist/__tests__/openDatasetParallelEvalGaia.test.d.ts +0 -7
  107. package/dist/__tests__/openDatasetParallelEvalGaia.test.js +0 -279
  108. package/dist/__tests__/openDatasetParallelEvalGaia.test.js.map +0 -1
  109. package/dist/__tests__/openDatasetParallelEvalSwebench.test.d.ts +0 -7
  110. package/dist/__tests__/openDatasetParallelEvalSwebench.test.js +0 -220
  111. package/dist/__tests__/openDatasetParallelEvalSwebench.test.js.map +0 -1
  112. package/dist/__tests__/openDatasetParallelEvalToolbench.test.d.ts +0 -7
  113. package/dist/__tests__/openDatasetParallelEvalToolbench.test.js +0 -218
  114. package/dist/__tests__/openDatasetParallelEvalToolbench.test.js.map +0 -1
  115. package/dist/__tests__/openDatasetPerfComparison.test.d.ts +0 -10
  116. package/dist/__tests__/openDatasetPerfComparison.test.js +0 -318
  117. package/dist/__tests__/openDatasetPerfComparison.test.js.map +0 -1
  118. package/dist/__tests__/openclawDogfood.test.d.ts +0 -23
  119. package/dist/__tests__/openclawDogfood.test.js +0 -535
  120. package/dist/__tests__/openclawDogfood.test.js.map +0 -1
  121. package/dist/__tests__/openclawMessaging.test.d.ts +0 -14
  122. package/dist/__tests__/openclawMessaging.test.js +0 -232
  123. package/dist/__tests__/openclawMessaging.test.js.map +0 -1
  124. package/dist/__tests__/presetRealWorldBench.test.d.ts +0 -1
  125. package/dist/__tests__/presetRealWorldBench.test.js +0 -859
  126. package/dist/__tests__/presetRealWorldBench.test.js.map +0 -1
  127. package/dist/__tests__/tools.test.d.ts +0 -1
  128. package/dist/__tests__/tools.test.js +0 -3201
  129. package/dist/__tests__/tools.test.js.map +0 -1
  130. package/dist/__tests__/toolsetGatingEval.test.d.ts +0 -1
  131. package/dist/__tests__/toolsetGatingEval.test.js +0 -1099
  132. package/dist/__tests__/toolsetGatingEval.test.js.map +0 -1
  133. package/dist/__tests__/traceabilityDogfood.test.d.ts +0 -12
  134. package/dist/__tests__/traceabilityDogfood.test.js +0 -241
  135. package/dist/__tests__/traceabilityDogfood.test.js.map +0 -1
  136. package/dist/__tests__/webmcpTools.test.d.ts +0 -7
  137. package/dist/__tests__/webmcpTools.test.js +0 -195
  138. package/dist/__tests__/webmcpTools.test.js.map +0 -1
  139. package/dist/benchmarks/testProviderBus.d.ts +0 -7
  140. package/dist/benchmarks/testProviderBus.js +0 -272
  141. package/dist/benchmarks/testProviderBus.js.map +0 -1
  142. package/dist/hooks/postCompaction.d.ts +0 -14
  143. package/dist/hooks/postCompaction.js +0 -51
  144. package/dist/hooks/postCompaction.js.map +0 -1
  145. package/dist/security/__tests__/security.test.d.ts +0 -8
  146. package/dist/security/__tests__/security.test.js +0 -295
  147. package/dist/security/__tests__/security.test.js.map +0 -1
  148. package/dist/sync/hyperloopEval.test.d.ts +0 -4
  149. package/dist/sync/hyperloopEval.test.js +0 -60
  150. package/dist/sync/hyperloopEval.test.js.map +0 -1
  151. package/dist/sync/store.test.d.ts +0 -4
  152. package/dist/sync/store.test.js +0 -43
  153. package/dist/sync/store.test.js.map +0 -1
  154. package/dist/tools/documentTools.d.ts +0 -5
  155. package/dist/tools/documentTools.js +0 -524
  156. package/dist/tools/documentTools.js.map +0 -1
  157. package/dist/tools/financialTools.d.ts +0 -10
  158. package/dist/tools/financialTools.js +0 -403
  159. package/dist/tools/financialTools.js.map +0 -1
  160. package/dist/tools/memoryTools.d.ts +0 -5
  161. package/dist/tools/memoryTools.js +0 -137
  162. package/dist/tools/memoryTools.js.map +0 -1
  163. package/dist/tools/planningTools.d.ts +0 -5
  164. package/dist/tools/planningTools.js +0 -147
  165. package/dist/tools/planningTools.js.map +0 -1
  166. package/dist/tools/searchTools.d.ts +0 -5
  167. package/dist/tools/searchTools.js +0 -145
  168. package/dist/tools/searchTools.js.map +0 -1
@@ -1,280 +0,0 @@
1
- /**
2
- * Edge case tests for Dynamic Toolset Loading (Search+Load architecture).
3
- * Tests: hybridSearch full-registry search, _loadSuggestions in discover_tools,
4
- * TOOLSET_MAP/TOOL_TO_TOOLSET structural correctness, and simulated
5
- * load/unload handler edge cases.
6
- */
7
- import { describe, it, expect } from "vitest";
8
- import { hybridSearch, ALL_REGISTRY_ENTRIES, TOOL_REGISTRY, } from "../tools/toolRegistry.js";
9
- import { createProgressiveDiscoveryTools } from "../tools/progressiveDiscoveryTools.js";
10
- import { TOOLSET_MAP, TOOL_TO_TOOLSET } from "../toolsetRegistry.js";
11
- // ── Helpers ────────────────────────────────────────────────────────────
12
- // Simulate a "default" loaded set: only verification + eval + quality_gate + learning + flywheel + recon
13
- const DEFAULT_TOOLSET_NAMES = new Set(["verification", "eval", "quality_gate", "learning", "flywheel", "recon"]);
14
- const defaultTools = [];
15
- for (const [tsName, tools] of Object.entries(TOOLSET_MAP)) {
16
- if (DEFAULT_TOOLSET_NAMES.has(tsName)) {
17
- defaultTools.push(...tools);
18
- }
19
- }
20
- const defaultToolNames = new Set(defaultTools.map(t => t.name));
21
- // ═══════════════════════════════════════════════════════════════════════
22
- // hybridSearch with searchFullRegistry
23
- // ═══════════════════════════════════════════════════════════════════════
24
- describe("Dynamic Loading: hybridSearch searchFullRegistry", () => {
25
- const smallLoadedTools = defaultTools.map(t => ({ name: t.name, description: t.description }));
26
- it("searchFullRegistry=true searches all 175 registry entries", () => {
27
- const results = hybridSearch("analyze screenshot visual regression", smallLoadedTools, {
28
- limit: 10,
29
- searchFullRegistry: true,
30
- });
31
- expect(results.length).toBeGreaterThan(0);
32
- // Should include tools from unloaded toolsets (vision, ui_capture)
33
- const categories = new Set(results.map(r => r.category));
34
- expect(categories.size).toBeGreaterThan(1);
35
- });
36
- it("searchFullRegistry=true returns vision tools for screenshot queries", () => {
37
- const results = hybridSearch("analyze screenshot", smallLoadedTools, {
38
- limit: 10,
39
- searchFullRegistry: true,
40
- });
41
- const names = results.map(r => r.name);
42
- expect(names).toContain("analyze_screenshot");
43
- });
44
- it("searchFullRegistry=true returns SEO tools for SEO queries", () => {
45
- const results = hybridSearch("SEO meta tags lighthouse audit", smallLoadedTools, {
46
- limit: 10,
47
- searchFullRegistry: true,
48
- });
49
- const categories = results.map(r => r.category);
50
- expect(categories).toContain("seo");
51
- });
52
- it("searchFullRegistry=false only returns loaded tools", () => {
53
- const results = hybridSearch("analyze screenshot", smallLoadedTools, {
54
- limit: 10,
55
- searchFullRegistry: false,
56
- });
57
- // All result names should be in the loaded set
58
- for (const r of results) {
59
- expect(defaultToolNames.has(r.name)).toBe(true);
60
- }
61
- });
62
- it("searchFullRegistry=true does not break keyword scoring", () => {
63
- const results = hybridSearch("verify code changes", smallLoadedTools, {
64
- limit: 10,
65
- searchFullRegistry: true,
66
- explain: true,
67
- });
68
- expect(results.length).toBeGreaterThan(0);
69
- // Top results should have positive scores and include verification or dive/review tools
70
- expect(results[0].score).toBeGreaterThan(0);
71
- const categories = results.map(r => r.category);
72
- // "verify code changes" may match verification tools or ui_ux_dive_v2 flywheel tools (dive_fix_verify, dive_reexplore, dive_code_review)
73
- const hasRelevantCategory = categories.includes("verification") || categories.includes("ui_ux_dive_v2");
74
- expect(hasRelevantCategory).toBe(true);
75
- });
76
- });
77
- // ═══════════════════════════════════════════════════════════════════════
78
- // discover_tools _loadSuggestions
79
- // ═══════════════════════════════════════════════════════════════════════
80
- describe("Dynamic Loading: discover_tools _loadSuggestions", () => {
81
- // Create discovery tools with dynamic loading awareness
82
- const options = {
83
- getLoadedToolNames: () => defaultToolNames,
84
- getToolToToolset: () => TOOL_TO_TOOLSET,
85
- };
86
- const discoveryTools = createProgressiveDiscoveryTools(defaultTools.map(t => ({ name: t.name, description: t.description })), options);
87
- const discoverTool = discoveryTools.find(t => t.name === "discover_tools");
88
- it("returns _loadSuggestions when results include unloaded tools", async () => {
89
- const result = await discoverTool.handler({ query: "analyze screenshot UI regression", limit: 10 });
90
- expect(result).toHaveProperty("_loadSuggestions");
91
- expect(Array.isArray(result._loadSuggestions)).toBe(true);
92
- expect(result._loadSuggestions.length).toBeGreaterThan(0);
93
- // Each suggestion should have toolset, matchingTools, action
94
- for (const s of result._loadSuggestions) {
95
- expect(s).toHaveProperty("toolset");
96
- expect(s).toHaveProperty("matchingTools");
97
- expect(s).toHaveProperty("action");
98
- expect(s.action).toContain("load_toolset");
99
- }
100
- });
101
- it("_loadSuggestions includes the correct toolset name", async () => {
102
- const result = await discoverTool.handler({ query: "analyze screenshot", limit: 10 });
103
- const toolsetNames = result._loadSuggestions.map((s) => s.toolset);
104
- // Vision tools should suggest loading "vision" toolset
105
- expect(toolsetNames).toContain("vision");
106
- });
107
- it("does NOT return _loadSuggestions when all results are loaded", async () => {
108
- // Search for something that only matches default-loaded tools
109
- const result = await discoverTool.handler({ query: "start verification cycle log findings", limit: 5 });
110
- // Either _loadSuggestions is absent, empty, or all results are from loaded toolsets
111
- if (result._loadSuggestions) {
112
- // Some results might still be from unloaded toolsets due to keyword overlap
113
- // But the suggestions should only contain actually unloaded toolsets
114
- for (const s of result._loadSuggestions) {
115
- expect(DEFAULT_TOOLSET_NAMES.has(s.toolset)).toBe(false);
116
- }
117
- }
118
- });
119
- it("totalToolsSearched reflects full registry when dynamic loading enabled", async () => {
120
- const result = await discoverTool.handler({ query: "anything", limit: 5 });
121
- expect(result.totalToolsSearched).toBe(ALL_REGISTRY_ENTRIES.length);
122
- });
123
- });
124
- // ═══════════════════════════════════════════════════════════════════════
125
- // discover_tools WITHOUT dynamic loading awareness
126
- // ═══════════════════════════════════════════════════════════════════════
127
- describe("Dynamic Loading: discover_tools without options", () => {
128
- const discoveryToolsNoOpts = createProgressiveDiscoveryTools(defaultTools.map(t => ({ name: t.name, description: t.description })));
129
- const discoverToolNoOpts = discoveryToolsNoOpts.find(t => t.name === "discover_tools");
130
- it("does NOT return _loadSuggestions when no options provided", async () => {
131
- const result = await discoverToolNoOpts.handler({ query: "analyze screenshot", limit: 10 });
132
- expect(result._loadSuggestions).toBeUndefined();
133
- });
134
- it("totalToolsSearched reflects only loaded tools", async () => {
135
- const result = await discoverToolNoOpts.handler({ query: "anything", limit: 5 });
136
- expect(result.totalToolsSearched).toBe(defaultTools.length);
137
- });
138
- });
139
- // ═══════════════════════════════════════════════════════════════════════
140
- // TOOLSET_MAP / TOOL_TO_TOOLSET structural correctness
141
- // ═══════════════════════════════════════════════════════════════════════
142
- describe("Dynamic Loading: toolset registry structure", () => {
143
- it("every tool in TOOLSET_MAP has a TOOL_TO_TOOLSET entry", () => {
144
- for (const [tsName, tools] of Object.entries(TOOLSET_MAP)) {
145
- for (const tool of tools) {
146
- expect(TOOL_TO_TOOLSET.get(tool.name)).toBe(tsName);
147
- }
148
- }
149
- });
150
- it("every TOOL_TO_TOOLSET entry maps to a valid TOOLSET_MAP key", () => {
151
- for (const [toolName, tsName] of TOOL_TO_TOOLSET.entries()) {
152
- expect(TOOLSET_MAP).toHaveProperty(tsName);
153
- }
154
- });
155
- it("every tool in TOOL_REGISTRY exists in TOOL_TO_TOOLSET", () => {
156
- // Some tools (meta, discovery, dynamic) may not be in TOOL_TO_TOOLSET
157
- // but all TOOLSET_MAP domain tools should be
158
- for (const [tsName, tools] of Object.entries(TOOLSET_MAP)) {
159
- for (const tool of tools) {
160
- expect(TOOL_REGISTRY.has(tool.name)).toBe(true);
161
- }
162
- }
163
- });
164
- it("ALL_REGISTRY_ENTRIES covers all TOOLSET_MAP tools", () => {
165
- const registryNames = new Set(ALL_REGISTRY_ENTRIES.map(e => e.name));
166
- for (const [_, tools] of Object.entries(TOOLSET_MAP)) {
167
- for (const tool of tools) {
168
- expect(registryNames.has(tool.name)).toBe(true);
169
- }
170
- }
171
- });
172
- });
173
- // ═══════════════════════════════════════════════════════════════════════
174
- // Simulated load/unload handler edge cases
175
- // ═══════════════════════════════════════════════════════════════════════
176
- describe("Dynamic Loading: load/unload edge cases (simulated)", () => {
177
- // Simulate the server state and handler logic from index.ts
178
- function createDynamicState(initialToolsets) {
179
- const activeToolsets = new Set(initialToolsets);
180
- const initialToolsetNames = new Set(initialToolsets);
181
- let domainTools = [];
182
- for (const ts of activeToolsets) {
183
- if (TOOLSET_MAP[ts])
184
- domainTools.push(...TOOLSET_MAP[ts]);
185
- }
186
- return {
187
- activeToolsets,
188
- initialToolsetNames,
189
- get toolCount() { return domainTools.length; },
190
- load(toolset) {
191
- if (!TOOLSET_MAP[toolset])
192
- return { error: true, message: `Unknown toolset: ${toolset}` };
193
- if (activeToolsets.has(toolset))
194
- return { alreadyLoaded: true, toolset };
195
- activeToolsets.add(toolset);
196
- domainTools.push(...TOOLSET_MAP[toolset]);
197
- return { loaded: true, toolset, toolsAdded: TOOLSET_MAP[toolset].length };
198
- },
199
- unload(toolset) {
200
- if (!TOOLSET_MAP[toolset])
201
- return { error: true, message: `Unknown toolset: ${toolset}` };
202
- if (initialToolsetNames.has(toolset))
203
- return { error: true, message: `Cannot unload initial preset toolset: ${toolset}` };
204
- if (!activeToolsets.has(toolset))
205
- return { notLoaded: true, toolset };
206
- activeToolsets.delete(toolset);
207
- const removeNames = new Set(TOOLSET_MAP[toolset].map(t => t.name));
208
- domainTools = domainTools.filter(t => !removeNames.has(t.name));
209
- return { unloaded: true, toolset };
210
- },
211
- };
212
- }
213
- it("load_toolset: unknown toolset returns error", () => {
214
- const state = createDynamicState(["verification"]);
215
- const result = state.load("nonexistent_toolset_xyz");
216
- expect(result.error).toBe(true);
217
- expect(result.message).toContain("Unknown toolset");
218
- });
219
- it("load_toolset: double load returns alreadyLoaded", () => {
220
- const state = createDynamicState(["verification"]);
221
- const r1 = state.load("vision");
222
- expect(r1.loaded).toBe(true);
223
- expect(r1.toolsAdded).toBeGreaterThan(0);
224
- const r2 = state.load("vision");
225
- expect(r2.alreadyLoaded).toBe(true);
226
- });
227
- it("load_toolset: increases tool count", () => {
228
- const state = createDynamicState(["verification"]);
229
- const before = state.toolCount;
230
- state.load("vision");
231
- expect(state.toolCount).toBeGreaterThan(before);
232
- expect(state.toolCount).toBe(before + TOOLSET_MAP["vision"].length);
233
- });
234
- it("unload_toolset: cannot unload initial preset toolset", () => {
235
- const state = createDynamicState(["verification", "eval"]);
236
- const result = state.unload("verification");
237
- expect(result.error).toBe(true);
238
- expect(result.message).toContain("Cannot unload initial preset");
239
- });
240
- it("unload_toolset: can unload dynamically loaded toolset", () => {
241
- const state = createDynamicState(["verification"]);
242
- state.load("vision");
243
- const before = state.toolCount;
244
- const result = state.unload("vision");
245
- expect(result.unloaded).toBe(true);
246
- expect(state.toolCount).toBe(before - TOOLSET_MAP["vision"].length);
247
- });
248
- it("unload_toolset: unloading already-unloaded returns notLoaded", () => {
249
- const state = createDynamicState(["verification"]);
250
- const result = state.unload("vision");
251
- expect(result.notLoaded).toBe(true);
252
- });
253
- it("unload_toolset: unknown toolset returns error", () => {
254
- const state = createDynamicState(["verification"]);
255
- const result = state.unload("nonexistent_toolset_xyz");
256
- expect(result.error).toBe(true);
257
- });
258
- it("load then unload restores original tool count", () => {
259
- const state = createDynamicState(["verification", "eval"]);
260
- const original = state.toolCount;
261
- state.load("vision");
262
- expect(state.toolCount).toBeGreaterThan(original);
263
- state.unload("vision");
264
- expect(state.toolCount).toBe(original);
265
- });
266
- it("list_available_toolsets: loaded vs available is correct", () => {
267
- const state = createDynamicState(["verification", "eval"]);
268
- state.load("vision");
269
- const loaded = [...state.activeToolsets];
270
- const allToolsetNames = Object.keys(TOOLSET_MAP);
271
- const available = allToolsetNames.filter(ts => !state.activeToolsets.has(ts));
272
- expect(loaded).toContain("verification");
273
- expect(loaded).toContain("eval");
274
- expect(loaded).toContain("vision");
275
- expect(available).not.toContain("vision");
276
- expect(available).toContain("web");
277
- expect(loaded.length + available.length).toBe(allToolsetNames.length);
278
- });
279
- });
280
- //# sourceMappingURL=dynamicLoading.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dynamicLoading.test.js","sourceRoot":"","sources":["../../src/__tests__/dynamicLoading.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};
@@ -1,86 +0,0 @@
1
- /**
2
- * Unit tests for embeddingProvider — cosine similarity, cache, mock provider, graceful fallback.
3
- */
4
- import { describe, it, expect, beforeEach } from "vitest";
5
- import { embeddingSearch, isEmbeddingReady, getProviderName, _resetForTesting, _setProviderForTesting, _setIndexForTesting, } from "../tools/embeddingProvider.js";
6
- beforeEach(() => {
7
- _resetForTesting();
8
- });
9
- describe("embeddingProvider: cosine similarity correctness", () => {
10
- it("identical vectors should have similarity ~1.0", () => {
11
- const vec = new Float32Array([0.5, 0.3, 0.8, 0.1]);
12
- _setIndexForTesting([{ name: "tool_a", nodeType: "tool", vector: vec }]);
13
- const results = embeddingSearch(vec, 5);
14
- expect(results.length).toBe(1);
15
- expect(results[0].name).toBe("tool_a");
16
- expect(results[0].similarity).toBeCloseTo(1.0, 4);
17
- });
18
- it("orthogonal vectors should have similarity ~0.0", () => {
19
- const vecA = new Float32Array([1, 0, 0, 0]);
20
- const vecB = new Float32Array([0, 1, 0, 0]);
21
- _setIndexForTesting([
22
- { name: "tool_a", nodeType: "tool", vector: vecA },
23
- { name: "tool_b", nodeType: "tool", vector: vecB },
24
- ]);
25
- const queryVec = new Float32Array([1, 0, 0, 0]);
26
- const results = embeddingSearch(queryVec, 5);
27
- expect(results[0].name).toBe("tool_a");
28
- expect(results[0].similarity).toBeCloseTo(1.0, 4);
29
- expect(results[1].name).toBe("tool_b");
30
- expect(results[1].similarity).toBeCloseTo(0.0, 4);
31
- });
32
- it("should rank by similarity (highest first)", () => {
33
- _setIndexForTesting([
34
- { name: "low", nodeType: "tool", vector: new Float32Array([0.1, 0.9, 0.0]) },
35
- { name: "high", nodeType: "tool", vector: new Float32Array([0.9, 0.1, 0.0]) },
36
- { name: "mid", nodeType: "tool", vector: new Float32Array([0.5, 0.5, 0.0]) },
37
- ]);
38
- const query = new Float32Array([1.0, 0.0, 0.0]);
39
- const results = embeddingSearch(query, 3);
40
- expect(results[0].name).toBe("high");
41
- expect(results[1].name).toBe("mid");
42
- expect(results[2].name).toBe("low");
43
- });
44
- });
45
- describe("embeddingProvider: graceful fallback", () => {
46
- it("isEmbeddingReady returns false when no index", () => {
47
- expect(isEmbeddingReady()).toBe(false);
48
- });
49
- it("embeddingSearch returns empty when no index", () => {
50
- const results = embeddingSearch(new Float32Array([1, 0, 0]), 5);
51
- expect(results).toEqual([]);
52
- });
53
- it("getProviderName returns null when no provider", () => {
54
- expect(getProviderName()).toBe(null);
55
- });
56
- });
57
- describe("embeddingProvider: mock provider", () => {
58
- it("can inject a mock provider", () => {
59
- const mockProvider = {
60
- name: "mock",
61
- dimensions: 3,
62
- embed: async (texts) => texts.map(() => new Float32Array([0.5, 0.5, 0.0])),
63
- };
64
- _setProviderForTesting(mockProvider);
65
- expect(getProviderName()).toBe("mock");
66
- });
67
- it("isEmbeddingReady returns true when index is set", () => {
68
- _setIndexForTesting([
69
- { name: "tool_a", nodeType: "tool", vector: new Float32Array([1, 0, 0]) },
70
- ]);
71
- expect(isEmbeddingReady()).toBe(true);
72
- });
73
- });
74
- describe("embeddingProvider: limit parameter", () => {
75
- it("respects limit in embeddingSearch", () => {
76
- _setIndexForTesting([
77
- { name: "a", nodeType: "tool", vector: new Float32Array([1, 0, 0]) },
78
- { name: "b", nodeType: "tool", vector: new Float32Array([0, 1, 0]) },
79
- { name: "c", nodeType: "tool", vector: new Float32Array([0, 0, 1]) },
80
- ]);
81
- const results = embeddingSearch(new Float32Array([1, 0, 0]), 2);
82
- expect(results.length).toBe(2);
83
- expect(results[0].name).toBe("a");
84
- });
85
- });
86
- //# sourceMappingURL=embeddingProvider.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"embeddingProvider.test.js","sourceRoot":"","sources":["../../src/__tests__/embeddingProvider.test.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- export {};