@llmindset/hf-mcp-server 0.1.26 → 0.1.28

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 (105) hide show
  1. package/dist/server/application.d.ts +1 -1
  2. package/dist/server/application.d.ts.map +1 -1
  3. package/dist/server/application.js +2 -2
  4. package/dist/server/application.js.map +1 -1
  5. package/dist/server/gradio-endpoint-connector.d.ts +1 -1
  6. package/dist/server/gradio-endpoint-connector.d.ts.map +1 -1
  7. package/dist/server/gradio-endpoint-connector.js +23 -7
  8. package/dist/server/gradio-endpoint-connector.js.map +1 -1
  9. package/dist/server/mcp-proxy.d.ts +1 -1
  10. package/dist/server/mcp-proxy.d.ts.map +1 -1
  11. package/dist/server/mcp-proxy.js +1 -1
  12. package/dist/server/mcp-proxy.js.map +1 -1
  13. package/dist/server/mcp-server.d.ts +1 -1
  14. package/dist/server/mcp-server.d.ts.map +1 -1
  15. package/dist/server/mcp-server.js +2 -2
  16. package/dist/server/mcp-server.js.map +1 -1
  17. package/dist/server/sse.js +1 -1
  18. package/dist/server/sse.js.map +1 -1
  19. package/dist/server/stdio.js +1 -1
  20. package/dist/server/stdio.js.map +1 -1
  21. package/dist/server/streamableHttp.js +1 -1
  22. package/dist/server/streamableHttp.js.map +1 -1
  23. package/dist/server/transport/base-transport.d.ts +2 -1
  24. package/dist/server/transport/base-transport.d.ts.map +1 -1
  25. package/dist/server/transport/base-transport.js +15 -6
  26. package/dist/server/transport/base-transport.js.map +1 -1
  27. package/dist/server/transport/sse-transport.js +1 -1
  28. package/dist/server/transport/sse-transport.js.map +1 -1
  29. package/dist/server/transport/stateless-http-transport.d.ts.map +1 -1
  30. package/dist/server/transport/stateless-http-transport.js +5 -3
  31. package/dist/server/transport/stateless-http-transport.js.map +1 -1
  32. package/dist/server/transport/stdio-transport.js +1 -1
  33. package/dist/server/transport/stdio-transport.js.map +1 -1
  34. package/dist/server/transport/streamable-http-transport.js +1 -1
  35. package/dist/server/transport/streamable-http-transport.js.map +1 -1
  36. package/dist/server/utils/api-metrics.js +1 -1
  37. package/dist/server/utils/api-metrics.js.map +1 -1
  38. package/dist/server/utils/auth-utils.js +1 -1
  39. package/dist/server/utils/auth-utils.js.map +1 -1
  40. package/dist/server/utils/gradio-utils.d.ts +3 -0
  41. package/dist/server/utils/gradio-utils.d.ts.map +1 -0
  42. package/dist/server/utils/gradio-utils.js +20 -0
  43. package/dist/server/utils/gradio-utils.js.map +1 -0
  44. package/dist/server/utils/hf-dataset-transport.d.ts.map +1 -0
  45. package/dist/server/{lib → utils}/hf-dataset-transport.js +1 -1
  46. package/dist/server/utils/hf-dataset-transport.js.map +1 -0
  47. package/dist/server/utils/logger.d.ts.map +1 -0
  48. package/dist/server/utils/logger.js +81 -0
  49. package/dist/server/utils/logger.js.map +1 -0
  50. package/dist/server/utils/mcp-api-client.d.ts.map +1 -0
  51. package/dist/server/utils/mcp-api-client.js.map +1 -0
  52. package/dist/server/utils/tool-selection-strategy.d.ts.map +1 -0
  53. package/dist/server/utils/tool-selection-strategy.js.map +1 -0
  54. package/dist/server/web-server.d.ts +1 -1
  55. package/dist/server/web-server.d.ts.map +1 -1
  56. package/dist/server/web-server.js +1 -1
  57. package/dist/server/web-server.js.map +1 -1
  58. package/package.json +2 -2
  59. package/dist/server/gradio-endpoint-connector.test.d.ts +0 -2
  60. package/dist/server/gradio-endpoint-connector.test.d.ts.map +0 -1
  61. package/dist/server/gradio-endpoint-connector.test.js +0 -313
  62. package/dist/server/gradio-endpoint-connector.test.js.map +0 -1
  63. package/dist/server/lib/hf-dataset-transport.d.ts.map +0 -1
  64. package/dist/server/lib/hf-dataset-transport.js.map +0 -1
  65. package/dist/server/lib/hf-dataset-transport.test.d.ts +0 -2
  66. package/dist/server/lib/hf-dataset-transport.test.d.ts.map +0 -1
  67. package/dist/server/lib/hf-dataset-transport.test.js +0 -195
  68. package/dist/server/lib/hf-dataset-transport.test.js.map +0 -1
  69. package/dist/server/lib/logger.d.ts.map +0 -1
  70. package/dist/server/lib/logger.js +0 -83
  71. package/dist/server/lib/logger.js.map +0 -1
  72. package/dist/server/lib/mcp-api-client.d.ts.map +0 -1
  73. package/dist/server/lib/mcp-api-client.js.map +0 -1
  74. package/dist/server/lib/tool-selection-strategy.d.ts.map +0 -1
  75. package/dist/server/lib/tool-selection-strategy.js.map +0 -1
  76. package/dist/server/lib/tool-selection-strategy.test.d.ts +0 -2
  77. package/dist/server/lib/tool-selection-strategy.test.d.ts.map +0 -1
  78. package/dist/server/lib/tool-selection-strategy.test.js +0 -535
  79. package/dist/server/lib/tool-selection-strategy.test.js.map +0 -1
  80. package/dist/server/transport/stateless-http-transport.test.d.ts +0 -2
  81. package/dist/server/transport/stateless-http-transport.test.d.ts.map +0 -1
  82. package/dist/server/transport/stateless-http-transport.test.js +0 -58
  83. package/dist/server/transport/stateless-http-transport.test.js.map +0 -1
  84. package/dist/server/utils/browser-detection.test.d.ts +0 -2
  85. package/dist/server/utils/browser-detection.test.d.ts.map +0 -1
  86. package/dist/server/utils/browser-detection.test.js +0 -50
  87. package/dist/server/utils/browser-detection.test.js.map +0 -1
  88. package/dist/server/utils/query-params.test.d.ts +0 -2
  89. package/dist/server/utils/query-params.test.d.ts.map +0 -1
  90. package/dist/server/utils/query-params.test.js +0 -75
  91. package/dist/server/utils/query-params.test.js.map +0 -1
  92. package/dist/shared/transport-info.test.d.ts +0 -2
  93. package/dist/shared/transport-info.test.d.ts.map +0 -1
  94. package/dist/shared/transport-info.test.js +0 -90
  95. package/dist/shared/transport-info.test.js.map +0 -1
  96. package/dist/shared/transport-metrics.test.d.ts +0 -2
  97. package/dist/shared/transport-metrics.test.d.ts.map +0 -1
  98. package/dist/shared/transport-metrics.test.js +0 -10
  99. package/dist/shared/transport-metrics.test.js.map +0 -1
  100. /package/dist/server/{lib → utils}/hf-dataset-transport.d.ts +0 -0
  101. /package/dist/server/{lib → utils}/logger.d.ts +0 -0
  102. /package/dist/server/{lib → utils}/mcp-api-client.d.ts +0 -0
  103. /package/dist/server/{lib → utils}/mcp-api-client.js +0 -0
  104. /package/dist/server/{lib → utils}/tool-selection-strategy.d.ts +0 -0
  105. /package/dist/server/{lib → utils}/tool-selection-strategy.js +0 -0
