@agentlensai/mcp 0.3.0 → 0.5.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.
- package/dist/__tests__/context.test.d.ts +5 -0
- package/dist/__tests__/context.test.d.ts.map +1 -0
- package/dist/__tests__/context.test.js +203 -0
- package/dist/__tests__/context.test.js.map +1 -0
- package/dist/__tests__/learn.test.d.ts +2 -0
- package/dist/__tests__/learn.test.d.ts.map +1 -0
- package/dist/__tests__/learn.test.js +381 -0
- package/dist/__tests__/learn.test.js.map +1 -0
- package/dist/__tests__/llm-call.test.js +2 -2
- package/dist/__tests__/recall.test.d.ts +2 -0
- package/dist/__tests__/recall.test.d.ts.map +1 -0
- package/dist/__tests__/recall.test.js +193 -0
- package/dist/__tests__/recall.test.js.map +1 -0
- package/dist/__tests__/reflect.test.d.ts +5 -0
- package/dist/__tests__/reflect.test.d.ts.map +1 -0
- package/dist/__tests__/reflect.test.js +165 -0
- package/dist/__tests__/reflect.test.js.map +1 -0
- package/dist/index.js +0 -0
- package/dist/server.test.js +6 -2
- package/dist/server.test.js.map +1 -1
- package/dist/tools/context.d.ts +10 -0
- package/dist/tools/context.d.ts.map +1 -0
- package/dist/tools/context.js +93 -0
- package/dist/tools/context.js.map +1 -0
- package/dist/tools/learn.d.ts +10 -0
- package/dist/tools/learn.d.ts.map +1 -0
- package/dist/tools/learn.js +277 -0
- package/dist/tools/learn.js.map +1 -0
- package/dist/tools/recall.d.ts +10 -0
- package/dist/tools/recall.d.ts.map +1 -0
- package/dist/tools/recall.js +90 -0
- package/dist/tools/recall.js.map +1 -0
- package/dist/tools/reflect.d.ts +10 -0
- package/dist/tools/reflect.d.ts.map +1 -0
- package/dist/tools/reflect.js +61 -0
- package/dist/tools/reflect.js.map +1 -0
- package/dist/tools.d.ts.map +1 -1
- package/dist/tools.js +8 -0
- package/dist/tools.js.map +1 -1
- package/dist/tools.test.js +5 -1
- package/dist/tools.test.js.map +1 -1
- package/dist/transport.d.ts +54 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +133 -0
- package/dist/transport.js.map +1 -1
- package/package.json +7 -7
- package/LICENSE +0 -21
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recall.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/recall.test.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for agentlens_recall MCP tool (Story 2.5)
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
5
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
6
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
7
|
+
import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js';
|
|
8
|
+
import { registerTools } from '../tools.js';
|
|
9
|
+
import { AgentLensTransport } from '../transport.js';
|
|
10
|
+
// Mock global fetch
|
|
11
|
+
const mockFetch = vi.fn();
|
|
12
|
+
beforeEach(() => {
|
|
13
|
+
vi.stubGlobal('fetch', mockFetch);
|
|
14
|
+
mockFetch.mockReset();
|
|
15
|
+
});
|
|
16
|
+
afterEach(() => {
|
|
17
|
+
vi.unstubAllGlobals();
|
|
18
|
+
});
|
|
19
|
+
function okResponse(data = {}) {
|
|
20
|
+
return new Response(JSON.stringify(data), {
|
|
21
|
+
status: 200,
|
|
22
|
+
headers: { 'Content-Type': 'application/json' },
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
function errorResponse(status, body) {
|
|
26
|
+
return new Response(body, { status });
|
|
27
|
+
}
|
|
28
|
+
async function createTestSetup() {
|
|
29
|
+
const transport = new AgentLensTransport({
|
|
30
|
+
baseUrl: 'http://localhost:3400',
|
|
31
|
+
apiKey: 'test-key',
|
|
32
|
+
});
|
|
33
|
+
const server = new McpServer({ name: 'agentlens-test', version: '0.0.0' }, { capabilities: { tools: {} } });
|
|
34
|
+
registerTools(server, transport);
|
|
35
|
+
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
|
36
|
+
const client = new Client({ name: 'test-client', version: '1.0.0' });
|
|
37
|
+
await server.connect(serverTransport);
|
|
38
|
+
await client.connect(clientTransport);
|
|
39
|
+
return { server, client, transport };
|
|
40
|
+
}
|
|
41
|
+
describe('agentlens_recall registration', () => {
|
|
42
|
+
it('registers the tool', async () => {
|
|
43
|
+
const { client } = await createTestSetup();
|
|
44
|
+
const result = await client.listTools();
|
|
45
|
+
const toolNames = result.tools.map((t) => t.name);
|
|
46
|
+
expect(toolNames).toContain('agentlens_recall');
|
|
47
|
+
});
|
|
48
|
+
it('registers 9 tools total', async () => {
|
|
49
|
+
const { client } = await createTestSetup();
|
|
50
|
+
const result = await client.listTools();
|
|
51
|
+
expect(result.tools).toHaveLength(9);
|
|
52
|
+
});
|
|
53
|
+
it('has a description mentioning semantic search', async () => {
|
|
54
|
+
const { client } = await createTestSetup();
|
|
55
|
+
const result = await client.listTools();
|
|
56
|
+
const tool = result.tools.find((t) => t.name === 'agentlens_recall');
|
|
57
|
+
expect(tool).toBeDefined();
|
|
58
|
+
expect(tool.description).toBeTruthy();
|
|
59
|
+
expect(tool.description.toLowerCase()).toContain('semantic');
|
|
60
|
+
});
|
|
61
|
+
it('has query as required field', async () => {
|
|
62
|
+
const { client } = await createTestSetup();
|
|
63
|
+
const result = await client.listTools();
|
|
64
|
+
const tool = result.tools.find((t) => t.name === 'agentlens_recall');
|
|
65
|
+
expect(tool).toBeDefined();
|
|
66
|
+
expect(tool.inputSchema.required).toContain('query');
|
|
67
|
+
});
|
|
68
|
+
});
|
|
69
|
+
describe('agentlens_recall results', () => {
|
|
70
|
+
it('returns formatted results', async () => {
|
|
71
|
+
const data = {
|
|
72
|
+
results: [
|
|
73
|
+
{ sourceType: 'event', sourceId: 'ev-1', score: 0.92, text: 'tool_error: readFile - not found' },
|
|
74
|
+
{ sourceType: 'lesson', sourceId: 'les-1', score: 0.85, text: 'Always check file exists' },
|
|
75
|
+
],
|
|
76
|
+
query: 'file error',
|
|
77
|
+
totalResults: 2,
|
|
78
|
+
};
|
|
79
|
+
mockFetch.mockResolvedValue(okResponse(data));
|
|
80
|
+
const { client } = await createTestSetup();
|
|
81
|
+
const result = await client.callTool({
|
|
82
|
+
name: 'agentlens_recall',
|
|
83
|
+
arguments: { query: 'file error' },
|
|
84
|
+
});
|
|
85
|
+
expect(result.isError).toBeFalsy();
|
|
86
|
+
const content = result.content;
|
|
87
|
+
expect(content[0].text).toContain('Found 2 result(s)');
|
|
88
|
+
expect(content[0].text).toContain('tool_error: readFile');
|
|
89
|
+
expect(content[0].text).toContain('[event]');
|
|
90
|
+
expect(content[0].text).toContain('[lesson]');
|
|
91
|
+
expect(content[0].text).toContain('92.0% match');
|
|
92
|
+
});
|
|
93
|
+
it('sends correct query params to server', async () => {
|
|
94
|
+
mockFetch.mockResolvedValue(okResponse({ results: [], query: 'test', totalResults: 0 }));
|
|
95
|
+
const { client } = await createTestSetup();
|
|
96
|
+
await client.callTool({
|
|
97
|
+
name: 'agentlens_recall',
|
|
98
|
+
arguments: {
|
|
99
|
+
query: 'file error',
|
|
100
|
+
scope: 'events',
|
|
101
|
+
limit: 5,
|
|
102
|
+
minScore: 0.5,
|
|
103
|
+
from: '2025-01-01',
|
|
104
|
+
to: '2025-12-31',
|
|
105
|
+
},
|
|
106
|
+
});
|
|
107
|
+
const url = mockFetch.mock.calls[0][0];
|
|
108
|
+
expect(url).toContain('/api/recall?');
|
|
109
|
+
expect(url).toContain('query=file+error');
|
|
110
|
+
expect(url).toContain('scope=events');
|
|
111
|
+
expect(url).toContain('limit=5');
|
|
112
|
+
expect(url).toContain('minScore=0.5');
|
|
113
|
+
expect(url).toContain('from=2025-01-01');
|
|
114
|
+
expect(url).toContain('to=2025-12-31');
|
|
115
|
+
});
|
|
116
|
+
it('returns message when no results found', async () => {
|
|
117
|
+
mockFetch.mockResolvedValue(okResponse({ results: [], query: 'test', totalResults: 0 }));
|
|
118
|
+
const { client } = await createTestSetup();
|
|
119
|
+
const result = await client.callTool({
|
|
120
|
+
name: 'agentlens_recall',
|
|
121
|
+
arguments: { query: 'nothing found' },
|
|
122
|
+
});
|
|
123
|
+
expect(result.isError).toBeFalsy();
|
|
124
|
+
const content = result.content;
|
|
125
|
+
expect(content[0].text).toContain('No results found');
|
|
126
|
+
});
|
|
127
|
+
});
|
|
128
|
+
describe('agentlens_recall error handling', () => {
|
|
129
|
+
it('handles server errors', async () => {
|
|
130
|
+
mockFetch.mockResolvedValue(errorResponse(500, 'Internal Server Error'));
|
|
131
|
+
const { client } = await createTestSetup();
|
|
132
|
+
const result = await client.callTool({
|
|
133
|
+
name: 'agentlens_recall',
|
|
134
|
+
arguments: { query: 'test' },
|
|
135
|
+
});
|
|
136
|
+
expect(result.isError).toBe(true);
|
|
137
|
+
const content = result.content;
|
|
138
|
+
expect(content[0].text).toContain('500');
|
|
139
|
+
});
|
|
140
|
+
it('handles 503 when embeddings not configured', async () => {
|
|
141
|
+
mockFetch.mockResolvedValue(errorResponse(503, 'Embedding service not configured'));
|
|
142
|
+
const { client } = await createTestSetup();
|
|
143
|
+
const result = await client.callTool({
|
|
144
|
+
name: 'agentlens_recall',
|
|
145
|
+
arguments: { query: 'test' },
|
|
146
|
+
});
|
|
147
|
+
expect(result.isError).toBe(true);
|
|
148
|
+
const content = result.content;
|
|
149
|
+
expect(content[0].text).toContain('503');
|
|
150
|
+
});
|
|
151
|
+
it('handles network errors gracefully', async () => {
|
|
152
|
+
mockFetch.mockRejectedValue(new Error('Connection refused'));
|
|
153
|
+
const { client } = await createTestSetup();
|
|
154
|
+
const result = await client.callTool({
|
|
155
|
+
name: 'agentlens_recall',
|
|
156
|
+
arguments: { query: 'test' },
|
|
157
|
+
});
|
|
158
|
+
expect(result.isError).toBe(true);
|
|
159
|
+
const content = result.content;
|
|
160
|
+
expect(content[0].text).toContain('Connection refused');
|
|
161
|
+
});
|
|
162
|
+
});
|
|
163
|
+
describe('transport.recall', () => {
|
|
164
|
+
it('calls GET /api/recall with query params', async () => {
|
|
165
|
+
mockFetch.mockResolvedValue(okResponse({ results: [], query: 'test', totalResults: 0 }));
|
|
166
|
+
const transport = new AgentLensTransport({
|
|
167
|
+
baseUrl: 'http://localhost:3400',
|
|
168
|
+
apiKey: 'test-key',
|
|
169
|
+
});
|
|
170
|
+
await transport.recall({ query: 'test query', scope: 'lessons', limit: 5 });
|
|
171
|
+
const url = mockFetch.mock.calls[0][0];
|
|
172
|
+
expect(url).toContain('http://localhost:3400/api/recall?');
|
|
173
|
+
expect(url).toContain('query=test+query');
|
|
174
|
+
expect(url).toContain('scope=lessons');
|
|
175
|
+
expect(url).toContain('limit=5');
|
|
176
|
+
const opts = mockFetch.mock.calls[0][1];
|
|
177
|
+
expect(opts.method).toBe('GET');
|
|
178
|
+
expect(opts.headers['Authorization']).toBe('Bearer test-key');
|
|
179
|
+
});
|
|
180
|
+
it('omits optional params when not provided', async () => {
|
|
181
|
+
mockFetch.mockResolvedValue(okResponse({ results: [], query: 'test', totalResults: 0 }));
|
|
182
|
+
const transport = new AgentLensTransport({
|
|
183
|
+
baseUrl: 'http://localhost:3400',
|
|
184
|
+
});
|
|
185
|
+
await transport.recall({ query: 'test' });
|
|
186
|
+
const url = mockFetch.mock.calls[0][0];
|
|
187
|
+
expect(url).toContain('query=test');
|
|
188
|
+
expect(url).not.toContain('scope=');
|
|
189
|
+
expect(url).not.toContain('limit=');
|
|
190
|
+
expect(url).not.toContain('minScore=');
|
|
191
|
+
});
|
|
192
|
+
});
|
|
193
|
+
//# sourceMappingURL=recall.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"recall.test.js","sourceRoot":"","sources":["../../src/__tests__/recall.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reflect.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/reflect.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tests for agentlens_reflect MCP tool (Story 4.5)
|
|
3
|
+
*/
|
|
4
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
5
|
+
import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
6
|
+
import { Client } from '@modelcontextprotocol/sdk/client/index.js';
|
|
7
|
+
import { InMemoryTransport } from '@modelcontextprotocol/sdk/inMemory.js';
|
|
8
|
+
import { registerTools } from '../tools.js';
|
|
9
|
+
import { AgentLensTransport } from '../transport.js';
|
|
10
|
+
const mockFetch = vi.fn();
|
|
11
|
+
beforeEach(() => {
|
|
12
|
+
vi.stubGlobal('fetch', mockFetch);
|
|
13
|
+
mockFetch.mockReset();
|
|
14
|
+
});
|
|
15
|
+
afterEach(() => {
|
|
16
|
+
vi.unstubAllGlobals();
|
|
17
|
+
});
|
|
18
|
+
function okResponse(data = {}) {
|
|
19
|
+
return new Response(JSON.stringify(data), {
|
|
20
|
+
status: 200,
|
|
21
|
+
headers: { 'Content-Type': 'application/json' },
|
|
22
|
+
});
|
|
23
|
+
}
|
|
24
|
+
function errorResponse(status, body) {
|
|
25
|
+
return new Response(body, { status });
|
|
26
|
+
}
|
|
27
|
+
async function createTestSetup() {
|
|
28
|
+
const transport = new AgentLensTransport({
|
|
29
|
+
baseUrl: 'http://localhost:3400',
|
|
30
|
+
apiKey: 'test-key',
|
|
31
|
+
});
|
|
32
|
+
const server = new McpServer({ name: 'agentlens-test', version: '0.0.0' }, { capabilities: { tools: {} } });
|
|
33
|
+
registerTools(server, transport);
|
|
34
|
+
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
|
35
|
+
const client = new Client({ name: 'test-client', version: '1.0.0' });
|
|
36
|
+
await server.connect(serverTransport);
|
|
37
|
+
await client.connect(clientTransport);
|
|
38
|
+
return { server, client, transport };
|
|
39
|
+
}
|
|
40
|
+
describe('agentlens_reflect', () => {
|
|
41
|
+
it('calls the reflect API with correct parameters', async () => {
|
|
42
|
+
const reflectResult = {
|
|
43
|
+
analysis: 'error_patterns',
|
|
44
|
+
insights: [
|
|
45
|
+
{
|
|
46
|
+
type: 'error_pattern',
|
|
47
|
+
summary: 'Connection timeout occurred 5 times',
|
|
48
|
+
data: { pattern: 'Connection timeout', count: 5 },
|
|
49
|
+
confidence: 0.9,
|
|
50
|
+
},
|
|
51
|
+
],
|
|
52
|
+
metadata: {
|
|
53
|
+
sessionsAnalyzed: 10,
|
|
54
|
+
eventsAnalyzed: 50,
|
|
55
|
+
timeRange: { from: '2024-01-01', to: '2024-01-31' },
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
mockFetch.mockResolvedValueOnce(okResponse(reflectResult));
|
|
59
|
+
const { client } = await createTestSetup();
|
|
60
|
+
const result = await client.callTool({
|
|
61
|
+
name: 'agentlens_reflect',
|
|
62
|
+
arguments: {
|
|
63
|
+
analysis: 'error_patterns',
|
|
64
|
+
agentId: 'my-agent',
|
|
65
|
+
from: '2024-01-01',
|
|
66
|
+
to: '2024-01-31',
|
|
67
|
+
limit: 10,
|
|
68
|
+
},
|
|
69
|
+
});
|
|
70
|
+
// Verify the fetch was called with the right URL
|
|
71
|
+
expect(mockFetch).toHaveBeenCalledWith(expect.stringContaining('/api/reflect?'), expect.objectContaining({
|
|
72
|
+
method: 'GET',
|
|
73
|
+
headers: expect.objectContaining({
|
|
74
|
+
Authorization: 'Bearer test-key',
|
|
75
|
+
}),
|
|
76
|
+
}));
|
|
77
|
+
const fetchUrl = mockFetch.mock.calls[0][0];
|
|
78
|
+
expect(fetchUrl).toContain('analysis=error_patterns');
|
|
79
|
+
expect(fetchUrl).toContain('agentId=my-agent');
|
|
80
|
+
expect(fetchUrl).toContain('from=2024-01-01');
|
|
81
|
+
expect(fetchUrl).toContain('to=2024-01-31');
|
|
82
|
+
expect(fetchUrl).toContain('limit=10');
|
|
83
|
+
// Verify the result contains the data
|
|
84
|
+
expect(result.isError).toBeUndefined();
|
|
85
|
+
const content = result.content;
|
|
86
|
+
const parsed = JSON.parse(content[0].text);
|
|
87
|
+
expect(parsed.analysis).toBe('error_patterns');
|
|
88
|
+
expect(parsed.insights).toHaveLength(1);
|
|
89
|
+
});
|
|
90
|
+
it('handles error_patterns analysis', async () => {
|
|
91
|
+
mockFetch.mockResolvedValueOnce(okResponse({
|
|
92
|
+
analysis: 'error_patterns',
|
|
93
|
+
insights: [],
|
|
94
|
+
metadata: { sessionsAnalyzed: 0, eventsAnalyzed: 0, timeRange: { from: '', to: '' } },
|
|
95
|
+
}));
|
|
96
|
+
const { client } = await createTestSetup();
|
|
97
|
+
const result = await client.callTool({
|
|
98
|
+
name: 'agentlens_reflect',
|
|
99
|
+
arguments: { analysis: 'error_patterns' },
|
|
100
|
+
});
|
|
101
|
+
expect(result.isError).toBeUndefined();
|
|
102
|
+
});
|
|
103
|
+
it('handles tool_sequences analysis', async () => {
|
|
104
|
+
mockFetch.mockResolvedValueOnce(okResponse({
|
|
105
|
+
analysis: 'tool_sequences',
|
|
106
|
+
insights: [],
|
|
107
|
+
metadata: { sessionsAnalyzed: 0, eventsAnalyzed: 0, timeRange: { from: '', to: '' } },
|
|
108
|
+
}));
|
|
109
|
+
const { client } = await createTestSetup();
|
|
110
|
+
const result = await client.callTool({
|
|
111
|
+
name: 'agentlens_reflect',
|
|
112
|
+
arguments: { analysis: 'tool_sequences' },
|
|
113
|
+
});
|
|
114
|
+
expect(result.isError).toBeUndefined();
|
|
115
|
+
});
|
|
116
|
+
it('handles cost_analysis analysis', async () => {
|
|
117
|
+
mockFetch.mockResolvedValueOnce(okResponse({
|
|
118
|
+
analysis: 'cost_analysis',
|
|
119
|
+
insights: [],
|
|
120
|
+
metadata: { sessionsAnalyzed: 0, eventsAnalyzed: 0, timeRange: { from: '', to: '' } },
|
|
121
|
+
}));
|
|
122
|
+
const { client } = await createTestSetup();
|
|
123
|
+
const result = await client.callTool({
|
|
124
|
+
name: 'agentlens_reflect',
|
|
125
|
+
arguments: { analysis: 'cost_analysis' },
|
|
126
|
+
});
|
|
127
|
+
expect(result.isError).toBeUndefined();
|
|
128
|
+
});
|
|
129
|
+
it('handles performance_trends analysis', async () => {
|
|
130
|
+
mockFetch.mockResolvedValueOnce(okResponse({
|
|
131
|
+
analysis: 'performance_trends',
|
|
132
|
+
insights: [],
|
|
133
|
+
metadata: { sessionsAnalyzed: 0, eventsAnalyzed: 0, timeRange: { from: '', to: '' } },
|
|
134
|
+
}));
|
|
135
|
+
const { client } = await createTestSetup();
|
|
136
|
+
const result = await client.callTool({
|
|
137
|
+
name: 'agentlens_reflect',
|
|
138
|
+
arguments: { analysis: 'performance_trends' },
|
|
139
|
+
});
|
|
140
|
+
expect(result.isError).toBeUndefined();
|
|
141
|
+
});
|
|
142
|
+
it('returns error on API failure', async () => {
|
|
143
|
+
mockFetch.mockResolvedValueOnce(errorResponse(500, 'Internal Server Error'));
|
|
144
|
+
const { client } = await createTestSetup();
|
|
145
|
+
const result = await client.callTool({
|
|
146
|
+
name: 'agentlens_reflect',
|
|
147
|
+
arguments: { analysis: 'error_patterns' },
|
|
148
|
+
});
|
|
149
|
+
expect(result.isError).toBe(true);
|
|
150
|
+
const content = result.content;
|
|
151
|
+
expect(content[0].text).toContain('Error running error_patterns analysis');
|
|
152
|
+
});
|
|
153
|
+
it('returns error on network failure', async () => {
|
|
154
|
+
mockFetch.mockRejectedValueOnce(new Error('Connection refused'));
|
|
155
|
+
const { client } = await createTestSetup();
|
|
156
|
+
const result = await client.callTool({
|
|
157
|
+
name: 'agentlens_reflect',
|
|
158
|
+
arguments: { analysis: 'error_patterns' },
|
|
159
|
+
});
|
|
160
|
+
expect(result.isError).toBe(true);
|
|
161
|
+
const content = result.content;
|
|
162
|
+
expect(content[0].text).toContain('Connection refused');
|
|
163
|
+
});
|
|
164
|
+
});
|
|
165
|
+
//# sourceMappingURL=reflect.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reflect.test.js","sourceRoot":"","sources":["../../src/__tests__/reflect.test.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
|
File without changes
|
package/dist/server.test.js
CHANGED
|
@@ -24,19 +24,23 @@ describe('MCP Server Entrypoint (Story 5.1)', () => {
|
|
|
24
24
|
const { transport } = createServer();
|
|
25
25
|
expect(transport).toBeDefined();
|
|
26
26
|
});
|
|
27
|
-
it('lists all
|
|
27
|
+
it('lists all 9 tools via MCP protocol', async () => {
|
|
28
28
|
const { mcpServer } = createServer();
|
|
29
29
|
const [clientTransport, serverTransport] = InMemoryTransport.createLinkedPair();
|
|
30
30
|
const client = new Client({ name: 'test-client', version: '1.0.0' });
|
|
31
31
|
await mcpServer.connect(serverTransport);
|
|
32
32
|
await client.connect(clientTransport);
|
|
33
33
|
const result = await client.listTools();
|
|
34
|
-
expect(result.tools).toHaveLength(
|
|
34
|
+
expect(result.tools).toHaveLength(9);
|
|
35
35
|
const names = result.tools.map((t) => t.name).sort();
|
|
36
36
|
expect(names).toEqual([
|
|
37
|
+
'agentlens_context',
|
|
38
|
+
'agentlens_learn',
|
|
37
39
|
'agentlens_log_event',
|
|
38
40
|
'agentlens_log_llm_call',
|
|
39
41
|
'agentlens_query_events',
|
|
42
|
+
'agentlens_recall',
|
|
43
|
+
'agentlens_reflect',
|
|
40
44
|
'agentlens_session_end',
|
|
41
45
|
'agentlens_session_start',
|
|
42
46
|
]);
|
package/dist/server.test.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.test.js","sourceRoot":"","sources":["../src/server.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"server.test.js","sourceRoot":"","sources":["../src/server.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentlens_context MCP Tool (Story 7.7)
|
|
3
|
+
*
|
|
4
|
+
* Cross-session context retrieval — get related sessions and lessons for a topic.
|
|
5
|
+
* Calls GET /api/context on the AgentLens server.
|
|
6
|
+
*/
|
|
7
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
8
|
+
import type { AgentLensTransport } from '../transport.js';
|
|
9
|
+
export declare function registerContextTool(server: McpServer, transport: AgentLensTransport): void;
|
|
10
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,GAAG,IAAI,CA6G1F"}
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentlens_context MCP Tool (Story 7.7)
|
|
3
|
+
*
|
|
4
|
+
* Cross-session context retrieval — get related sessions and lessons for a topic.
|
|
5
|
+
* Calls GET /api/context on the AgentLens server.
|
|
6
|
+
*/
|
|
7
|
+
import { z } from 'zod';
|
|
8
|
+
export function registerContextTool(server, transport) {
|
|
9
|
+
server.tool('agentlens_context', `Retrieve cross-session context for a topic — related session summaries and lessons ranked by relevance.
|
|
10
|
+
|
|
11
|
+
**When to use:** At the start of a session to load relevant history, when building a system prompt with past experience, when starting work on a topic the agent has handled before, or to audit what happened with a specific topic.
|
|
12
|
+
|
|
13
|
+
**What it returns:** Related sessions (with summaries, key events, and relevance scores) and related lessons, all ranked by relevance to the topic. Includes an overall summary.
|
|
14
|
+
|
|
15
|
+
**Example:** agentlens_context({ topic: "database migrations", limit: 5 }) → returns past sessions about DB migrations with key events, plus any lessons learned about migrations.`, {
|
|
16
|
+
topic: z.string().describe('Topic to retrieve context for (natural language)'),
|
|
17
|
+
userId: z.string().optional().describe('Filter by user ID'),
|
|
18
|
+
agentId: z.string().optional().describe('Filter by agent ID'),
|
|
19
|
+
from: z.string().optional().describe('Start date filter (ISO 8601)'),
|
|
20
|
+
to: z.string().optional().describe('End date filter (ISO 8601)'),
|
|
21
|
+
limit: z.number().optional().describe('Maximum number of sessions to include (default: 5)'),
|
|
22
|
+
}, async ({ topic, userId, agentId, from, to, limit }) => {
|
|
23
|
+
try {
|
|
24
|
+
const data = (await transport.getContext({
|
|
25
|
+
topic,
|
|
26
|
+
userId,
|
|
27
|
+
agentId,
|
|
28
|
+
from,
|
|
29
|
+
to,
|
|
30
|
+
limit,
|
|
31
|
+
}));
|
|
32
|
+
if (data.sessions.length === 0 && data.lessons.length === 0) {
|
|
33
|
+
return {
|
|
34
|
+
content: [
|
|
35
|
+
{
|
|
36
|
+
type: 'text',
|
|
37
|
+
text: `No relevant context found for "${topic}".`,
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
// Format context for the agent
|
|
43
|
+
const parts = [];
|
|
44
|
+
parts.push(`Context for "${topic}":`);
|
|
45
|
+
if (data.summary) {
|
|
46
|
+
parts.push(`\nSummary: ${data.summary}`);
|
|
47
|
+
}
|
|
48
|
+
if (data.sessions.length > 0) {
|
|
49
|
+
parts.push(`\nRelated Sessions (${data.sessions.length}):`);
|
|
50
|
+
for (const session of data.sessions) {
|
|
51
|
+
const score = (session.relevanceScore * 100).toFixed(1);
|
|
52
|
+
parts.push(`\n [${score}%] Session ${session.sessionId}`);
|
|
53
|
+
if (session.summary) {
|
|
54
|
+
parts.push(` ${session.summary}`);
|
|
55
|
+
}
|
|
56
|
+
if (session.keyEvents?.length > 0) {
|
|
57
|
+
for (const event of session.keyEvents.slice(0, 3)) {
|
|
58
|
+
parts.push(` - [${event.eventType}] ${event.summary}`);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
if (data.lessons.length > 0) {
|
|
64
|
+
parts.push(`\nRelated Lessons (${data.lessons.length}):`);
|
|
65
|
+
for (const lesson of data.lessons) {
|
|
66
|
+
const score = (lesson.relevanceScore * 100).toFixed(1);
|
|
67
|
+
parts.push(`\n [${score}%] ${lesson.title} (${lesson.category})`);
|
|
68
|
+
parts.push(` ${lesson.content.slice(0, 200)}${lesson.content.length > 200 ? '...' : ''}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
content: [
|
|
73
|
+
{
|
|
74
|
+
type: 'text',
|
|
75
|
+
text: parts.join('\n'),
|
|
76
|
+
},
|
|
77
|
+
],
|
|
78
|
+
};
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
return {
|
|
82
|
+
content: [
|
|
83
|
+
{
|
|
84
|
+
type: 'text',
|
|
85
|
+
text: `Error retrieving context: ${error instanceof Error ? error.message : 'Server unreachable'}`,
|
|
86
|
+
},
|
|
87
|
+
],
|
|
88
|
+
isError: true,
|
|
89
|
+
};
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/tools/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* agentlens_learn MCP Tool (Story 3.3)
|
|
3
|
+
*
|
|
4
|
+
* Provides lesson CRUD operations via a single tool with an `action` parameter.
|
|
5
|
+
* Actions: save, list, get, update, delete, search
|
|
6
|
+
*/
|
|
7
|
+
import type { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
8
|
+
import type { AgentLensTransport } from '../transport.js';
|
|
9
|
+
export declare function registerLearnTool(server: McpServer, transport: AgentLensTransport): void;
|
|
10
|
+
//# sourceMappingURL=learn.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"learn.d.ts","sourceRoot":"","sources":["../../src/tools/learn.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AACzE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAE1D,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,kBAAkB,GAAG,IAAI,CAiExF"}
|