@wavestreamer/mcp 0.7.1 → 0.7.3

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.
@@ -1,499 +0,0 @@
1
- import { describe, it, expect, vi, beforeEach } from "vitest";
2
- // ---------------------------------------------------------------------------
3
- // Test URL
4
- // ---------------------------------------------------------------------------
5
- const TEST_API_URL = "http://test-api.local/api";
6
- process.env.WAVESTREAMER_API_URL = TEST_API_URL;
7
- // ---------------------------------------------------------------------------
8
- // Mock fetch globally — intercepts all apiRequest() calls
9
- // ---------------------------------------------------------------------------
10
- const mockFetch = vi.fn();
11
- vi.stubGlobal("fetch", mockFetch);
12
- // ---------------------------------------------------------------------------
13
- // Mock fs.readFileSync for version loading
14
- // ---------------------------------------------------------------------------
15
- vi.mock("node:fs", () => ({
16
- readFileSync: () => JSON.stringify({ version: "0.0.0-test" }),
17
- }));
18
- // ---------------------------------------------------------------------------
19
- // Mock stdio transport
20
- // ---------------------------------------------------------------------------
21
- vi.mock("@modelcontextprotocol/sdk/server/stdio.js", () => {
22
- class MockTransport {
23
- start() { }
24
- close() { }
25
- }
26
- return { StdioServerTransport: MockTransport };
27
- });
28
- const toolRegistry = new Map();
29
- vi.mock("@modelcontextprotocol/sdk/server/mcp.js", () => {
30
- class MockMcpServer {
31
- constructor() { }
32
- registerTool(name, config, handler) {
33
- toolRegistry.set(name, { config, handler });
34
- }
35
- registerResource() { }
36
- registerPrompt() { }
37
- resource() { }
38
- prompt() { }
39
- connect() { }
40
- }
41
- class MockResourceTemplate {
42
- template;
43
- constructor(template) {
44
- this.template = template;
45
- }
46
- }
47
- return { McpServer: MockMcpServer, ResourceTemplate: MockResourceTemplate };
48
- });
49
- // ---------------------------------------------------------------------------
50
- // Import the server module — triggers all registerTool calls
51
- // ---------------------------------------------------------------------------
52
- await import("../index.js");
53
- // ---------------------------------------------------------------------------
54
- // Helpers
55
- // ---------------------------------------------------------------------------
56
- /** Build a mock Response that apiRequest() can consume. */
57
- function mockResponse(status, body, ok) {
58
- const isOk = ok ?? (status >= 200 && status < 300);
59
- return {
60
- ok: isOk,
61
- status,
62
- headers: new Headers({ "content-type": "application/json" }),
63
- json: async () => body,
64
- text: async () => JSON.stringify(body),
65
- };
66
- }
67
- /** Get a registered handler or throw. */
68
- function getHandler(name) {
69
- const reg = toolRegistry.get(name);
70
- if (!reg)
71
- throw new Error(`Tool "${name}" not registered`);
72
- return reg.handler;
73
- }
74
- /** Assert the response is a success (no isError). */
75
- function expectOk(result) {
76
- expect(result.isError).toBeFalsy();
77
- expect(result.content).toHaveLength(1);
78
- expect(result.content[0].type).toBe("text");
79
- }
80
- /** Assert the response is an error. */
81
- function expectFail(result) {
82
- expect(result.isError).toBe(true);
83
- expect(result.content).toHaveLength(1);
84
- expect(result.content[0].type).toBe("text");
85
- }
86
- // ---------------------------------------------------------------------------
87
- // Tests
88
- // ---------------------------------------------------------------------------
89
- beforeEach(() => {
90
- mockFetch.mockReset();
91
- });
92
- describe("Tool Execution: register_agent", () => {
93
- const handler = getHandler("register_agent");
94
- it("sends POST /register with name and model in body", async () => {
95
- mockFetch.mockResolvedValueOnce(mockResponse(201, {
96
- user: { id: "u1", name: "TestBot", api_key: "sk_test_123" },
97
- }));
98
- const result = await handler({ name: "TestBot", model: "gpt-4o" });
99
- expectOk(result);
100
- expect(result.content[0].text).toContain("sk_test_123");
101
- expect(result.content[0].text).toContain("Agent registered!");
102
- expect(mockFetch).toHaveBeenCalledTimes(1);
103
- const [url, opts] = mockFetch.mock.calls[0];
104
- expect(url).toBe(`${TEST_API_URL}/register`);
105
- expect(opts.method).toBe("POST");
106
- const body = JSON.parse(opts.body);
107
- expect(body.name).toBe("TestBot");
108
- expect(body.model).toBe("gpt-4o");
109
- });
110
- it("includes optional fields when provided", async () => {
111
- mockFetch.mockResolvedValueOnce(mockResponse(201, { user: { id: "u2", name: "Bot2", api_key: "sk_test_456" } }));
112
- await handler({
113
- name: "Bot2",
114
- model: "claude-sonnet-4",
115
- persona_archetype: "contrarian",
116
- risk_profile: "aggressive",
117
- referral_code: "REF123",
118
- });
119
- const body = JSON.parse(mockFetch.mock.calls[0][1].body);
120
- expect(body.persona_archetype).toBe("contrarian");
121
- expect(body.risk_profile).toBe("aggressive");
122
- expect(body.referral_code).toBe("REF123");
123
- });
124
- it("returns error on 409 conflict", async () => {
125
- mockFetch.mockResolvedValue(mockResponse(409, { error: "Name already taken" }));
126
- const result = await handler({ name: "Duplicate", model: "gpt-4o" });
127
- expectFail(result);
128
- expect(result.content[0].text).toContain("409");
129
- expect(result.content[0].text).toContain("Name already taken");
130
- });
131
- });
132
- describe("Tool Execution: make_prediction", () => {
133
- const handler = getHandler("make_prediction");
134
- it("sends POST /questions/{id}/predict with correct body and auth", async () => {
135
- mockFetch.mockResolvedValueOnce(mockResponse(201, { prediction: { id: "p1", prediction: true, confidence: 85 } }));
136
- const result = await handler({
137
- api_key: "sk_test_key",
138
- question_id: "q-uuid-123",
139
- prediction: true,
140
- confidence: 85,
141
- reasoning: "EVIDENCE: test evidence. ANALYSIS: test analysis.",
142
- resolution_protocol: {
143
- criterion: "Test criterion",
144
- source_of_truth: "Official source",
145
- deadline: "2026-12-31T00:00:00Z",
146
- resolver: "platform",
147
- edge_cases: "None expected",
148
- },
149
- });
150
- expectOk(result);
151
- expect(result.content[0].text).toContain("Prediction placed!");
152
- const [url, opts] = mockFetch.mock.calls[0];
153
- expect(url).toBe(`${TEST_API_URL}/questions/q-uuid-123/predict`);
154
- expect(opts.method).toBe("POST");
155
- expect(opts.headers["x-api-key"]).toBe("sk_test_key");
156
- const body = JSON.parse(opts.body);
157
- expect(body.prediction).toBe(true);
158
- expect(body.confidence).toBe(85);
159
- expect(body.reasoning).toContain("EVIDENCE");
160
- expect(body.resolution_protocol.criterion).toBe("Test criterion");
161
- });
162
- it("supports probability mode", async () => {
163
- mockFetch.mockResolvedValueOnce(mockResponse(201, { prediction: { id: "p2" } }));
164
- await handler({
165
- api_key: "sk_test",
166
- question_id: "q1",
167
- probability: 72,
168
- reasoning: "Probability-based analysis here.",
169
- resolution_protocol: {
170
- criterion: "c", source_of_truth: "s", deadline: "d",
171
- resolver: "platform", edge_cases: "e",
172
- },
173
- });
174
- const body = JSON.parse(mockFetch.mock.calls[0][1].body);
175
- expect(body.probability).toBe(72);
176
- expect(body.prediction).toBeUndefined();
177
- });
178
- it("returns AGENT_NOT_LINKED error on 403", async () => {
179
- mockFetch.mockResolvedValue(mockResponse(403, { error: "Agent not linked", code: "AGENT_NOT_LINKED" }));
180
- const result = await handler({
181
- api_key: "sk_unlinked",
182
- question_id: "q1",
183
- prediction: true,
184
- confidence: 50,
185
- reasoning: "Test reasoning content here.",
186
- resolution_protocol: {
187
- criterion: "c", source_of_truth: "s", deadline: "d",
188
- resolver: "platform", edge_cases: "e",
189
- },
190
- });
191
- expectFail(result);
192
- expect(result.content[0].text).toContain("not linked");
193
- expect(result.content[0].text).toContain("welcome");
194
- });
195
- it("returns validation error when no prediction mode provided", async () => {
196
- const result = await handler({
197
- api_key: "sk_test",
198
- question_id: "q1",
199
- reasoning: "Some reasoning here.",
200
- resolution_protocol: {
201
- criterion: "c", source_of_truth: "s", deadline: "d",
202
- resolver: "platform", edge_cases: "e",
203
- },
204
- });
205
- expectFail(result);
206
- expect(result.content[0].text).toContain("Provide one of");
207
- expect(mockFetch).not.toHaveBeenCalled();
208
- });
209
- });
210
- describe("Tool Execution: check_profile", () => {
211
- const handler = getHandler("check_profile");
212
- it("sends GET /me with api_key header", async () => {
213
- mockFetch.mockResolvedValueOnce(mockResponse(200, {
214
- user: {
215
- id: "u1",
216
- name: "TestBot",
217
- points: 1500,
218
- tier: "Analyst",
219
- owner_id: "human-1",
220
- type: "agent",
221
- },
222
- }));
223
- const result = await handler({ api_key: "sk_profile_key" });
224
- expectOk(result);
225
- expect(result.content[0].text).toContain("profile");
226
- const [url, opts] = mockFetch.mock.calls[0];
227
- expect(url).toBe(`${TEST_API_URL}/me`);
228
- expect(opts.method).toBe("GET");
229
- expect(opts.headers["x-api-key"]).toBe("sk_profile_key");
230
- });
231
- it("warns about unlinked agent", async () => {
232
- mockFetch.mockResolvedValueOnce(mockResponse(200, {
233
- user: {
234
- id: "u2",
235
- name: "UnlinkedBot",
236
- owner_id: null,
237
- type: "agent",
238
- },
239
- }));
240
- const result = await handler({ api_key: "sk_unlinked" });
241
- expectOk(result);
242
- expect(result.content[0].text).toContain("NOT linked");
243
- expect(result.content[0].text).toContain("AGENT_NOT_LINKED");
244
- });
245
- it("returns error on 401 unauthorized", async () => {
246
- mockFetch.mockResolvedValue(mockResponse(401, { error: "Invalid API key" }));
247
- const result = await handler({ api_key: "sk_bad" });
248
- expectFail(result);
249
- expect(result.content[0].text).toContain("401");
250
- });
251
- });
252
- describe("Tool Execution: list_predictions", () => {
253
- const handler = getHandler("list_predictions");
254
- it("sends GET /questions with status and category params", async () => {
255
- mockFetch.mockResolvedValueOnce(mockResponse(200, {
256
- questions: [
257
- { id: "q1", title: "Will GPT-5 launch by 2026?", status: "open", category: "technology" },
258
- { id: "q2", title: "AI regulation in EU?", status: "open", category: "society" },
259
- ],
260
- }));
261
- const result = await handler({ status: "open", category: "technology" });
262
- expectOk(result);
263
- expect(result.content[0].text).toContain("2 question(s)");
264
- const [url] = mockFetch.mock.calls[0];
265
- const parsed = new URL(url);
266
- expect(parsed.pathname).toBe("/api/questions");
267
- expect(parsed.searchParams.get("status")).toBe("open");
268
- expect(parsed.searchParams.get("category")).toBe("technology");
269
- });
270
- it("returns friendly message when no questions match", async () => {
271
- mockFetch.mockResolvedValueOnce(mockResponse(200, { questions: [] }));
272
- const result = await handler({ status: "resolved", category: "society" });
273
- expectOk(result);
274
- expect(result.content[0].text).toContain("No questions match");
275
- });
276
- it("sends no query params when none provided", async () => {
277
- mockFetch.mockResolvedValueOnce(mockResponse(200, { questions: [{ id: "q1" }] }));
278
- await handler({});
279
- const [url] = mockFetch.mock.calls[0];
280
- const parsed = new URL(url);
281
- expect(parsed.search).toBe("");
282
- });
283
- });
284
- describe("Tool Execution: view_leaderboard", () => {
285
- const handler = getHandler("view_leaderboard");
286
- it("sends GET /leaderboard with no auth", async () => {
287
- mockFetch.mockResolvedValueOnce(mockResponse(200, {
288
- leaderboard: [
289
- { rank: 1, name: "AlphaPredict", points: 5200 },
290
- { rank: 2, name: "BetaBot", points: 4800 },
291
- ],
292
- }));
293
- const result = await handler({});
294
- expectOk(result);
295
- expect(result.content[0].text).toContain("Leaderboard");
296
- expect(result.content[0].text).toContain("AlphaPredict");
297
- const [url, opts] = mockFetch.mock.calls[0];
298
- expect(url).toBe(`${TEST_API_URL}/leaderboard`);
299
- expect(opts.method).toBe("GET");
300
- expect(opts.headers["x-api-key"]).toBeUndefined();
301
- });
302
- it("returns error on server failure", async () => {
303
- // Simulate 3 retries all failing with 500
304
- mockFetch.mockResolvedValue(mockResponse(500, { error: "Internal server error" }));
305
- const result = await handler({});
306
- expectFail(result);
307
- expect(result.content[0].text).toContain("500");
308
- });
309
- });
310
- describe("Tool Execution: post_comment", () => {
311
- const handler = getHandler("post_comment");
312
- it("sends POST /questions/{id}/comments with content body", async () => {
313
- mockFetch.mockResolvedValueOnce(mockResponse(201, { comment: { id: "c1", content: "Great analysis!" } }));
314
- const result = await handler({
315
- api_key: "sk_commenter",
316
- question_id: "q-abc-123",
317
- content: "Great analysis! I agree with the evidence presented.",
318
- });
319
- expectOk(result);
320
- expect(result.content[0].text).toContain("Comment posted!");
321
- const [url, opts] = mockFetch.mock.calls[0];
322
- expect(url).toBe(`${TEST_API_URL}/questions/q-abc-123/comments`);
323
- expect(opts.method).toBe("POST");
324
- expect(opts.headers["x-api-key"]).toBe("sk_commenter");
325
- const body = JSON.parse(opts.body);
326
- expect(body.content).toBe("Great analysis! I agree with the evidence presented.");
327
- });
328
- it("returns error on 401 unauthorized", async () => {
329
- mockFetch.mockResolvedValue(mockResponse(401, { error: "Unauthorized" }));
330
- const result = await handler({
331
- api_key: "sk_invalid",
332
- question_id: "q1",
333
- content: "Should fail.",
334
- });
335
- expectFail(result);
336
- expect(result.content[0].text).toContain("401");
337
- });
338
- });
339
- describe("Tool Execution: get_watchlist", () => {
340
- const handler = getHandler("get_watchlist");
341
- it("sends GET /me/watchlist with auth", async () => {
342
- mockFetch.mockResolvedValueOnce(mockResponse(200, {
343
- questions: [
344
- { id: "q1", title: "AI milestone Q4" },
345
- { id: "q2", title: "Regulation update" },
346
- ],
347
- }));
348
- const result = await handler({ api_key: "sk_watcher" });
349
- expectOk(result);
350
- expect(result.content[0].text).toContain("watchlist");
351
- const [url, opts] = mockFetch.mock.calls[0];
352
- expect(url).toBe(`${TEST_API_URL}/me/watchlist`);
353
- expect(opts.method).toBe("GET");
354
- expect(opts.headers["x-api-key"]).toBe("sk_watcher");
355
- });
356
- it("returns error on 401", async () => {
357
- mockFetch.mockResolvedValue(mockResponse(401, { error: "Invalid API key" }));
358
- const result = await handler({ api_key: "sk_bad" });
359
- expectFail(result);
360
- expect(result.content[0].text).toContain("401");
361
- });
362
- });
363
- describe("Tool Execution: my_feed", () => {
364
- const handler = getHandler("my_feed");
365
- it("sends GET /me/feed with filter params", async () => {
366
- mockFetch.mockResolvedValueOnce(mockResponse(200, {
367
- items: [{ type: "prediction", agent: "Bot1" }],
368
- next_cursor: "2026-03-10T00:00:00Z",
369
- }));
370
- const result = await handler({
371
- api_key: "sk_feed_user",
372
- type: "prediction",
373
- source: "followed",
374
- limit: 10,
375
- });
376
- expectOk(result);
377
- expect(result.content[0].text).toContain("activity feed");
378
- const [url, opts] = mockFetch.mock.calls[0];
379
- // my_feed builds the query string itself and appends to the path
380
- expect(url).toContain("/me/feed");
381
- expect(url).toContain("type=prediction");
382
- expect(url).toContain("source=followed");
383
- expect(url).toContain("limit=10");
384
- expect(opts.headers["x-api-key"]).toBe("sk_feed_user");
385
- });
386
- it("sends no query params when filters omitted", async () => {
387
- mockFetch.mockResolvedValueOnce(mockResponse(200, { items: [] }));
388
- await handler({ api_key: "sk_feed_user" });
389
- const [url] = mockFetch.mock.calls[0];
390
- // The path should end with /me/feed without extra query params
391
- // (apiRequest may still get the base URL — we just check no filter params)
392
- expect(url).toContain("/me/feed");
393
- expect(url).not.toContain("type=");
394
- expect(url).not.toContain("source=");
395
- });
396
- it("returns error on 401", async () => {
397
- mockFetch.mockResolvedValue(mockResponse(401, { error: "Unauthorized" }));
398
- const result = await handler({ api_key: "sk_expired" });
399
- expectFail(result);
400
- expect(result.content[0].text).toContain("401");
401
- });
402
- });
403
- describe("Tool Execution: get_notification_preferences", () => {
404
- const handler = getHandler("get_notification_preferences");
405
- it("sends GET /me/notification-preferences with auth", async () => {
406
- mockFetch.mockResolvedValueOnce(mockResponse(200, {
407
- preferences: [
408
- { channel: "email", event_type: "question_resolved", enabled: true },
409
- { channel: "inapp", event_type: "comment_reply", enabled: false },
410
- ],
411
- }));
412
- const result = await handler({ api_key: "sk_prefs_user" });
413
- expectOk(result);
414
- expect(result.content[0].text).toContain("Notification preferences");
415
- const [url, opts] = mockFetch.mock.calls[0];
416
- expect(url).toBe(`${TEST_API_URL}/me/notification-preferences`);
417
- expect(opts.method).toBe("GET");
418
- expect(opts.headers["x-api-key"]).toBe("sk_prefs_user");
419
- });
420
- it("returns error on 401", async () => {
421
- mockFetch.mockResolvedValue(mockResponse(401, { error: "Unauthorized" }));
422
- const result = await handler({ api_key: "sk_bad" });
423
- expectFail(result);
424
- expect(result.content[0].text).toContain("401");
425
- });
426
- });
427
- describe("Tool Execution: update_notification_preferences", () => {
428
- const handler = getHandler("update_notification_preferences");
429
- it("sends PUT /me/notification-preferences with preferences body", async () => {
430
- mockFetch.mockResolvedValueOnce(mockResponse(200, {
431
- preferences: [
432
- { channel: "email", event_type: "question_resolved", enabled: false },
433
- ],
434
- }));
435
- const prefs = [
436
- { channel: "email", event_type: "question_resolved", enabled: false },
437
- ];
438
- const result = await handler({ api_key: "sk_prefs_user", preferences: prefs });
439
- expectOk(result);
440
- expect(result.content[0].text).toContain("updated");
441
- const [url, opts] = mockFetch.mock.calls[0];
442
- expect(url).toBe(`${TEST_API_URL}/me/notification-preferences`);
443
- expect(opts.method).toBe("PUT");
444
- expect(opts.headers["x-api-key"]).toBe("sk_prefs_user");
445
- const body = JSON.parse(opts.body);
446
- expect(body.preferences).toHaveLength(1);
447
- expect(body.preferences[0].channel).toBe("email");
448
- expect(body.preferences[0].event_type).toBe("question_resolved");
449
- expect(body.preferences[0].enabled).toBe(false);
450
- });
451
- it("returns error on 400 invalid channel", async () => {
452
- mockFetch.mockResolvedValue(mockResponse(400, { error: "invalid channel: sms" }));
453
- const result = await handler({
454
- api_key: "sk_prefs_user",
455
- preferences: [{ channel: "email", event_type: "test", enabled: true }],
456
- });
457
- expectFail(result);
458
- expect(result.content[0].text).toContain("400");
459
- });
460
- it("returns error on 401", async () => {
461
- mockFetch.mockResolvedValue(mockResponse(401, { error: "Unauthorized" }));
462
- const result = await handler({
463
- api_key: "sk_bad",
464
- preferences: [{ channel: "inapp", event_type: "comment_reply", enabled: true }],
465
- });
466
- expectFail(result);
467
- expect(result.content[0].text).toContain("401");
468
- });
469
- });
470
- describe("Tool Execution: my_notifications", () => {
471
- const handler = getHandler("my_notifications");
472
- it("sends GET /me/notifications with auth", async () => {
473
- mockFetch.mockResolvedValueOnce(mockResponse(200, {
474
- notifications: [
475
- { id: "n1", type: "question_resolved", message: "GPT-5 question resolved" },
476
- { id: "n2", type: "comment_reply", message: "Bot2 replied to your comment" },
477
- ],
478
- }));
479
- const result = await handler({ api_key: "sk_notif_user" });
480
- expectOk(result);
481
- expect(result.content[0].text).toContain("notifications");
482
- const [url, opts] = mockFetch.mock.calls[0];
483
- expect(url).toContain("/me/notifications");
484
- expect(opts.headers["x-api-key"]).toBe("sk_notif_user");
485
- });
486
- it("passes limit as query param", async () => {
487
- mockFetch.mockResolvedValueOnce(mockResponse(200, { notifications: [] }));
488
- await handler({ api_key: "sk_notif_user", limit: 5 });
489
- const [url] = mockFetch.mock.calls[0];
490
- expect(url).toContain("limit=5");
491
- });
492
- it("returns error on 401", async () => {
493
- mockFetch.mockResolvedValue(mockResponse(401, { error: "Unauthorized" }));
494
- const result = await handler({ api_key: "sk_bad" });
495
- expectFail(result);
496
- expect(result.content[0].text).toContain("401");
497
- });
498
- });
499
- //# sourceMappingURL=tool-execution.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tool-execution.test.js","sourceRoot":"","sources":["../../src/__tests__/tool-execution.test.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=tools.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/tools.test.ts"],"names":[],"mappings":""}
@@ -1,100 +0,0 @@
1
- import { describe, it, expect, vi } from "vitest";
2
- // Mock fetch globally before importing anything
3
- const mockFetch = vi.fn();
4
- vi.stubGlobal("fetch", mockFetch);
5
- // Mock fs.readFileSync for version loading
6
- vi.mock("node:fs", () => ({
7
- readFileSync: () => JSON.stringify({ version: "0.0.0-test" }),
8
- }));
9
- // Mock stdio transport to prevent actual stdin/stdout binding
10
- vi.mock("@modelcontextprotocol/sdk/server/stdio.js", () => {
11
- class MockTransport {
12
- start() { }
13
- close() { }
14
- }
15
- return { StdioServerTransport: MockTransport };
16
- });
17
- // Capture tool registrations from the server
18
- const toolRegistry = new Map();
19
- vi.mock("@modelcontextprotocol/sdk/server/mcp.js", () => {
20
- class MockMcpServer {
21
- constructor() { }
22
- registerTool(name, opts) {
23
- toolRegistry.set(name, opts);
24
- }
25
- registerResource() { }
26
- registerPrompt() { }
27
- resource() { }
28
- prompt() { }
29
- connect() { }
30
- }
31
- class MockResourceTemplate {
32
- template;
33
- constructor(template) {
34
- this.template = template;
35
- }
36
- }
37
- return { McpServer: MockMcpServer, ResourceTemplate: MockResourceTemplate };
38
- });
39
- // Now import the server module — this triggers all registerTool calls
40
- await import("../index.js");
41
- describe("MCP Tool Registration", () => {
42
- it("registers all expected tools", () => {
43
- expect(toolRegistry.size).toBeGreaterThanOrEqual(40);
44
- });
45
- const expectedTools = [
46
- "register_agent",
47
- "link_agent",
48
- "make_prediction",
49
- "list_predictions",
50
- "check_profile",
51
- "view_leaderboard",
52
- "post_comment",
53
- "suggest_question",
54
- "view_taxonomy",
55
- "create_webhook",
56
- "list_webhooks",
57
- "delete_webhook",
58
- "upvote_prediction",
59
- "downvote_prediction",
60
- "follow_agent",
61
- "unfollow_agent",
62
- "update_profile",
63
- "view_question",
64
- "view_agent",
65
- "add_to_watchlist",
66
- "remove_from_watchlist",
67
- "get_watchlist",
68
- "my_transactions",
69
- "create_challenge",
70
- "list_challenges",
71
- "respond_challenge",
72
- "view_community_stats",
73
- ];
74
- it.each(expectedTools)("registers tool: %s", (toolName) => {
75
- expect(toolRegistry.has(toolName)).toBe(true);
76
- });
77
- it("all tools have descriptions", () => {
78
- for (const [name, tool] of toolRegistry) {
79
- expect(tool.description, `${name} should have a description`).toBeTruthy();
80
- expect(tool.description.length, `${name} description should be non-trivial`).toBeGreaterThan(10);
81
- }
82
- });
83
- it("register_agent requires name and model parameters", () => {
84
- const tool = toolRegistry.get("register_agent");
85
- expect(tool).toBeDefined();
86
- const schema = tool.inputSchema;
87
- expect(schema).toHaveProperty("name");
88
- expect(schema).toHaveProperty("model");
89
- });
90
- it("make_prediction requires key parameters", () => {
91
- const tool = toolRegistry.get("make_prediction");
92
- expect(tool).toBeDefined();
93
- const schema = tool.inputSchema;
94
- expect(schema).toHaveProperty("question_id");
95
- expect(schema).toHaveProperty("prediction");
96
- expect(schema).toHaveProperty("confidence");
97
- expect(schema).toHaveProperty("reasoning");
98
- });
99
- });
100
- //# sourceMappingURL=tools.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.test.js","sourceRoot":"","sources":["../../src/__tests__/tools.test.ts"],"names":[],"mappings":"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"}