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.
Files changed (44) hide show
  1. package/README.md +15 -0
  2. package/cli-template/.env.example +8 -0
  3. package/cli-template/FA-MCP-SDK-DOC/06-utilities.md +1 -1
  4. package/cli-template/package.json +1 -1
  5. package/config/_local.yaml +8 -0
  6. package/config/custom-environment-variables.yaml +7 -0
  7. package/config/default.yaml +7 -1
  8. package/config/local.yaml +7 -0
  9. package/dist/core/_types_/config.d.ts +11 -1
  10. package/dist/core/_types_/config.d.ts.map +1 -1
  11. package/dist/core/agent-tester/agent-tester-router.d.ts +9 -0
  12. package/dist/core/agent-tester/agent-tester-router.d.ts.map +1 -0
  13. package/dist/core/agent-tester/agent-tester-router.js +150 -0
  14. package/dist/core/agent-tester/agent-tester-router.js.map +1 -0
  15. package/dist/core/agent-tester/services/SummaryMemory.d.ts +28 -0
  16. package/dist/core/agent-tester/services/SummaryMemory.d.ts.map +1 -0
  17. package/dist/core/agent-tester/services/SummaryMemory.js +85 -0
  18. package/dist/core/agent-tester/services/SummaryMemory.js.map +1 -0
  19. package/dist/core/agent-tester/services/TesterAgentService.d.ts +24 -0
  20. package/dist/core/agent-tester/services/TesterAgentService.d.ts.map +1 -0
  21. package/dist/core/agent-tester/services/TesterAgentService.js +403 -0
  22. package/dist/core/agent-tester/services/TesterAgentService.js.map +1 -0
  23. package/dist/core/agent-tester/services/TesterMcpClientService.d.ts +25 -0
  24. package/dist/core/agent-tester/services/TesterMcpClientService.d.ts.map +1 -0
  25. package/dist/core/agent-tester/services/TesterMcpClientService.js +480 -0
  26. package/dist/core/agent-tester/services/TesterMcpClientService.js.map +1 -0
  27. package/dist/core/agent-tester/types.d.ts +94 -0
  28. package/dist/core/agent-tester/types.d.ts.map +1 -0
  29. package/dist/core/agent-tester/types.js +2 -0
  30. package/dist/core/agent-tester/types.js.map +1 -0
  31. package/dist/core/index.d.ts +2 -0
  32. package/dist/core/index.d.ts.map +1 -1
  33. package/dist/core/index.js +1 -0
  34. package/dist/core/index.js.map +1 -1
  35. package/dist/core/web/home-api.d.ts.map +1 -1
  36. package/dist/core/web/home-api.js +4 -0
  37. package/dist/core/web/home-api.js.map +1 -1
  38. package/dist/core/web/server-http.d.ts.map +1 -1
  39. package/dist/core/web/server-http.js +21 -0
  40. package/dist/core/web/server-http.js.map +1 -1
  41. package/dist/core/web/static/agent-tester/index.html +222 -0
  42. package/dist/core/web/static/agent-tester/script.js +1322 -0
  43. package/dist/core/web/static/agent-tester/styles.css +1105 -0
  44. 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`** — тип логгера из `af-logger-ts`, используется для типизации переменных и параметров функций.
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
 
@@ -48,7 +48,7 @@
48
48
  "dependencies": {
49
49
  "@modelcontextprotocol/sdk": "^1.25.2",
50
50
  "dotenv": "^17.2.3",
51
- "fa-mcp-sdk": "^0.2.274"
51
+ "fa-mcp-sdk": "^0.2.280"
52
52
  },
53
53
  "devDependencies": {
54
54
  "@types/express": "^5.0.6",
@@ -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
  # --------------------------------------------------
@@ -1,3 +1,10 @@
1
+ agentTester:
2
+ enabled: AGENT_TESTER_ENABLED
3
+ useAuth: AGENT_TESTER_USE_AUTH
4
+ openAi:
5
+ apiKey: AGENT_TESTER_OPENAI_API_KEY
6
+ baseUrl: AGENT_TESTER_OPENAI_BASE_URL
7
+
1
8
  cache:
2
9
  ttlSeconds: CACHE_TTL_SECONDS
3
10
  maxItems: CACHE_MAX_ITEMS
@@ -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
- # ... existing code ...
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;IAEd,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"}
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,9 @@
1
+ import { Router } from 'express';
2
+ export declare function createAgentTesterRouter(options?: {
3
+ defaultMcpUrl?: string;
4
+ openAi?: {
5
+ apiKey?: string;
6
+ baseUrl?: string;
7
+ };
8
+ }): Router;
9
+ //# sourceMappingURL=agent-tester-router.d.ts.map
@@ -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":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,MAAM,IAAI,GAAG,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,kBAAkB,EAAE,MAAM,kCAAkC,CAAC;AACtE,OAAO,EAAE,sBAAsB,EAAE,MAAM,sCAAsC,CAAC;AAE9E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AACrC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AACpC,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAEtC,MAAM,MAAM,GAAG,GAAG,CAAC,YAAY,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC;AAEtE,MAAM,UAAU,uBAAuB,CAAE,UAGrC,EAAE;IACJ,MAAM,MAAM,GAAG,MAAM,EAAE,CAAC;IAExB,MAAM,gBAAgB,GAAG,IAAI,sBAAsB,EAAE,CAAC;IACtD,MAAM,YAAY,GAAG,IAAI,kBAAkB,CAAC,gBAAgB,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAE9E,yDAAyD;IACzD,MAAM,UAAU,GAAG,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,cAAc,CAAC,CAAC;IAC1E,MAAM,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC;IAElD,kBAAkB;IAClB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC3B,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,0CAA0C;IAC1C,MAAM,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACrC,GAAG,CAAC,IAAI,CAAC;YACP,aAAa,EAAE,OAAO,CAAC,aAAa,IAAI,IAAI;SAC7C,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,uBAAuB;IAEvB,yBAAyB;IACzB,MAAM,CAAC,IAAI,CAAC,mBAAmB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAiB,EAAE;QACjE,IAAI,CAAC;YACH,MAAM,WAAW,GAAsB,GAAG,CAAC,IAAI,CAAC;YAChD,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;gBACjC,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC;gBACvD,OAAO;YACT,CAAC;YACD,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;YAChE,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;YAC3C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,uBAAuB,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,yBAAyB;IACzB,MAAM,CAAC,GAAG,CAAC,oBAAoB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC5C,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,oCAAoC;IACpC,MAAM,CAAC,GAAG,CAAC,+BAA+B,EAAE,CAAC,GAAG,EAAE,GAAG,EAAQ,EAAE;QAC7D,MAAM,OAAO,GAAG,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACpB,CAAC,CAAC,CAAC;IAEH,uCAAuC;IACvC,MAAM,CAAC,MAAM,CAAC,+BAA+B,EAAE,CAAC,GAAG,EAAE,GAAG,EAAQ,EAAE;QAChE,MAAM,OAAO,GAAG,YAAY,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QACjE,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;YACrD,OAAO;QACT,CAAC;QACD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,8BAA8B,EAAE,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,sBAAsB;IAEtB,wBAAwB;IACxB,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAiB,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,iBAAiB,GAA+B,GAAG,CAAC,IAAI,CAAC;YAC/D,IAAI,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,SAAS,EAAE,CAAC;gBAC3D,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC,CAAC;gBACvE,OAAO;YACT,CAAC;YACD,IAAI,CAAC,iBAAiB,CAAC,IAAI,EAAE,CAAC;gBAC5B,iBAAiB,CAAC,IAAI,GAAG,kBAAkB,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC;YACrE,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,eAAe,CAAC,iBAAiB,CAAC,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,MAAM,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YAC1C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,IAAI,uBAAuB,EAAE,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,uCAAuC;IACvC,MAAM,CAAC,IAAI,CAAC,iCAAiC,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,gBAAgB,CAAC,oBAAoB,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YACnE,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,qBAAqB,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;QACtE,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,wBAAwB;IACxB,MAAM,CAAC,IAAI,CAAC,kBAAkB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAiB,EAAE;QAChE,IAAI,CAAC;YACH,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC;YAC/C,IAAI,CAAC,UAAU,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC/C,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,qCAAqC,EAAE,CAAC,CAAC;gBACvE,OAAO;YACT,CAAC;YACD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,uBAAuB;IACvB,MAAM,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QAC1C,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,mBAAmB,EAAE,CAAC,CAAC;IACnD,CAAC,CAAC,CAAC;IAEH,gCAAgC;IAChC,MAAM,CAAC,GAAG,CAAC,2BAA2B,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAiB,EAAE;QACxE,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,GAAa,CAAC;YACpC,IAAI,CAAC,GAAG,EAAE,CAAC;gBACT,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,2BAA2B,EAAE,CAAC,CAAC;gBAC7D,OAAO;YACT,CAAC;YACD,MAAM,OAAO,GAAG,MAAM,gBAAgB,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC;YAC/D,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACpB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;QACjD,CAAC;IACH,CAAC,CAAC,CAAC;IAEH,MAAM,CAAC,IAAI,CAAC,iCAAiC,CAAC,CAAC;IAC/C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,kBAAkB,CAAE,GAAW;IACtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,IAAI,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC;QAC/B,IAAI,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YAAA,QAAQ,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAAA,CAAC;QACpE,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;QACxD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC;QACzB,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC;IACxD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,UAAU,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IAChC,CAAC;AACH,CAAC"}
@@ -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"}