fa-mcp-sdk 0.2.274 → 0.2.280
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/README.md +15 -0
- package/cli-template/.env.example +8 -0
- package/cli-template/FA-MCP-SDK-DOC/06-utilities.md +1 -1
- package/cli-template/package.json +1 -1
- package/config/_local.yaml +8 -0
- package/config/custom-environment-variables.yaml +7 -0
- package/config/default.yaml +7 -1
- package/config/local.yaml +7 -0
- package/dist/core/_types_/config.d.ts +11 -1
- package/dist/core/_types_/config.d.ts.map +1 -1
- package/dist/core/agent-tester/agent-tester-router.d.ts +9 -0
- package/dist/core/agent-tester/agent-tester-router.d.ts.map +1 -0
- package/dist/core/agent-tester/agent-tester-router.js +150 -0
- package/dist/core/agent-tester/agent-tester-router.js.map +1 -0
- package/dist/core/agent-tester/services/SummaryMemory.d.ts +28 -0
- package/dist/core/agent-tester/services/SummaryMemory.d.ts.map +1 -0
- package/dist/core/agent-tester/services/SummaryMemory.js +85 -0
- package/dist/core/agent-tester/services/SummaryMemory.js.map +1 -0
- package/dist/core/agent-tester/services/TesterAgentService.d.ts +24 -0
- package/dist/core/agent-tester/services/TesterAgentService.d.ts.map +1 -0
- package/dist/core/agent-tester/services/TesterAgentService.js +403 -0
- package/dist/core/agent-tester/services/TesterAgentService.js.map +1 -0
- package/dist/core/agent-tester/services/TesterMcpClientService.d.ts +25 -0
- package/dist/core/agent-tester/services/TesterMcpClientService.d.ts.map +1 -0
- package/dist/core/agent-tester/services/TesterMcpClientService.js +480 -0
- package/dist/core/agent-tester/services/TesterMcpClientService.js.map +1 -0
- package/dist/core/agent-tester/types.d.ts +94 -0
- package/dist/core/agent-tester/types.d.ts.map +1 -0
- package/dist/core/agent-tester/types.js +2 -0
- package/dist/core/agent-tester/types.js.map +1 -0
- package/dist/core/index.d.ts +2 -0
- package/dist/core/index.d.ts.map +1 -1
- package/dist/core/index.js +1 -0
- package/dist/core/index.js.map +1 -1
- package/dist/core/web/home-api.d.ts.map +1 -1
- package/dist/core/web/home-api.js +4 -0
- package/dist/core/web/home-api.js.map +1 -1
- package/dist/core/web/server-http.d.ts.map +1 -1
- package/dist/core/web/server-http.js +21 -0
- package/dist/core/web/server-http.js.map +1 -1
- package/dist/core/web/static/agent-tester/index.html +222 -0
- package/dist/core/web/static/agent-tester/script.js +1322 -0
- package/dist/core/web/static/agent-tester/styles.css +1105 -0
- package/package.json +13 -12
package/README.md
CHANGED
|
@@ -13,6 +13,7 @@ This framework provides complete infrastructure for building enterprise-grade MC
|
|
|
13
13
|
- **Database Integration**: PostgreSQL with pgvector for vector operations
|
|
14
14
|
- **Service Discovery**: Consul integration for microservices
|
|
15
15
|
- **Authentication**: Token-based security with configurable endpoints
|
|
16
|
+
- **Agent Tester**: Built-in chat UI for testing MCP tools via AI agent
|
|
16
17
|
- **Rate Limiting**: Configurable rate limiting for all endpoints
|
|
17
18
|
- **API Documentation**: Automatic Swagger generation
|
|
18
19
|
- **Production Logging**: Structured logging with data masking
|
|
@@ -227,6 +228,20 @@ Note: The `dist/` directory (compiled JavaScript) is created after running `npm
|
|
|
227
228
|
- Swagger UI at `/docs`
|
|
228
229
|
- Health check at `/health`
|
|
229
230
|
|
|
231
|
+
## Agent Tester
|
|
232
|
+
|
|
233
|
+
Built-in chat interface for testing MCP server tools using an AI agent (OpenAI-compatible LLM).
|
|
234
|
+
The agent automatically discovers available tools and calls them in a conversational loop.
|
|
235
|
+
|
|
236
|
+
To enable, set environment variables:
|
|
237
|
+
```
|
|
238
|
+
AGENT_TESTER_ENABLED=true
|
|
239
|
+
AGENT_TESTER_OPENAI_API_KEY=sk-...
|
|
240
|
+
```
|
|
241
|
+
|
|
242
|
+
The tester UI is available at `http://localhost:<port>/agent-tester` and auto-connects to the local MCP server.
|
|
243
|
+
Supports custom LLM endpoints, configurable system prompts, and dynamic HTTP headers.
|
|
244
|
+
|
|
230
245
|
## Directory Requirements
|
|
231
246
|
|
|
232
247
|
- Use absolute paths for target directory
|
|
@@ -24,6 +24,14 @@ DEBUG=config-info
|
|
|
24
24
|
# fa-consul:curl - consul/prepare-consul-api
|
|
25
25
|
# token:auth
|
|
26
26
|
|
|
27
|
+
# ========================================================================
|
|
28
|
+
# AGENT TESTER - Built-in AI agent for testing MCP tools
|
|
29
|
+
# ========================================================================
|
|
30
|
+
# AGENT_TESTER_ENABLED=true
|
|
31
|
+
# AGENT_TESTER_USE_AUTH=false
|
|
32
|
+
# AGENT_TESTER_OPENAI_API_KEY=sk-...
|
|
33
|
+
# AGENT_TESTER_OPENAI_BASE_URL=
|
|
34
|
+
|
|
27
35
|
# The address of the mcp server for testing. Default: http://localhost:<config.webServer.port>
|
|
28
36
|
# TEST_MCP_SERVER_URL=
|
|
29
37
|
|
|
@@ -118,7 +118,7 @@ await fileLogger.asyncFinish(); // Flush before shutdown
|
|
|
118
118
|
const myLogger: Logger = logger;
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
-
**`Logger`** —
|
|
121
|
+
**`Logger`** — The logger type from 'af-logger-ts' is used to type variables and function parameters.
|
|
122
122
|
|
|
123
123
|
## Event System
|
|
124
124
|
|
package/config/_local.yaml
CHANGED
|
@@ -11,6 +11,14 @@ ad:
|
|
|
11
11
|
username: '***'
|
|
12
12
|
password: '***'
|
|
13
13
|
|
|
14
|
+
|
|
15
|
+
agentTester:
|
|
16
|
+
enabled: true
|
|
17
|
+
useAuth: false
|
|
18
|
+
openAi:
|
|
19
|
+
apiKey: '***'
|
|
20
|
+
# baseUrl:
|
|
21
|
+
|
|
14
22
|
# --------------------------------------------------
|
|
15
23
|
# CACHING Reduces API calls by caching responses
|
|
16
24
|
# --------------------------------------------------
|
package/config/default.yaml
CHANGED
|
@@ -33,7 +33,13 @@ ad:
|
|
|
33
33
|
# Cache TTL for user/group DN lookups (default: 86400000 = 24 hours)
|
|
34
34
|
# dnCacheTtlMs: 86400000
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
agentTester:
|
|
37
|
+
enabled: true
|
|
38
|
+
useAuth: false
|
|
39
|
+
openAi:
|
|
40
|
+
apiKey: ''
|
|
41
|
+
# baseUrl: ''
|
|
42
|
+
|
|
37
43
|
# --------------------------------------------------
|
|
38
44
|
# CACHING Reduces API calls by caching responses
|
|
39
45
|
# --------------------------------------------------
|
package/config/local.yaml
CHANGED
|
@@ -1,3 +1,10 @@
|
|
|
1
|
+
agentTester:
|
|
2
|
+
enabled: true
|
|
3
|
+
useAuth: false
|
|
4
|
+
openAi:
|
|
5
|
+
apiKey: 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
|
|
6
|
+
# baseUrl: ''
|
|
7
|
+
|
|
1
8
|
ad:
|
|
2
9
|
domains:
|
|
3
10
|
OFFICE:
|
|
@@ -50,13 +50,23 @@ interface ISwaggerConfig {
|
|
|
50
50
|
}[];
|
|
51
51
|
};
|
|
52
52
|
}
|
|
53
|
+
interface IAgentTesterConfig {
|
|
54
|
+
agentTester?: {
|
|
55
|
+
enabled: boolean;
|
|
56
|
+
useAuth: boolean;
|
|
57
|
+
openAi?: {
|
|
58
|
+
apiKey: string;
|
|
59
|
+
baseUrl?: string;
|
|
60
|
+
};
|
|
61
|
+
};
|
|
62
|
+
}
|
|
53
63
|
interface ICacheConfig {
|
|
54
64
|
cache: {
|
|
55
65
|
ttlSeconds: 300;
|
|
56
66
|
maxItems: 1000;
|
|
57
67
|
};
|
|
58
68
|
}
|
|
59
|
-
export interface AppConfig extends IADConfig, ICacheConfig, ILoggerConfig, IAFDatabasesConfig, IWebServerConfig, IMCPConfig, ISwaggerConfig {
|
|
69
|
+
export interface AppConfig extends IADConfig, ICacheConfig, ILoggerConfig, IAFDatabasesConfig, IWebServerConfig, IMCPConfig, ISwaggerConfig, IAgentTesterConfig {
|
|
60
70
|
isMainDBUsed: boolean;
|
|
61
71
|
name: string;
|
|
62
72
|
shortName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/_types_/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzD,UAAU,gBAAgB;IACxB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO,CAAC;YACjB,KAAK,CAAC,EAAE;gBACN,QAAQ,EAAE,MAAM,CAAC;gBACjB,QAAQ,EAAE,MAAM,CAAC;aAClB,CAAC;YACF,QAAQ,EAAE;gBACR,UAAU,EAAE,MAAM,CAAC;gBACnB,YAAY,EAAE,OAAO,CAAC;aACvB,CAAA;YACD,qBAAqB,EAAE,MAAM,EAAE,CAAC;SACjC,CAAC;QACF,SAAS,EAAE;YACT,OAAO,EAAE,OAAO,CAAC;YACjB,IAAI,EAAE,uBAAuB,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;SAC/D,CAAC;KACH,CAAA;CACF;AAGD,UAAU,aAAa;IACrB,MAAM,EAAE;QACN,KAAK,EAAE,aAAa,CAAC;QACrB,aAAa,EAAE,OAAO,CAAC;QACvB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAA;CACF;AAED,UAAU,UAAU;IAClB,GAAG,EAAE;QACH,SAAS,EAAE;YACT,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,YAAY,EAAE,MAAM,GAAG,mBAAmB,CAAA;QAC1C,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC;KACjC,CAAA;CACF;AAED,UAAU,cAAc;IACtB,OAAO,EAAE;QACP,OAAO,CAAC,EAAE;YACR,GAAG,EAAE,MAAM,CAAC;YACZ,WAAW,EAAE,MAAM,CAAC;SACrB,EAAE,CAAC;KACL,CAAA;CACF;AAED,UAAU,YAAY;IACpB,KAAK,EAAE;QACL,UAAU,EAAE,GAAG,CAAC;QAChB,QAAQ,EAAE,IAAI,CAAC;KAChB,CAAA;CACF;AAED,MAAM,WAAW,SAAU,SAAQ,SAAS,EAC1C,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,cAAc;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/core/_types_/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC3D,OAAO,EAAE,SAAS,EAAE,MAAM,8BAA8B,CAAC;AAGzD,UAAU,gBAAgB;IACxB,SAAS,EAAE;QACT,IAAI,EAAE,MAAM,CAAC;QACb,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,IAAI,EAAE;YACJ,OAAO,EAAE,OAAO,CAAC;YACjB,KAAK,CAAC,EAAE;gBACN,QAAQ,EAAE,MAAM,CAAC;gBACjB,QAAQ,EAAE,MAAM,CAAC;aAClB,CAAC;YACF,QAAQ,EAAE;gBACR,UAAU,EAAE,MAAM,CAAC;gBACnB,YAAY,EAAE,OAAO,CAAC;aACvB,CAAA;YACD,qBAAqB,EAAE,MAAM,EAAE,CAAC;SACjC,CAAC;QACF,SAAS,EAAE;YACT,OAAO,EAAE,OAAO,CAAC;YACjB,IAAI,EAAE,uBAAuB,GAAG,OAAO,GAAG,UAAU,GAAG,MAAM,CAAC;SAC/D,CAAC;KACH,CAAA;CACF;AAGD,UAAU,aAAa;IACrB,MAAM,EAAE;QACN,KAAK,EAAE,aAAa,CAAC;QACrB,aAAa,EAAE,OAAO,CAAC;QACvB,GAAG,CAAC,EAAE,MAAM,CAAC;KACd,CAAA;CACF;AAED,UAAU,UAAU;IAClB,GAAG,EAAE;QACH,SAAS,EAAE;YACT,WAAW,EAAE,MAAM,CAAC;YACpB,QAAQ,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,YAAY,EAAE,MAAM,GAAG,mBAAmB,CAAA;QAC1C,aAAa,EAAE,OAAO,GAAG,MAAM,CAAC;KACjC,CAAA;CACF;AAED,UAAU,cAAc;IACtB,OAAO,EAAE;QACP,OAAO,CAAC,EAAE;YACR,GAAG,EAAE,MAAM,CAAC;YACZ,WAAW,EAAE,MAAM,CAAC;SACrB,EAAE,CAAC;KACL,CAAA;CACF;AAED,UAAU,kBAAkB;IAC1B,WAAW,CAAC,EAAE;QACZ,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,OAAO,CAAC;QACjB,MAAM,CAAC,EAAE;YACP,MAAM,EAAE,MAAM,CAAC;YACf,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;KACH,CAAA;CACF;AAED,UAAU,YAAY;IACpB,KAAK,EAAE;QACL,UAAU,EAAE,GAAG,CAAC;QAChB,QAAQ,EAAE,IAAI,CAAC;KAChB,CAAA;CACF;AAED,MAAM,WAAW,SAAU,SAAQ,SAAS,EAC1C,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,gBAAgB,EAChB,UAAU,EACV,cAAc,EACd,kBAAkB;IAElB,YAAY,EAAE,OAAO,CAAC;IAEtB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IAEpB,YAAY,EAAE,aAAa,CAAC;IAC5B,MAAM,EAAE,eAAe,GAAG;QACxB,OAAO,EAAE;YACP,IAAI,EAAE,MAAM,CAAC;YACb,GAAG,EAAE,MAAM,CAAC;SACb,CAAC;KACH,CAAC;IACF,OAAO,EAAE;QACP,OAAO,EAAE,MAAM,CAAC;KACjB,CAAA;CACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-tester-router.d.ts","sourceRoot":"","sources":["../../../src/core/agent-tester/agent-tester-router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAejC,wBAAgB,uBAAuB,CAAE,OAAO,GAAE;IAChD,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC3C,GAAG,MAAM,CAqId"}
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
import { Router } from 'express';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { logger as lgr } from '../logger.js';
|
|
4
|
+
import { TesterAgentService } from './services/TesterAgentService.js';
|
|
5
|
+
import { TesterMcpClientService } from './services/TesterMcpClientService.js';
|
|
6
|
+
import { dirname, join } from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
import express from 'express';
|
|
9
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
10
|
+
const __dirname = dirname(__filename);
|
|
11
|
+
const logger = lgr.getSubLogger({ name: chalk.cyan('agent-tester') });
|
|
12
|
+
export function createAgentTesterRouter(options = {}) {
|
|
13
|
+
const router = Router();
|
|
14
|
+
const mcpClientService = new TesterMcpClientService();
|
|
15
|
+
const agentService = new TesterAgentService(mcpClientService, options.openAi);
|
|
16
|
+
// Serve static files (index.html, script.js, styles.css)
|
|
17
|
+
const staticPath = join(__dirname, '..', 'web', 'static', 'agent-tester');
|
|
18
|
+
router.use('/static', express.static(staticPath));
|
|
19
|
+
// Serve tester UI
|
|
20
|
+
router.get('/', (req, res) => {
|
|
21
|
+
res.sendFile(join(staticPath, 'index.html'));
|
|
22
|
+
});
|
|
23
|
+
// API: Get default config (port, MCP URL)
|
|
24
|
+
router.get('/api/config', (req, res) => {
|
|
25
|
+
res.json({
|
|
26
|
+
defaultMcpUrl: options.defaultMcpUrl || null,
|
|
27
|
+
});
|
|
28
|
+
});
|
|
29
|
+
// ===== Chat API =====
|
|
30
|
+
// POST /api/chat/message
|
|
31
|
+
router.post('/api/chat/message', async (req, res) => {
|
|
32
|
+
try {
|
|
33
|
+
const chatRequest = req.body;
|
|
34
|
+
if (!chatRequest.message?.trim()) {
|
|
35
|
+
res.status(400).json({ error: 'Message is required' });
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
const response = await agentService.processMessage(chatRequest);
|
|
39
|
+
res.json(response);
|
|
40
|
+
}
|
|
41
|
+
catch (error) {
|
|
42
|
+
logger.error('Chat message error:', error);
|
|
43
|
+
res.status(500).json({ error: error.message || 'Internal server error' });
|
|
44
|
+
}
|
|
45
|
+
});
|
|
46
|
+
// GET /api/chat/sessions
|
|
47
|
+
router.get('/api/chat/sessions', (req, res) => {
|
|
48
|
+
res.json(agentService.getAllSessions());
|
|
49
|
+
});
|
|
50
|
+
// GET /api/chat/sessions/:sessionId
|
|
51
|
+
router.get('/api/chat/sessions/:sessionId', (req, res) => {
|
|
52
|
+
const session = agentService.getSession(req.params.sessionId);
|
|
53
|
+
if (!session) {
|
|
54
|
+
res.status(404).json({ error: 'Session not found' });
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
res.json(session);
|
|
58
|
+
});
|
|
59
|
+
// DELETE /api/chat/sessions/:sessionId
|
|
60
|
+
router.delete('/api/chat/sessions/:sessionId', (req, res) => {
|
|
61
|
+
const deleted = agentService.deleteSession(req.params.sessionId);
|
|
62
|
+
if (!deleted) {
|
|
63
|
+
res.status(404).json({ error: 'Session not found' });
|
|
64
|
+
return;
|
|
65
|
+
}
|
|
66
|
+
res.json({ message: 'Session deleted successfully' });
|
|
67
|
+
});
|
|
68
|
+
// ===== MCP API =====
|
|
69
|
+
// POST /api/mcp/connect
|
|
70
|
+
router.post('/api/mcp/connect', async (req, res) => {
|
|
71
|
+
try {
|
|
72
|
+
const connectionRequest = req.body;
|
|
73
|
+
if (!connectionRequest.url || !connectionRequest.transport) {
|
|
74
|
+
res.status(400).json({ error: 'URL and transport type are required' });
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
if (!connectionRequest.name) {
|
|
78
|
+
connectionRequest.name = generateServerName(connectionRequest.url);
|
|
79
|
+
}
|
|
80
|
+
const result = await mcpClientService.connectToServer(connectionRequest);
|
|
81
|
+
res.json(result);
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
logger.error('MCP connect error:', error);
|
|
85
|
+
res.status(500).json({ error: error.message || 'Internal server error' });
|
|
86
|
+
}
|
|
87
|
+
});
|
|
88
|
+
// POST /api/mcp/disconnect/:serverName
|
|
89
|
+
router.post('/api/mcp/disconnect/:serverName', async (req, res) => {
|
|
90
|
+
try {
|
|
91
|
+
await mcpClientService.disconnectFromServer(req.params.serverName);
|
|
92
|
+
res.json({ message: `Disconnected from ${req.params.serverName}` });
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
res.status(500).json({ error: error.message });
|
|
96
|
+
}
|
|
97
|
+
});
|
|
98
|
+
// POST /api/mcp/headers
|
|
99
|
+
router.post('/api/mcp/headers', async (req, res) => {
|
|
100
|
+
try {
|
|
101
|
+
const { serverName, headers } = req.body || {};
|
|
102
|
+
if (!serverName || typeof headers !== 'object') {
|
|
103
|
+
res.status(400).json({ error: 'serverName and headers are required' });
|
|
104
|
+
return;
|
|
105
|
+
}
|
|
106
|
+
const result = await mcpClientService.updateHeaders(serverName, headers);
|
|
107
|
+
res.json(result);
|
|
108
|
+
}
|
|
109
|
+
catch (error) {
|
|
110
|
+
res.status(500).json({ error: error.message });
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
// GET /api/mcp/servers
|
|
114
|
+
router.get('/api/mcp/servers', (req, res) => {
|
|
115
|
+
res.json(mcpClientService.getAllServerConfigs());
|
|
116
|
+
});
|
|
117
|
+
// GET /api/mcp/required-headers
|
|
118
|
+
router.get('/api/mcp/required-headers', async (req, res) => {
|
|
119
|
+
try {
|
|
120
|
+
const url = req.query.url;
|
|
121
|
+
if (!url) {
|
|
122
|
+
res.status(400).json({ error: 'URL parameter is required' });
|
|
123
|
+
return;
|
|
124
|
+
}
|
|
125
|
+
const headers = await mcpClientService.getRequiredHeaders(url);
|
|
126
|
+
res.json(headers);
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
res.status(500).json({ error: error.message });
|
|
130
|
+
}
|
|
131
|
+
});
|
|
132
|
+
logger.info('Agent Tester router initialized');
|
|
133
|
+
return router;
|
|
134
|
+
}
|
|
135
|
+
function generateServerName(url) {
|
|
136
|
+
try {
|
|
137
|
+
const urlObj = new URL(url);
|
|
138
|
+
let hostname = urlObj.hostname;
|
|
139
|
+
if (hostname.startsWith('www.')) {
|
|
140
|
+
hostname = hostname.substring(4);
|
|
141
|
+
}
|
|
142
|
+
const firstSegment = hostname.split('.')[0] || hostname;
|
|
143
|
+
const port = urlObj.port;
|
|
144
|
+
return port ? `${firstSegment}${port}` : firstSegment;
|
|
145
|
+
}
|
|
146
|
+
catch {
|
|
147
|
+
return `server_${Date.now()}`;
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
//# sourceMappingURL=agent-tester-router.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-tester-router.js","sourceRoot":"","sources":["../../../src/core/agent-tester/agent-tester-router.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import OpenAI from 'openai';
|
|
2
|
+
export type SummaryState = {
|
|
3
|
+
summary: string;
|
|
4
|
+
tail: OpenAI.Chat.ChatCompletionMessageParam[];
|
|
5
|
+
estimatedTokens: number;
|
|
6
|
+
lastSummarizedAt: Date;
|
|
7
|
+
};
|
|
8
|
+
export type SummaryConfig = {
|
|
9
|
+
tailSize: number;
|
|
10
|
+
maxTokens: number;
|
|
11
|
+
maxToolPayloadChars: number;
|
|
12
|
+
};
|
|
13
|
+
export declare class SummaryMemory {
|
|
14
|
+
private map;
|
|
15
|
+
private config;
|
|
16
|
+
constructor(config?: Partial<SummaryConfig>);
|
|
17
|
+
getState(sessionId: string): SummaryState;
|
|
18
|
+
delete(sessionId: string): void;
|
|
19
|
+
clear(): void;
|
|
20
|
+
buildMessages(systemPrompt: string, state: SummaryState): OpenAI.Chat.ChatCompletionMessageParam[];
|
|
21
|
+
pushMessage(state: SummaryState, msg: OpenAI.Chat.ChatCompletionMessageParam): void;
|
|
22
|
+
needsCompression(state: SummaryState): boolean;
|
|
23
|
+
getConfig(): SummaryConfig;
|
|
24
|
+
resetAfterCompression(state: SummaryState): void;
|
|
25
|
+
private normalizeToolPayload;
|
|
26
|
+
private estimateTokens;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=SummaryMemory.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SummaryMemory.d.ts","sourceRoot":"","sources":["../../../../src/core/agent-tester/services/SummaryMemory.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,QAAQ,CAAC;AAE5B,MAAM,MAAM,YAAY,GAAG;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE,CAAC;IAC/C,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,IAAI,CAAC;CACxB,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG;IAC1B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,mBAAmB,EAAE,MAAM,CAAC;CAC7B,CAAC;AAQF,qBAAa,aAAa;IACxB,OAAO,CAAC,GAAG,CAAwC;IACnD,OAAO,CAAC,MAAM,CAAgB;gBAEjB,MAAM,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC;IAIrC,QAAQ,CAAE,SAAS,EAAE,MAAM,GAAG,YAAY;IAc1C,MAAM,CAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIhC,KAAK,IAAK,IAAI;IAId,aAAa,CAAE,YAAY,EAAE,MAAM,EAAE,KAAK,EAAE,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,0BAA0B,EAAE;IAanG,WAAW,CAAE,KAAK,EAAE,YAAY,EAAE,GAAG,EAAE,MAAM,CAAC,IAAI,CAAC,0BAA0B,GAAG,IAAI;IAgBpF,gBAAgB,CAAE,KAAK,EAAE,YAAY,GAAG,OAAO;IAI/C,SAAS,IAAK,aAAa;IAI3B,qBAAqB,CAAE,KAAK,EAAE,YAAY,GAAG,IAAI;IAKxD,OAAO,CAAC,oBAAoB;IAoB5B,OAAO,CAAC,cAAc;CAKvB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const DEFAULT_CONFIG = {
|
|
2
|
+
tailSize: 6,
|
|
3
|
+
maxTokens: 8000,
|
|
4
|
+
maxToolPayloadChars: 5000,
|
|
5
|
+
};
|
|
6
|
+
export class SummaryMemory {
|
|
7
|
+
map = new Map();
|
|
8
|
+
config;
|
|
9
|
+
constructor(config) {
|
|
10
|
+
this.config = { ...DEFAULT_CONFIG, ...(config || {}) };
|
|
11
|
+
}
|
|
12
|
+
getState(sessionId) {
|
|
13
|
+
let state = this.map.get(sessionId);
|
|
14
|
+
if (!state) {
|
|
15
|
+
state = {
|
|
16
|
+
summary: '',
|
|
17
|
+
tail: [],
|
|
18
|
+
estimatedTokens: 0,
|
|
19
|
+
lastSummarizedAt: new Date(0),
|
|
20
|
+
};
|
|
21
|
+
this.map.set(sessionId, state);
|
|
22
|
+
}
|
|
23
|
+
return state;
|
|
24
|
+
}
|
|
25
|
+
delete(sessionId) {
|
|
26
|
+
this.map.delete(sessionId);
|
|
27
|
+
}
|
|
28
|
+
clear() {
|
|
29
|
+
this.map.clear();
|
|
30
|
+
}
|
|
31
|
+
buildMessages(systemPrompt, state) {
|
|
32
|
+
const messages = [
|
|
33
|
+
{ role: 'system', content: systemPrompt },
|
|
34
|
+
];
|
|
35
|
+
if (state.summary) {
|
|
36
|
+
messages.push({ role: 'system', content: `Summary Memory:\n${state.summary}` });
|
|
37
|
+
}
|
|
38
|
+
messages.push(...state.tail);
|
|
39
|
+
return messages;
|
|
40
|
+
}
|
|
41
|
+
pushMessage(state, msg) {
|
|
42
|
+
const normalized = this.normalizeToolPayload(msg);
|
|
43
|
+
state.tail.push(normalized);
|
|
44
|
+
state.estimatedTokens += this.estimateTokens(normalized);
|
|
45
|
+
if (state.tail.length > this.config.tailSize) {
|
|
46
|
+
const removed = state.tail.splice(0, state.tail.length - this.config.tailSize);
|
|
47
|
+
for (const r of removed) {
|
|
48
|
+
state.estimatedTokens -= this.estimateTokens(r);
|
|
49
|
+
}
|
|
50
|
+
if (state.estimatedTokens < 0) {
|
|
51
|
+
state.estimatedTokens = 0;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
needsCompression(state) {
|
|
56
|
+
return state.estimatedTokens > this.config.maxTokens;
|
|
57
|
+
}
|
|
58
|
+
getConfig() {
|
|
59
|
+
return this.config;
|
|
60
|
+
}
|
|
61
|
+
resetAfterCompression(state) {
|
|
62
|
+
state.estimatedTokens = 0;
|
|
63
|
+
state.lastSummarizedAt = new Date();
|
|
64
|
+
}
|
|
65
|
+
normalizeToolPayload(msg) {
|
|
66
|
+
if (msg.role !== 'tool' || typeof msg.content !== 'string') {
|
|
67
|
+
return msg;
|
|
68
|
+
}
|
|
69
|
+
if (msg.content.length <= this.config.maxToolPayloadChars) {
|
|
70
|
+
return msg;
|
|
71
|
+
}
|
|
72
|
+
const truncated = [
|
|
73
|
+
msg.content.slice(0, this.config.maxToolPayloadChars),
|
|
74
|
+
'',
|
|
75
|
+
`[TRUNCATED tool result: original_length=${msg.content.length} chars, kept=${this.config.maxToolPayloadChars}]`,
|
|
76
|
+
].join('\n');
|
|
77
|
+
return { ...msg, content: truncated };
|
|
78
|
+
}
|
|
79
|
+
estimateTokens(msg) {
|
|
80
|
+
const text = JSON.stringify(msg);
|
|
81
|
+
// Rough estimate: 1 token ~= 4 characters
|
|
82
|
+
return Math.ceil(text.length / 4);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=SummaryMemory.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SummaryMemory.js","sourceRoot":"","sources":["../../../../src/core/agent-tester/services/SummaryMemory.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { TesterChatSession, TesterChatRequest, TesterChatResponse } from '../types.js';
|
|
2
|
+
import { TesterMcpClientService } from './TesterMcpClientService.js';
|
|
3
|
+
export declare class TesterAgentService {
|
|
4
|
+
private mcpClientService;
|
|
5
|
+
private openAiConfig?;
|
|
6
|
+
private sessions;
|
|
7
|
+
private defaultConfig;
|
|
8
|
+
private openai;
|
|
9
|
+
private openaiHistories;
|
|
10
|
+
private summaryMemory;
|
|
11
|
+
constructor(mcpClientService: TesterMcpClientService, openAiConfig?: {
|
|
12
|
+
apiKey?: string;
|
|
13
|
+
baseUrl?: string;
|
|
14
|
+
} | undefined);
|
|
15
|
+
cleanup(): Promise<void>;
|
|
16
|
+
private buildSummaryPrompt;
|
|
17
|
+
private summarizeHistory;
|
|
18
|
+
processMessage(request: TesterChatRequest): Promise<TesterChatResponse>;
|
|
19
|
+
getSession(sessionId: string): TesterChatSession | undefined;
|
|
20
|
+
getAllSessions(): TesterChatSession[];
|
|
21
|
+
deleteSession(sessionId: string): boolean;
|
|
22
|
+
private createSession;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=TesterAgentService.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TesterAgentService.d.ts","sourceRoot":"","sources":["../../../../src/core/agent-tester/services/TesterAgentService.ts"],"names":[],"mappings":"AAIA,OAAO,EAEL,iBAAiB,EAEjB,iBAAiB,EACjB,kBAAkB,EAEnB,MAAM,aAAa,CAAC;AACrB,OAAO,EAAE,sBAAsB,EAAE,MAAM,6BAA6B,CAAC;AAgBrE,qBAAa,kBAAkB;IAc3B,OAAO,CAAC,gBAAgB;IACxB,OAAO,CAAC,YAAY,CAAC;IAdvB,OAAO,CAAC,QAAQ,CAA6C;IAC7D,OAAO,CAAC,aAAa,CAAc;IACnC,OAAO,CAAC,MAAM,CAAuB;IAErC,OAAO,CAAC,eAAe,CAAoE;IAE3F,OAAO,CAAC,aAAa,CAIlB;gBAGO,gBAAgB,EAAE,sBAAsB,EACxC,YAAY,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,YAAA;IAoBjD,OAAO,IAAK,OAAO,CAAC,IAAI,CAAC;IAOtC,OAAO,CAAC,kBAAkB;YAyBZ,gBAAgB;IAsBjB,cAAc,CAAE,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC;IAyV9E,UAAU,CAAE,SAAS,EAAE,MAAM,GAAG,iBAAiB,GAAG,SAAS;IAI7D,cAAc,IAAK,iBAAiB,EAAE;IAItC,aAAa,CAAE,SAAS,EAAE,MAAM,GAAG,OAAO;IAMjD,OAAO,CAAC,aAAa;CAiBtB"}
|