@@ -1,83 +0,0 @@
1
- import { pino, multistream } from 'pino';
2
- const isDev = process.env.NODE_ENV === 'development';
3
- const activeTransport = process.env.TRANSPORT || '';
4
- const destination = activeTransport.toUpperCase() === 'STDIO' ? 2 : 1;
5
- const logLevel = (process.env.LOG_LEVEL || 'info');
6
- const hfLoggingEnabled = !!process.env.LOGGING_DATASET_ID;
7
- function createLogger() {
8
- const baseOptions = {
9
- level: logLevel,
10
- ...(!isDev && { timestamp: pino.stdTimeFunctions.isoTime }),
11
- };
12
- if (hfLoggingEnabled) {
13
- try {
14
- const streams = [
15
- {
16
- level: logLevel,
17
- stream: isDev
18
- ? pino.transport({
19
- target: 'pino-pretty',
20
- options: {
21
- colorize: true,
22
- destination,
23
- },
24
- })
25
- : pino.destination(destination),
26
- },
27
- {
28
- level: logLevel,
29
- stream: pino.transport({
30
- target: './hf-dataset-transport.js',
31
- options: {
32
- sync: false,
33
- ignoreErrors: true,
34
- },
35
- }),
36
- },
37
- ];
38
- return pino(baseOptions, multistream(streams));
39
- }
40
- catch (error) {
41
- console.warn('[Logger] Failed to setup HF transport, falling back to console only:', error);
42
- }
43
- }
44
- if (isDev) {
45
- return pino({
46
- ...baseOptions,
47
- transport: {
48
- target: 'pino-pretty',
49
- options: {
50
- colorize: true,
51
- destination,
52
- },
53
- },
54
- });
55
- }
56
- else {
57
- return pino(baseOptions, pino.destination(destination));
58
- }
59
- }
60
- const logger = createLogger();
61
- export function forceLoggerToStderr() {
62
- const stderrOptions = {
63
- level: logLevel,
64
- ...(!isDev && { timestamp: pino.stdTimeFunctions.isoTime }),
65
- };
66
- if (isDev) {
67
- Object.assign(logger, pino({
68
- ...stderrOptions,
69
- transport: {
70
- target: 'pino-pretty',
71
- options: {
72
- colorize: true,
73
- destination: 2,
74
- },
75
- },
76
- }));
77
- }
78
- else {
79
- Object.assign(logger, pino(stderrOptions, pino.destination(2)));
80
- }
81
- }
82
- export { logger };
83
- //# sourceMappingURL=logger.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../../src/server/lib/logger.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-api-client.d.ts","sourceRoot":"","sources":["../../../src/server/lib/mcp-api-client.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAEtC,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gCAAgC,CAAC;AAIpE,MAAM,WAAW,uBAAuB;IACvC,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAC;CACzC;AAED,MAAM,WAAW,cAAc;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,MAAM,WAAW,eAAe;IAC/B,IAAI,EAAE,SAAS,GAAG,UAAU,CAAC;IAC7B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qBAAqB,CAAC,EAAE,cAAc,EAAE,CAAC;CACzC;AAED,qBAAa,YAAa,SAAQ,YAAY;IAC7C,OAAO,CAAC,MAAM,CAAkB;IAChC,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,KAAK,CAAmC;IAChD,OAAO,CAAC,eAAe,CAAwB;IAC/C,OAAO,CAAC,oBAAoB,CAAmC;IAC/D,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAA8B;gBAEvC,MAAM,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,aAAa;IAWlE,gBAAgB,IAAI,aAAa,GAAG,IAAI;IAIlC,WAAW,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAgFzD,aAAa,CAAC,aAAa,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IA0BpF,kBAAkB,IAAI,cAAc,EAAE;IAItC,yBAAyB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,IAAI;IAUhE,oBAAoB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,GAAG,IAAI;IAO7D,YAAY,CAAC,QAAQ,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IA+DpE,WAAW,IAAI,IAAI;IASnB,OAAO,IAAI,IAAI;CAIf"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"mcp-api-client.js","sourceRoot":"","sources":["../../../src/server/lib/mcp-api-client.ts"],"names":[],"mappings":"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"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-selection-strategy.d.ts","sourceRoot":"","sources":["../../../src/server/lib/tool-selection-strategy.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAE5D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,oBAAY,iBAAiB;IAC5B,gBAAgB,qBAAqB;IACrC,GAAG,QAAQ;IACX,YAAY,iBAAiB;IAC7B,YAAY,iBAAiB;IAC7B,QAAQ,aAAa;CACrB;AAED,MAAM,WAAW,oBAAoB;IACpC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;IACvC,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IACnC,IAAI,EAAE,iBAAiB,CAAC;IACxB,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,WAAW,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,CAqBhD,CAAC;AAKF,qBAAa,qBAAqB;IACjC,OAAO,CAAC,SAAS,CAAe;gBAEpB,SAAS,EAAE,YAAY;IAQnC,OAAO,CAAC,uBAAuB;IAiBzB,WAAW,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC;YA+EhE,eAAe;CAiC7B"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-selection-strategy.js","sourceRoot":"","sources":["../../../src/server/lib/tool-selection-strategy.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=tool-selection-strategy.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-selection-strategy.test.d.ts","sourceRoot":"","sources":["../../../src/server/lib/tool-selection-strategy.test.ts"],"names":[],"mappings":""}
@@ -1,535 +0,0 @@
1
- import { describe, it, expect, beforeEach, afterEach } from 'vitest';
2
- import { ToolSelectionStrategy, ToolSelectionMode, BOUQUETS, } from './tool-selection-strategy.js';
3
- import { McpApiClient } from './mcp-api-client.js';
4
- import { ALL_BUILTIN_TOOL_IDS, TOOL_ID_GROUPS } from '@llmindset/hf-mcp';
5
- import { extractAuthBouquetAndMix } from '../utils/auth-utils.js';
6
- describe('extractBouquetAndMix', () => {
7
- it('should extract bouquet from headers', () => {
8
- const headers = { 'x-mcp-bouquet': 'search' };
9
- const { bouquet, mix } = extractAuthBouquetAndMix(headers);
10
- expect(bouquet).toBe('search');
11
- expect(mix).toBeUndefined();
12
- });
13
- it('should extract mix from headers', () => {
14
- const headers = { 'x-mcp-mix': 'hf_api' };
15
- const result = extractAuthBouquetAndMix(headers);
16
- expect(result.bouquet).toBeUndefined();
17
- expect(result.mix).toBe('hf_api');
18
- });
19
- it('should extract both bouquet and mix from headers', () => {
20
- const headers = {
21
- 'x-mcp-bouquet': 'search',
22
- 'x-mcp-mix': 'hf_api',
23
- };
24
- const result = extractAuthBouquetAndMix(headers);
25
- expect(result.bouquet).toBe('search');
26
- expect(result.mix).toBe('hf_api');
27
- });
28
- it('should handle null headers', () => {
29
- const result = extractAuthBouquetAndMix(null);
30
- expect(result.bouquet).toBeUndefined();
31
- expect(result.mix).toBeUndefined();
32
- });
33
- it('should handle empty headers', () => {
34
- const result = extractAuthBouquetAndMix({});
35
- expect(result.bouquet).toBeUndefined();
36
- expect(result.mix).toBeUndefined();
37
- });
38
- });
39
- describe('BOUQUETS configuration', () => {
40
- it('should have correct hf_api bouquet', () => {
41
- const bouquet = BOUQUETS.hf_api;
42
- expect(bouquet).toBeDefined();
43
- if (bouquet) {
44
- expect(bouquet.builtInTools).toEqual(TOOL_ID_GROUPS.hf_api);
45
- expect(bouquet.spaceTools).toEqual([]);
46
- }
47
- });
48
- it('should have correct spaces bouquet', () => {
49
- const bouquet = BOUQUETS.spaces;
50
- expect(bouquet).toBeDefined();
51
- if (bouquet) {
52
- expect(bouquet.builtInTools).toEqual(TOOL_ID_GROUPS.spaces);
53
- expect(bouquet.spaceTools).toEqual([]);
54
- }
55
- });
56
- it('should have correct search bouquet', () => {
57
- const bouquet = BOUQUETS.search;
58
- expect(bouquet).toBeDefined();
59
- if (bouquet) {
60
- expect(bouquet.builtInTools).toEqual(TOOL_ID_GROUPS.search);
61
- expect(bouquet.spaceTools).toEqual([]);
62
- }
63
- });
64
- it('should have correct all bouquet', () => {
65
- const bouquet = BOUQUETS.all;
66
- expect(bouquet).toBeDefined();
67
- if (bouquet) {
68
- expect(bouquet.builtInTools).toEqual(ALL_BUILTIN_TOOL_IDS);
69
- expect(bouquet.spaceTools).toEqual([]);
70
- }
71
- });
72
- });
73
- describe('ToolSelectionStrategy', () => {
74
- let strategy;
75
- let mockApiClient;
76
- beforeEach(() => {
77
- const config = {
78
- type: 'polling',
79
- baseUrl: 'http://localhost:3000',
80
- pollInterval: 5000,
81
- staticGradioEndpoints: [],
82
- };
83
- const transportInfo = {
84
- transport: 'streamableHttpJson',
85
- port: 3000,
86
- defaultHfTokenSet: false,
87
- jsonResponseEnabled: true,
88
- externalApiMode: false,
89
- stdioClient: null,
90
- };
91
- mockApiClient = new McpApiClient(config, transportInfo);
92
- strategy = new ToolSelectionStrategy(mockApiClient);
93
- });
94
- describe('Bouquet Override (Highest Precedence)', () => {
95
- it('should use bouquet override for search bouquet', async () => {
96
- const context = {
97
- headers: { 'x-mcp-bouquet': 'search' },
98
- hfToken: 'test-token',
99
- };
100
- const result = await strategy.selectTools(context);
101
- expect(result.mode).toBe(ToolSelectionMode.BOUQUET_OVERRIDE);
102
- expect(result.enabledToolIds).toEqual(TOOL_ID_GROUPS.search);
103
- expect(result.reason).toBe('Bouquet override: search');
104
- expect(result.baseSettings).toBeUndefined();
105
- expect(result.mixedBouquet).toBeUndefined();
106
- });
107
- it('should use bouquet override for hf_api bouquet', async () => {
108
- const context = {
109
- headers: { 'x-mcp-bouquet': 'hf_api' },
110
- hfToken: 'test-token',
111
- };
112
- const result = await strategy.selectTools(context);
113
- expect(result.mode).toBe(ToolSelectionMode.BOUQUET_OVERRIDE);
114
- expect(result.enabledToolIds).toEqual(TOOL_ID_GROUPS.hf_api);
115
- expect(result.reason).toBe('Bouquet override: hf_api');
116
- });
117
- it('should use bouquet override for spaces bouquet', async () => {
118
- const context = {
119
- headers: { 'x-mcp-bouquet': 'spaces' },
120
- hfToken: 'test-token',
121
- };
122
- const result = await strategy.selectTools(context);
123
- expect(result.mode).toBe(ToolSelectionMode.BOUQUET_OVERRIDE);
124
- expect(result.enabledToolIds).toEqual(TOOL_ID_GROUPS.spaces);
125
- expect(result.reason).toBe('Bouquet override: spaces');
126
- });
127
- it('should use bouquet override for all bouquet', async () => {
128
- const context = {
129
- headers: { 'x-mcp-bouquet': 'all' },
130
- hfToken: 'test-token',
131
- };
132
- const result = await strategy.selectTools(context);
133
- expect(result.mode).toBe(ToolSelectionMode.BOUQUET_OVERRIDE);
134
- expect(result.enabledToolIds).toEqual(ALL_BUILTIN_TOOL_IDS);
135
- expect(result.reason).toBe('Bouquet override: all');
136
- });
137
- it('should ignore invalid bouquet names', async () => {
138
- const context = {
139
- headers: { 'x-mcp-bouquet': 'invalid_bouquet' },
140
- hfToken: 'test-token',
141
- };
142
- const result = await strategy.selectTools(context);
143
- expect(result.mode).toBe(ToolSelectionMode.FALLBACK);
144
- expect(result.enabledToolIds).toEqual(ALL_BUILTIN_TOOL_IDS);
145
- });
146
- it('should prefer bouquet over mix when both are present', async () => {
147
- const userSettings = {
148
- builtInTools: ['hf_semantic_search'],
149
- spaceTools: [],
150
- };
151
- const context = {
152
- headers: {
153
- 'x-mcp-bouquet': 'search',
154
- 'x-mcp-mix': 'hf_api',
155
- },
156
- userSettings,
157
- hfToken: 'test-token',
158
- };
159
- const result = await strategy.selectTools(context);
160
- expect(result.mode).toBe(ToolSelectionMode.BOUQUET_OVERRIDE);
161
- expect(result.enabledToolIds).toEqual(TOOL_ID_GROUPS.search);
162
- expect(result.reason).toBe('Bouquet override: search');
163
- });
164
- });
165
- describe('Mix Mode (Second Precedence)', () => {
166
- it('should mix hf_api tools with user settings', async () => {
167
- const userSettings = {
168
- builtInTools: ['hf_semantic_search', 'hf_dataset_search'],
169
- spaceTools: [],
170
- };
171
- const context = {
172
- headers: { 'x-mcp-mix': 'hf_api' },
173
- userSettings,
174
- hfToken: 'test-token',
175
- };
176
- const result = await strategy.selectTools(context);
177
- expect(result.mode).toBe(ToolSelectionMode.MIX);
178
- expect(result.reason).toBe('User settings + mix(hf_api)');
179
- expect(result.baseSettings).toEqual(userSettings);
180
- expect(result.mixedBouquet).toBe('hf_api');
181
- const expectedTools = [...new Set([...userSettings.builtInTools, ...TOOL_ID_GROUPS.hf_api])];
182
- expect(result.enabledToolIds).toEqual(expectedTools);
183
- });
184
- it('should mix search tools with user settings', async () => {
185
- const userSettings = {
186
- builtInTools: ['hf_whoami', 'hf_duplicate_space'],
187
- spaceTools: [],
188
- };
189
- const context = {
190
- headers: { 'x-mcp-mix': 'search' },
191
- userSettings,
192
- hfToken: 'test-token',
193
- };
194
- const result = await strategy.selectTools(context);
195
- expect(result.mode).toBe(ToolSelectionMode.MIX);
196
- expect(result.reason).toBe('User settings + mix(search)');
197
- const expectedTools = [...new Set([...userSettings.builtInTools, ...TOOL_ID_GROUPS.search])];
198
- expect(result.enabledToolIds).toEqual(expectedTools);
199
- });
200
- it('should deduplicate tools when mixing', async () => {
201
- const userSettings = {
202
- builtInTools: ['hf_semantic_search', 'hf_model_search'],
203
- spaceTools: [],
204
- };
205
- const context = {
206
- headers: { 'x-mcp-mix': 'search' },
207
- userSettings,
208
- hfToken: 'test-token',
209
- };
210
- const result = await strategy.selectTools(context);
211
- expect(result.mode).toBe(ToolSelectionMode.MIX);
212
- const uniqueTools = [...new Set(result.enabledToolIds)];
213
- expect(result.enabledToolIds).toEqual(uniqueTools);
214
- expect(result.enabledToolIds.length).toBe(uniqueTools.length);
215
- });
216
- it('should ignore mix when no user settings available', async () => {
217
- const context = {
218
- headers: { 'x-mcp-mix': 'hf_api' },
219
- hfToken: 'test-token',
220
- };
221
- const result = await strategy.selectTools(context);
222
- expect(result.mode).toBe(ToolSelectionMode.FALLBACK);
223
- expect(result.enabledToolIds).toEqual(ALL_BUILTIN_TOOL_IDS);
224
- });
225
- it('should ignore invalid mix bouquet names', async () => {
226
- const userSettings = {
227
- builtInTools: ['hf_semantic_search'],
228
- spaceTools: [],
229
- };
230
- const context = {
231
- headers: { 'x-mcp-mix': 'invalid_mix' },
232
- userSettings,
233
- hfToken: 'test-token',
234
- };
235
- const result = await strategy.selectTools(context);
236
- expect(result.mode).toBe(ToolSelectionMode.INTERNAL_API);
237
- expect(result.enabledToolIds).toEqual(userSettings.builtInTools);
238
- });
239
- });
240
- describe('User Settings Mode (Third Precedence)', () => {
241
- it('should use provided user settings in internal API mode', async () => {
242
- const userSettings = {
243
- builtInTools: ['hf_semantic_search', 'hf_model_search'],
244
- spaceTools: [],
245
- };
246
- const context = {
247
- headers: {},
248
- userSettings,
249
- hfToken: 'test-token',
250
- };
251
- const result = await strategy.selectTools(context);
252
- expect(result.mode).toBe(ToolSelectionMode.INTERNAL_API);
253
- expect(result.enabledToolIds).toEqual(userSettings.builtInTools);
254
- expect(result.reason).toBe('Internal API user settings');
255
- expect(result.baseSettings).toEqual(userSettings);
256
- });
257
- it('should use provided user settings in external API mode', async () => {
258
- const externalConfig = {
259
- type: 'external',
260
- externalUrl: 'https://api.example.com/settings',
261
- hfToken: 'test-token',
262
- };
263
- const externalTransportInfo = {
264
- transport: 'streamableHttpJson',
265
- port: 3000,
266
- defaultHfTokenSet: false,
267
- jsonResponseEnabled: true,
268
- externalApiMode: true,
269
- stdioClient: null,
270
- };
271
- const externalApiClient = new McpApiClient(externalConfig, externalTransportInfo);
272
- const externalStrategy = new ToolSelectionStrategy(externalApiClient);
273
- const userSettings = {
274
- builtInTools: ['hf_paper_search'],
275
- spaceTools: [],
276
- };
277
- const context = {
278
- headers: {},
279
- userSettings,
280
- hfToken: 'test-token',
281
- };
282
- const result = await externalStrategy.selectTools(context);
283
- expect(result.mode).toBe(ToolSelectionMode.EXTERNAL_API);
284
- expect(result.enabledToolIds).toEqual(userSettings.builtInTools);
285
- expect(result.reason).toBe('External API user settings');
286
- });
287
- });
288
- describe('Fallback Mode (Lowest Precedence)', () => {
289
- it('should use fallback when no configuration is available', async () => {
290
- const context = {
291
- headers: {},
292
- hfToken: 'test-token',
293
- };
294
- const result = await strategy.selectTools(context);
295
- expect(result.mode).toBe(ToolSelectionMode.FALLBACK);
296
- expect(result.enabledToolIds).toEqual(ALL_BUILTIN_TOOL_IDS);
297
- expect(result.reason).toBe('Fallback - no settings available');
298
- expect(result.baseSettings).toBeUndefined();
299
- });
300
- it('should use fallback when headers are null', async () => {
301
- const context = {
302
- headers: null,
303
- hfToken: 'test-token',
304
- };
305
- const result = await strategy.selectTools(context);
306
- expect(result.mode).toBe(ToolSelectionMode.FALLBACK);
307
- expect(result.enabledToolIds).toEqual(ALL_BUILTIN_TOOL_IDS);
308
- });
309
- });
310
- describe('Complex Scenarios', () => {
311
- it('should handle empty user settings', async () => {
312
- const userSettings = {
313
- builtInTools: [],
314
- spaceTools: [],
315
- };
316
- const context = {
317
- headers: {},
318
- userSettings,
319
- hfToken: 'test-token',
320
- };
321
- const result = await strategy.selectTools(context);
322
- expect(result.mode).toBe(ToolSelectionMode.INTERNAL_API);
323
- expect(result.enabledToolIds).toEqual([]);
324
- expect(result.baseSettings).toEqual(userSettings);
325
- });
326
- it('should handle mix with empty user settings', async () => {
327
- const userSettings = {
328
- builtInTools: [],
329
- spaceTools: [],
330
- };
331
- const context = {
332
- headers: { 'x-mcp-mix': 'search' },
333
- userSettings,
334
- hfToken: 'test-token',
335
- };
336
- const result = await strategy.selectTools(context);
337
- expect(result.mode).toBe(ToolSelectionMode.MIX);
338
- expect(result.enabledToolIds).toEqual(TOOL_ID_GROUPS.search);
339
- expect(result.mixedBouquet).toBe('search');
340
- });
341
- it('should handle all possible tool types in mix', async () => {
342
- const userSettings = {
343
- builtInTools: ['hf_whoami'],
344
- spaceTools: [],
345
- };
346
- for (const [bouquetName, bouquetConfig] of Object.entries(BOUQUETS)) {
347
- const context = {
348
- headers: { 'x-mcp-mix': bouquetName },
349
- userSettings,
350
- hfToken: 'test-token',
351
- };
352
- const result = await strategy.selectTools(context);
353
- expect(result.mode).toBe(ToolSelectionMode.MIX);
354
- expect(result.mixedBouquet).toBe(bouquetName);
355
- const expectedTools = [...new Set([...userSettings.builtInTools, ...bouquetConfig.builtInTools])];
356
- expect(result.enabledToolIds).toEqual(expectedTools);
357
- }
358
- });
359
- it('should preserve gradio endpoints when mixing with all bouquet in internal API mode', async () => {
360
- const userSettings = {
361
- builtInTools: ['hf_whoami'],
362
- spaceTools: [
363
- {
364
- name: 'My Custom GPT',
365
- subdomain: 'user123-my-custom-gpt',
366
- _id: 'custom-1',
367
- emoji: '🤖',
368
- },
369
- {
370
- name: 'Company Analytics',
371
- subdomain: 'corp-analytics-tool',
372
- _id: 'custom-2',
373
- emoji: '📊',
374
- },
375
- ],
376
- };
377
- const context = {
378
- headers: { 'x-mcp-mix': 'all' },
379
- userSettings,
380
- hfToken: 'test-token',
381
- };
382
- const result = await strategy.selectTools(context);
383
- expect(result.mode).toBe(ToolSelectionMode.MIX);
384
- expect(result.mixedBouquet).toBe('all');
385
- expect(result.reason).toBe('User settings + mix(all)');
386
- const expectedBuiltInTools = [...new Set([...userSettings.builtInTools, ...ALL_BUILTIN_TOOL_IDS])];
387
- expect(result.enabledToolIds).toEqual(expectedBuiltInTools);
388
- expect(result.baseSettings).toEqual(userSettings);
389
- expect(result.baseSettings?.spaceTools).toHaveLength(2);
390
- expect(result.baseSettings?.spaceTools).toEqual([
391
- {
392
- name: 'My Custom GPT',
393
- subdomain: 'user123-my-custom-gpt',
394
- _id: 'custom-1',
395
- emoji: '🤖',
396
- },
397
- {
398
- name: 'Company Analytics',
399
- subdomain: 'corp-analytics-tool',
400
- _id: 'custom-2',
401
- emoji: '📊',
402
- },
403
- ]);
404
- });
405
- });
406
- describe('SEARCH_ENABLES_FETCH feature', () => {
407
- const originalEnv = process.env.SEARCH_ENABLES_FETCH;
408
- afterEach(() => {
409
- if (originalEnv === undefined) {
410
- delete process.env.SEARCH_ENABLES_FETCH;
411
- }
412
- else {
413
- process.env.SEARCH_ENABLES_FETCH = originalEnv;
414
- }
415
- });
416
- it('should not auto-enable hf_doc_fetch when SEARCH_ENABLES_FETCH is not set', async () => {
417
- delete process.env.SEARCH_ENABLES_FETCH;
418
- const userSettings = {
419
- builtInTools: ['hf_doc_search', 'hf_model_search'],
420
- spaceTools: [],
421
- };
422
- const context = {
423
- headers: {},
424
- userSettings,
425
- hfToken: 'test-token',
426
- };
427
- const result = await strategy.selectTools(context);
428
- expect(result.enabledToolIds).toEqual(['hf_doc_search', 'hf_model_search']);
429
- expect(result.enabledToolIds).not.toContain('hf_doc_fetch');
430
- });
431
- it('should not auto-enable hf_doc_fetch when SEARCH_ENABLES_FETCH is false', async () => {
432
- process.env.SEARCH_ENABLES_FETCH = 'false';
433
- const userSettings = {
434
- builtInTools: ['hf_doc_search', 'hf_model_search'],
435
- spaceTools: [],
436
- };
437
- const context = {
438
- headers: {},
439
- userSettings,
440
- hfToken: 'test-token',
441
- };
442
- const result = await strategy.selectTools(context);
443
- expect(result.enabledToolIds).toEqual(['hf_doc_search', 'hf_model_search']);
444
- expect(result.enabledToolIds).not.toContain('hf_doc_fetch');
445
- });
446
- it('should auto-enable hf_doc_fetch when SEARCH_ENABLES_FETCH=true and hf_doc_search is enabled', async () => {
447
- process.env.SEARCH_ENABLES_FETCH = 'true';
448
- const userSettings = {
449
- builtInTools: ['hf_doc_search', 'hf_model_search'],
450
- spaceTools: [],
451
- };
452
- const context = {
453
- headers: {},
454
- userSettings,
455
- hfToken: 'test-token',
456
- };
457
- const result = await strategy.selectTools(context);
458
- expect(result.enabledToolIds).toContain('hf_doc_search');
459
- expect(result.enabledToolIds).toContain('hf_doc_fetch');
460
- expect(result.enabledToolIds).toContain('hf_model_search');
461
- expect(result.enabledToolIds).toHaveLength(3);
462
- });
463
- it('should not add hf_doc_fetch when hf_doc_search is not enabled', async () => {
464
- process.env.SEARCH_ENABLES_FETCH = 'true';
465
- const userSettings = {
466
- builtInTools: ['hf_model_search', 'hf_dataset_search'],
467
- spaceTools: [],
468
- };
469
- const context = {
470
- headers: {},
471
- userSettings,
472
- hfToken: 'test-token',
473
- };
474
- const result = await strategy.selectTools(context);
475
- expect(result.enabledToolIds).not.toContain('hf_doc_search');
476
- expect(result.enabledToolIds).not.toContain('hf_doc_fetch');
477
- expect(result.enabledToolIds).toEqual(['hf_model_search', 'hf_dataset_search']);
478
- });
479
- it('should not duplicate hf_doc_fetch if already enabled', async () => {
480
- process.env.SEARCH_ENABLES_FETCH = 'true';
481
- const userSettings = {
482
- builtInTools: ['hf_doc_search', 'hf_doc_fetch', 'hf_model_search'],
483
- spaceTools: [],
484
- };
485
- const context = {
486
- headers: {},
487
- userSettings,
488
- hfToken: 'test-token',
489
- };
490
- const result = await strategy.selectTools(context);
491
- expect(result.enabledToolIds).toEqual(['hf_doc_search', 'hf_doc_fetch', 'hf_model_search']);
492
- expect(result.enabledToolIds.filter(id => id === 'hf_doc_fetch')).toHaveLength(1);
493
- });
494
- it('should work with bouquet override', async () => {
495
- process.env.SEARCH_ENABLES_FETCH = 'true';
496
- const context = {
497
- headers: { 'x-mcp-bouquet': 'search' },
498
- hfToken: 'test-token',
499
- };
500
- const result = await strategy.selectTools(context);
501
- expect(result.mode).toBe(ToolSelectionMode.BOUQUET_OVERRIDE);
502
- expect(result.enabledToolIds).toContain('hf_doc_search');
503
- expect(result.enabledToolIds).toContain('hf_doc_fetch');
504
- });
505
- it('should work with mix mode', async () => {
506
- process.env.SEARCH_ENABLES_FETCH = 'true';
507
- const userSettings = {
508
- builtInTools: ['hf_model_search'],
509
- spaceTools: [],
510
- };
511
- const context = {
512
- headers: { 'x-mcp-mix': 'search' },
513
- userSettings,
514
- hfToken: 'test-token',
515
- };
516
- const result = await strategy.selectTools(context);
517
- expect(result.mode).toBe(ToolSelectionMode.MIX);
518
- expect(result.enabledToolIds).toContain('hf_doc_search');
519
- expect(result.enabledToolIds).toContain('hf_doc_fetch');
520
- expect(result.enabledToolIds).toContain('hf_model_search');
521
- });
522
- it('should work with fallback mode when all tools are enabled', async () => {
523
- process.env.SEARCH_ENABLES_FETCH = 'true';
524
- const context = {
525
- headers: {},
526
- hfToken: 'test-token',
527
- };
528
- const result = await strategy.selectTools(context);
529
- expect(result.mode).toBe(ToolSelectionMode.FALLBACK);
530
- expect(result.enabledToolIds).toContain('hf_doc_search');
531
- expect(result.enabledToolIds).toContain('hf_doc_fetch');
532
- });
533
- });
534
- });
535
- //# sourceMappingURL=tool-selection-strategy.test.js.map