@whwrm/react-agent 1.0.0

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.
@@ -0,0 +1,424 @@
1
+ export const PROVIDERS = [
2
+ {
3
+ name: 'openai',
4
+ keywords: ['gpt', 'openai'],
5
+ envKey: 'OPENAI_API_KEY',
6
+ displayName: 'OpenAI',
7
+ baseUrl: 'https://api.openai.com',
8
+ path: '/v1/chat/completions',
9
+ headerPrefix: 'Bearer',
10
+ isGateway: false,
11
+ modelPrefix: '',
12
+ },
13
+ {
14
+ name: 'anthropic',
15
+ keywords: ['claude', 'anthropic'],
16
+ envKey: 'ANTHROPIC_API_KEY',
17
+ displayName: 'Anthropic',
18
+ baseUrl: 'https://api.anthropic.com',
19
+ path: '/v1/messages',
20
+ headerPrefix: 'x-api-key',
21
+ isGateway: false,
22
+ modelPrefix: '',
23
+ },
24
+ {
25
+ name: 'deepseek',
26
+ keywords: ['deepseek'],
27
+ envKey: 'DEEPSEEK_API_KEY',
28
+ displayName: 'DeepSeek',
29
+ baseUrl: 'https://api.deepseek.com',
30
+ path: '/v1/chat/completions',
31
+ headerPrefix: 'Bearer',
32
+ isGateway: false,
33
+ modelPrefix: '',
34
+ },
35
+ {
36
+ name: 'gemini',
37
+ keywords: ['gemini'],
38
+ envKey: 'GEMINI_API_KEY',
39
+ displayName: 'Google Gemini',
40
+ baseUrl: 'https://generativelanguage.googleapis.com',
41
+ path: '/v1beta/models',
42
+ headerPrefix: 'Bearer',
43
+ isGateway: false,
44
+ modelPrefix: '',
45
+ },
46
+ {
47
+ name: 'moonshot',
48
+ keywords: ['moonshot', 'kimi'],
49
+ envKey: 'MOONSHOT_API_KEY',
50
+ displayName: 'Moonshot (Kimi)',
51
+ baseUrl: 'https://api.moonshot.ai',
52
+ path: '/v1/chat/completions',
53
+ headerPrefix: 'Bearer',
54
+ isGateway: false,
55
+ modelPrefix: '',
56
+ },
57
+ {
58
+ name: 'zhipu',
59
+ keywords: ['zhipu', 'glm'],
60
+ envKey: 'ZHIPU_API_KEY',
61
+ displayName: 'Zhipu AI',
62
+ baseUrl: 'https://open.bigmodel.cn',
63
+ path: '/api/paas/v4/chat/completions',
64
+ headerPrefix: 'Bearer',
65
+ isGateway: false,
66
+ modelPrefix: '',
67
+ },
68
+ {
69
+ name: 'dashscope',
70
+ keywords: ['qwen', 'dashscope'],
71
+ envKey: 'DASHSCOPE_API_KEY',
72
+ displayName: 'DashScope (Qwen)',
73
+ baseUrl: 'https://dashscope.aliyuncs.com',
74
+ path: '/compatible-mode/v1/chat/completions',
75
+ headerPrefix: 'Bearer',
76
+ isGateway: false,
77
+ modelPrefix: '',
78
+ },
79
+ {
80
+ name: 'minimax',
81
+ keywords: ['minimax'],
82
+ envKey: 'MINIMAX_API_KEY',
83
+ displayName: 'MiniMax',
84
+ baseUrl: 'https://api.minimax.chat',
85
+ path: '/v1/chat/completions',
86
+ headerPrefix: 'Bearer',
87
+ isGateway: false,
88
+ modelPrefix: '',
89
+ },
90
+ {
91
+ name: 'openrouter',
92
+ keywords: ['openrouter'],
93
+ envKey: 'OPENROUTER_API_KEY',
94
+ displayName: 'OpenRouter',
95
+ baseUrl: 'https://openrouter.ai',
96
+ path: '/api/v1/chat/completions',
97
+ headerPrefix: 'Bearer',
98
+ isGateway: true,
99
+ modelPrefix: '',
100
+ },
101
+ {
102
+ name: 'aihubmix',
103
+ keywords: ['aihubmix'],
104
+ envKey: 'AIHUBMIX_API_KEY',
105
+ displayName: 'AiHubMix',
106
+ baseUrl: 'https://aihubmix.com',
107
+ path: '/v1/chat/completions',
108
+ headerPrefix: 'Bearer',
109
+ isGateway: true,
110
+ modelPrefix: '',
111
+ },
112
+ {
113
+ name: 'siliconflow',
114
+ keywords: ['siliconflow'],
115
+ envKey: 'SILICONFLOW_API_KEY',
116
+ displayName: 'SiliconFlow',
117
+ baseUrl: 'https://api.siliconflow.cn',
118
+ path: '/v1/chat/completions',
119
+ headerPrefix: 'Bearer',
120
+ isGateway: true,
121
+ modelPrefix: '',
122
+ },
123
+ {
124
+ name: 'volcengine',
125
+ keywords: ['volcengine', 'ark'],
126
+ envKey: 'VOLCENGINE_API_KEY',
127
+ displayName: 'VolcEngine',
128
+ baseUrl: 'https://ark.cn-beijing.volces.com',
129
+ path: '/api/v3/chat/completions',
130
+ headerPrefix: 'Bearer',
131
+ isGateway: true,
132
+ modelPrefix: '',
133
+ },
134
+ {
135
+ name: 'ollama',
136
+ keywords: ['ollama'],
137
+ envKey: '',
138
+ displayName: 'Ollama',
139
+ baseUrl: 'http://localhost:11434',
140
+ path: '/v1/chat/completions',
141
+ headerPrefix: 'Bearer',
142
+ isGateway: false,
143
+ modelPrefix: '',
144
+ },
145
+ {
146
+ name: 'vllm',
147
+ keywords: ['vllm'],
148
+ envKey: 'VLLM_API_KEY',
149
+ displayName: 'vLLM',
150
+ baseUrl: 'http://localhost:8000',
151
+ path: '/v1/chat/completions',
152
+ headerPrefix: 'Bearer',
153
+ isGateway: false,
154
+ modelPrefix: '',
155
+ },
156
+ {
157
+ name: 'azure',
158
+ keywords: ['azure'],
159
+ envKey: 'AZURE_OPENAI_API_KEY',
160
+ displayName: 'Azure OpenAI',
161
+ baseUrl: '',
162
+ path: '',
163
+ headerPrefix: 'api-key',
164
+ isGateway: false,
165
+ modelPrefix: '',
166
+ },
167
+ {
168
+ name: 'custom',
169
+ keywords: [],
170
+ envKey: 'CUSTOM_API_KEY',
171
+ displayName: 'Custom',
172
+ baseUrl: '',
173
+ path: '/v1/chat/completions',
174
+ headerPrefix: 'Bearer',
175
+ isGateway: true,
176
+ modelPrefix: '',
177
+ },
178
+ ];
179
+ export function resolveEnvVars(value) {
180
+ if (!value)
181
+ return value;
182
+ return value.replace(/\$\{(\w+)\}/g, (_, name) => process.env[name] || '');
183
+ }
184
+ export function findProvider(model, providerName) {
185
+ if (providerName) {
186
+ const found = PROVIDERS.find(p => p.name === providerName);
187
+ if (found)
188
+ return found;
189
+ }
190
+ const modelLower = model.toLowerCase();
191
+ const modelPrefix = modelLower.split('/')[0];
192
+ for (const spec of PROVIDERS) {
193
+ if (modelPrefix === spec.name) {
194
+ return spec;
195
+ }
196
+ if (spec.keywords.some(kw => modelLower.includes(kw))) {
197
+ return spec;
198
+ }
199
+ }
200
+ return undefined;
201
+ }
202
+ function convertToAnthropicTools(tools) {
203
+ return tools.map(t => ({
204
+ name: t.function.name,
205
+ description: t.function.description,
206
+ input_schema: t.function.parameters,
207
+ }));
208
+ }
209
+ function formatToolCallsForAPI(toolCalls) {
210
+ if (!toolCalls)
211
+ return undefined;
212
+ return toolCalls.map(tc => ({
213
+ id: tc.id,
214
+ type: 'function',
215
+ function: {
216
+ name: tc.name,
217
+ arguments: typeof tc.arguments === 'string' ? tc.arguments : JSON.stringify(tc.arguments),
218
+ },
219
+ }));
220
+ }
221
+ function formatMessagesForOpenAI(messages) {
222
+ return messages.map(m => {
223
+ if (m.role === 'assistant' && m.tool_calls) {
224
+ return {
225
+ role: 'assistant',
226
+ content: m.content || '',
227
+ tool_calls: formatToolCallsForAPI(m.tool_calls),
228
+ };
229
+ }
230
+ return m;
231
+ });
232
+ }
233
+ export function buildLLMRequest(llmConfig, providersConfig, messages, tools) {
234
+ const model = llmConfig.model;
235
+ const providerName = llmConfig.provider;
236
+ const customBaseUrl = llmConfig.baseUrl;
237
+ const spec = findProvider(model, providerName);
238
+ let apiKey = resolveEnvVars(llmConfig.apiKey || '');
239
+ let baseUrl = customBaseUrl;
240
+ let headers = { ...llmConfig.headers };
241
+ if (spec && !customBaseUrl) {
242
+ const providerConfig = providersConfig?.[spec.name];
243
+ if (!apiKey) {
244
+ const configKey = providerConfig?.apiKey ? resolveEnvVars(providerConfig.apiKey) : '';
245
+ apiKey = configKey || process.env[spec.envKey] || '';
246
+ }
247
+ baseUrl = providerConfig?.baseUrl || spec.baseUrl;
248
+ if (providerConfig?.headers) {
249
+ headers = { ...headers, ...providerConfig.headers };
250
+ }
251
+ }
252
+ if (!baseUrl) {
253
+ baseUrl = 'https://api.openai.com';
254
+ }
255
+ let url;
256
+ let body;
257
+ let requestHeaders = {
258
+ 'Content-Type': 'application/json',
259
+ ...headers,
260
+ };
261
+ if (spec?.name === 'anthropic' && !customBaseUrl) {
262
+ url = `${baseUrl}${spec.path}`;
263
+ requestHeaders['x-api-key'] = apiKey || '';
264
+ requestHeaders['anthropic-version'] = '2023-06-01';
265
+ const systemMessage = messages.find((m) => m.role === 'system');
266
+ const otherMessages = messages.filter((m) => m.role !== 'system');
267
+ const anthropicMessages = otherMessages.map((m) => {
268
+ if (m.role === 'tool') {
269
+ return {
270
+ role: 'user',
271
+ content: [{
272
+ type: 'tool_result',
273
+ tool_use_id: m.tool_call_id,
274
+ content: m.content,
275
+ }],
276
+ };
277
+ }
278
+ if (m.role === 'assistant' && m.tool_calls?.length) {
279
+ return {
280
+ role: 'assistant',
281
+ content: [
282
+ { type: 'text', text: m.content || '' },
283
+ ...m.tool_calls.map((tc) => ({
284
+ type: 'tool_use',
285
+ id: tc.id,
286
+ name: tc.name,
287
+ input: tc.arguments,
288
+ })),
289
+ ],
290
+ };
291
+ }
292
+ return { role: m.role, content: m.content };
293
+ });
294
+ body = {
295
+ model: model.replace('anthropic/', '').replace('claude-', 'claude-3-5-sonnet-'),
296
+ max_tokens: 4096,
297
+ messages: anthropicMessages,
298
+ system: systemMessage?.content,
299
+ };
300
+ if (tools && tools.length > 0) {
301
+ body.tools = convertToAnthropicTools(tools);
302
+ }
303
+ }
304
+ else if (spec?.name === 'azure') {
305
+ const azureConfig = providersConfig?.azure;
306
+ const deploymentName = azureConfig?.deploymentName || model;
307
+ const apiVersion = azureConfig?.apiVersion || '2024-02-15-preview';
308
+ baseUrl = azureConfig?.baseUrl || llmConfig.baseUrl || '';
309
+ url = `${baseUrl}/openai/deployments/${deploymentName}/chat/completions?api-version=${apiVersion}`;
310
+ requestHeaders['api-key'] = apiKey || '';
311
+ body = {
312
+ messages,
313
+ };
314
+ if (tools && tools.length > 0) {
315
+ body.tools = tools;
316
+ }
317
+ }
318
+ else if (spec?.name === 'gemini') {
319
+ url = `${baseUrl}${spec.path}/${model}:generateContent?key=${apiKey}`;
320
+ const contents = messages
321
+ .filter((m) => m.role !== 'system')
322
+ .map((m) => ({
323
+ role: m.role === 'assistant' ? 'model' : 'user',
324
+ parts: [{ text: m.content }],
325
+ }));
326
+ body = {
327
+ contents,
328
+ generationConfig: {},
329
+ };
330
+ const systemMessage = messages.find((m) => m.role === 'system');
331
+ if (systemMessage) {
332
+ body.systemInstruction = { parts: [{ text: systemMessage.content }] };
333
+ }
334
+ }
335
+ else {
336
+ let path;
337
+ if (customBaseUrl) {
338
+ if (customBaseUrl.endsWith('/v1')) {
339
+ path = '/chat/completions';
340
+ }
341
+ else {
342
+ path = '/v1/chat/completions';
343
+ }
344
+ }
345
+ else {
346
+ path = spec?.path || '/v1/chat/completions';
347
+ }
348
+ url = `${baseUrl}${path}`;
349
+ if (apiKey) {
350
+ requestHeaders['Authorization'] = `Bearer ${apiKey}`;
351
+ }
352
+ let finalModel = model;
353
+ if (model.includes('/')) {
354
+ const parts = model.split('/');
355
+ if (parts.length > 1 && parts[0] === spec?.name) {
356
+ finalModel = parts.slice(1).join('/');
357
+ }
358
+ }
359
+ body = {
360
+ model: finalModel,
361
+ messages: formatMessagesForOpenAI(messages),
362
+ };
363
+ if (tools && tools.length > 0) {
364
+ body.tools = tools;
365
+ }
366
+ }
367
+ return { url, headers: requestHeaders, body };
368
+ }
369
+ export function parseLLMResponse(data, providerName) {
370
+ if (providerName === 'anthropic') {
371
+ const textContent = data.content?.find((c) => c.type === 'text');
372
+ const toolUses = data.content?.filter((c) => c.type === 'tool_use') || [];
373
+ return {
374
+ content: textContent?.text || '',
375
+ tool_calls: toolUses.length > 0 ? toolUses.map((tu) => ({
376
+ id: tu.id,
377
+ name: tu.name,
378
+ arguments: tu.input,
379
+ })) : undefined,
380
+ finish_reason: data.stop_reason,
381
+ usage: {
382
+ prompt_tokens: data.usage?.input_tokens,
383
+ completion_tokens: data.usage?.output_tokens,
384
+ },
385
+ };
386
+ }
387
+ if (providerName === 'gemini') {
388
+ const candidate = data.candidates?.[0];
389
+ const text = candidate?.content?.parts?.[0]?.text || '';
390
+ return {
391
+ content: text,
392
+ tool_calls: undefined,
393
+ finish_reason: candidate?.finishReason,
394
+ usage: {
395
+ prompt_tokens: data.usageMetadata?.promptTokenCount,
396
+ completion_tokens: data.usageMetadata?.candidatesTokenCount,
397
+ },
398
+ };
399
+ }
400
+ const choice = data.choices?.[0];
401
+ if (!choice) {
402
+ return { content: '', finish_reason: 'error' };
403
+ }
404
+ const message = choice.message;
405
+ const rawToolCalls = message?.tool_calls;
406
+ const toolCalls = rawToolCalls?.map((tc) => ({
407
+ id: tc.id,
408
+ name: tc.function?.name,
409
+ arguments: typeof tc.function?.arguments === 'string'
410
+ ? JSON.parse(tc.function.arguments)
411
+ : tc.function?.arguments || {},
412
+ }));
413
+ return {
414
+ content: message?.content,
415
+ tool_calls: toolCalls,
416
+ finish_reason: choice.finish_reason,
417
+ usage: data.usage ? {
418
+ prompt_tokens: data.usage.prompt_tokens,
419
+ completion_tokens: data.usage.completion_tokens,
420
+ total_tokens: data.usage.total_tokens,
421
+ } : undefined,
422
+ };
423
+ }
424
+ //# sourceMappingURL=providers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"providers.js","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ import type { ToolDefinition, SkillDefinition } from './types.js';
2
+ export interface ToolHandler {
3
+ name: string;
4
+ handler: (args: Record<string, any>) => Promise<string> | string;
5
+ }
6
+ export interface SkillHandler {
7
+ name: string;
8
+ handler: (args: Record<string, any>) => Promise<string> | string;
9
+ }
10
+ export interface ToolServerOptions {
11
+ port?: number;
12
+ tools?: ToolHandler[];
13
+ skills?: SkillHandler[];
14
+ toolsFile?: string;
15
+ skillsFile?: string;
16
+ }
17
+ export interface ToolRegistry {
18
+ registerTool(name: string, handler: ToolHandler['handler'], definition?: ToolDefinition): void;
19
+ registerSkill(name: string, handler: SkillHandler['handler'], definition?: SkillDefinition): void;
20
+ getHandler(name: string): ToolHandler['handler'] | undefined;
21
+ getToolDefinitions(): ToolDefinition[];
22
+ getSkillDefinitions(): SkillDefinition[];
23
+ clear(): void;
24
+ }
25
+ export declare class DefaultToolRegistry implements ToolRegistry {
26
+ private handlers;
27
+ private toolDefinitions;
28
+ private skillDefinitions;
29
+ registerTool(name: string, handler: ToolHandler['handler'], definition?: ToolDefinition): void;
30
+ registerSkill(name: string, handler: SkillHandler['handler'], definition?: SkillDefinition): void;
31
+ getHandler(name: string): ToolHandler['handler'] | undefined;
32
+ getToolDefinitions(): ToolDefinition[];
33
+ getSkillDefinitions(): SkillDefinition[];
34
+ clear(): void;
35
+ }
36
+ export declare const globalRegistry: DefaultToolRegistry;
37
+ export declare function registerTool(name: string, handler: ToolHandler['handler'], definition?: ToolDefinition): void;
38
+ export declare function registerSkill(name: string, handler: SkillHandler['handler'], definition?: SkillDefinition): void;
39
+ export declare function getToolHandler(name: string): ToolHandler['handler'] | undefined;
40
+ export declare function getToolDefinitions(): ToolDefinition[];
41
+ export declare function getSkillDefinitions(): SkillDefinition[];
42
+ export declare function clearRegistry(): void;
43
+ export declare function createRegistry(): ToolRegistry;
44
+ import http from 'http';
45
+ export declare function createToolServer(options?: ToolServerOptions): Promise<http.Server>;
46
+ export declare function closeAllServers(): Promise<void>;
47
+ //# sourceMappingURL=registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,165 @@
1
+ export class DefaultToolRegistry {
2
+ handlers = new Map();
3
+ toolDefinitions = [];
4
+ skillDefinitions = [];
5
+ registerTool(name, handler, definition) {
6
+ this.handlers.set(name, handler);
7
+ if (definition) {
8
+ const existing = this.toolDefinitions.findIndex(t => t.name === name);
9
+ if (existing >= 0) {
10
+ this.toolDefinitions[existing] = definition;
11
+ }
12
+ else {
13
+ this.toolDefinitions.push(definition);
14
+ }
15
+ }
16
+ }
17
+ registerSkill(name, handler, definition) {
18
+ this.handlers.set(name, handler);
19
+ if (definition) {
20
+ const existing = this.skillDefinitions.findIndex(s => s.name === name);
21
+ if (existing >= 0) {
22
+ this.skillDefinitions[existing] = definition;
23
+ }
24
+ else {
25
+ this.skillDefinitions.push(definition);
26
+ }
27
+ }
28
+ }
29
+ getHandler(name) {
30
+ return this.handlers.get(name);
31
+ }
32
+ getToolDefinitions() {
33
+ return [...this.toolDefinitions];
34
+ }
35
+ getSkillDefinitions() {
36
+ return [...this.skillDefinitions];
37
+ }
38
+ clear() {
39
+ this.handlers.clear();
40
+ this.toolDefinitions = [];
41
+ this.skillDefinitions = [];
42
+ }
43
+ }
44
+ export const globalRegistry = new DefaultToolRegistry();
45
+ export function registerTool(name, handler, definition) {
46
+ globalRegistry.registerTool(name, handler, definition);
47
+ }
48
+ export function registerSkill(name, handler, definition) {
49
+ globalRegistry.registerSkill(name, handler, definition);
50
+ }
51
+ export function getToolHandler(name) {
52
+ return globalRegistry.getHandler(name);
53
+ }
54
+ export function getToolDefinitions() {
55
+ return globalRegistry.getToolDefinitions();
56
+ }
57
+ export function getSkillDefinitions() {
58
+ return globalRegistry.getSkillDefinitions();
59
+ }
60
+ export function clearRegistry() {
61
+ globalRegistry.clear();
62
+ }
63
+ export function createRegistry() {
64
+ return new DefaultToolRegistry();
65
+ }
66
+ import http from 'http';
67
+ const activeServers = new Set();
68
+ export function createToolServer(options = {}) {
69
+ const port = options.port || 3000;
70
+ const registry = new DefaultToolRegistry();
71
+ if (options.tools) {
72
+ for (const t of options.tools) {
73
+ registry.registerTool(t.name, t.handler);
74
+ }
75
+ }
76
+ if (options.skills) {
77
+ for (const s of options.skills) {
78
+ registry.registerSkill(s.name, s.handler);
79
+ }
80
+ }
81
+ return new Promise((resolve, reject) => {
82
+ const server = http.createServer(async (req, res) => {
83
+ res.setHeader('Content-Type', 'application/json');
84
+ if (req.method === 'POST' && req.url === '/execute') {
85
+ let body = '';
86
+ req.on('data', chunk => body += chunk);
87
+ req.on('end', async () => {
88
+ try {
89
+ const { tool, arguments: args } = JSON.parse(body);
90
+ const handler = registry.getHandler(tool) || globalRegistry.getHandler(tool);
91
+ if (!handler) {
92
+ res.writeHead(404);
93
+ res.end(JSON.stringify({ error: `Unknown tool: ${tool}` }));
94
+ return;
95
+ }
96
+ const result = await handler(args);
97
+ res.writeHead(200);
98
+ res.end(JSON.stringify({ result }));
99
+ }
100
+ catch (e) {
101
+ res.writeHead(500);
102
+ res.end(JSON.stringify({ error: String(e) }));
103
+ }
104
+ });
105
+ }
106
+ else if (req.method === 'POST' && req.url === '/invoke') {
107
+ let body = '';
108
+ req.on('data', chunk => body += chunk);
109
+ req.on('end', async () => {
110
+ try {
111
+ const { skill, arguments: args } = JSON.parse(body);
112
+ const handler = registry.getHandler(skill) || globalRegistry.getHandler(skill);
113
+ if (!handler) {
114
+ res.writeHead(404);
115
+ res.end(JSON.stringify({ error: `Unknown skill: ${skill}` }));
116
+ return;
117
+ }
118
+ const result = await handler(args);
119
+ res.writeHead(200);
120
+ res.end(JSON.stringify({ result }));
121
+ }
122
+ catch (e) {
123
+ res.writeHead(500);
124
+ res.end(JSON.stringify({ error: String(e) }));
125
+ }
126
+ });
127
+ }
128
+ else if (req.method === 'GET' && req.url === '/tools') {
129
+ const definitions = [...registry.getToolDefinitions(), ...globalRegistry.getToolDefinitions()];
130
+ res.writeHead(200);
131
+ res.end(JSON.stringify(definitions));
132
+ }
133
+ else if (req.method === 'GET' && req.url === '/skills') {
134
+ const definitions = [...registry.getSkillDefinitions(), ...globalRegistry.getSkillDefinitions()];
135
+ res.writeHead(200);
136
+ res.end(JSON.stringify(definitions));
137
+ }
138
+ else if (req.method === 'GET' && req.url === '/health') {
139
+ res.writeHead(200);
140
+ res.end(JSON.stringify({ status: 'ok' }));
141
+ }
142
+ else {
143
+ res.writeHead(404);
144
+ res.end(JSON.stringify({ error: 'Not found' }));
145
+ }
146
+ });
147
+ server.listen(port, () => {
148
+ activeServers.add(server);
149
+ console.log(`[ToolServer] Running on port ${port}`);
150
+ resolve(server);
151
+ }).on('error', reject);
152
+ });
153
+ }
154
+ export async function closeAllServers() {
155
+ const closePromises = Array.from(activeServers).map(server => {
156
+ return new Promise((resolve) => {
157
+ server.close(() => {
158
+ activeServers.delete(server);
159
+ resolve();
160
+ });
161
+ });
162
+ });
163
+ await Promise.all(closePromises);
164
+ }
165
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../src/registry.ts"],"names":[],"mappings":"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"}