@1mcp/agent 0.23.1 → 0.24.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/build/commands/mcp/tokens.d.ts.map +1 -1
- package/build/commands/mcp/tokens.js +4 -2
- package/build/commands/mcp/tokens.js.map +1 -1
- package/build/commands/mcp/utils/configUtils.d.ts.map +1 -1
- package/build/commands/mcp/utils/configUtils.js +12 -1
- package/build/commands/mcp/utils/configUtils.js.map +1 -1
- package/build/commands/proxy/index.d.ts +20 -0
- package/build/commands/proxy/index.d.ts.map +1 -0
- package/build/commands/proxy/index.js +87 -0
- package/build/commands/proxy/index.js.map +1 -0
- package/build/commands/proxy/proxy.d.ts +6 -0
- package/build/commands/proxy/proxy.d.ts.map +1 -0
- package/build/commands/proxy/proxy.js +84 -0
- package/build/commands/proxy/proxy.js.map +1 -0
- package/build/commands/serve/serve.d.ts.map +1 -1
- package/build/commands/serve/serve.js +42 -4
- package/build/commands/serve/serve.js.map +1 -1
- package/build/config/mcpConfigManager.d.ts.map +1 -1
- package/build/config/mcpConfigManager.js +15 -6
- package/build/config/mcpConfigManager.js.map +1 -1
- package/build/constants.d.ts +1 -1
- package/build/constants.js +1 -1
- package/build/core/capabilities/asyncLoadingOrchestrator.d.ts.map +1 -1
- package/build/core/capabilities/asyncLoadingOrchestrator.js +11 -8
- package/build/core/capabilities/asyncLoadingOrchestrator.js.map +1 -1
- package/build/core/capabilities/capabilityAggregator.js +8 -8
- package/build/core/capabilities/capabilityAggregator.js.map +1 -1
- package/build/{capabilities → core/capabilities}/capabilityManager.d.ts +1 -1
- package/build/core/capabilities/capabilityManager.d.ts.map +1 -0
- package/build/{capabilities → core/capabilities}/capabilityManager.js +3 -3
- package/build/core/capabilities/capabilityManager.js.map +1 -0
- package/build/core/client/clientManager.d.ts +17 -0
- package/build/core/client/clientManager.d.ts.map +1 -1
- package/build/core/client/clientManager.js +126 -6
- package/build/core/client/clientManager.js.map +1 -1
- package/build/core/filtering/filteringService.d.ts.map +1 -1
- package/build/core/filtering/filteringService.js +89 -55
- package/build/core/filtering/filteringService.js.map +1 -1
- package/build/core/instructions/instructionAggregator.d.ts.map +1 -1
- package/build/core/instructions/instructionAggregator.js +54 -26
- package/build/core/instructions/instructionAggregator.js.map +1 -1
- package/build/core/instructions/templateHelpers.d.ts +7 -0
- package/build/core/instructions/templateHelpers.d.ts.map +1 -0
- package/build/core/instructions/templateHelpers.js +116 -0
- package/build/core/instructions/templateHelpers.js.map +1 -0
- package/build/core/instructions/templateTypes.d.ts +14 -4
- package/build/core/instructions/templateTypes.d.ts.map +1 -1
- package/build/core/instructions/templateTypes.js +10 -2
- package/build/core/instructions/templateTypes.js.map +1 -1
- package/build/core/loading/loadingStateTracker.d.ts +16 -8
- package/build/core/loading/loadingStateTracker.d.ts.map +1 -1
- package/build/core/loading/loadingStateTracker.js +22 -10
- package/build/core/loading/loadingStateTracker.js.map +1 -1
- package/build/core/loading/mcpLoadingManager.d.ts +19 -9
- package/build/core/loading/mcpLoadingManager.d.ts.map +1 -1
- package/build/core/loading/mcpLoadingManager.js +29 -15
- package/build/core/loading/mcpLoadingManager.js.map +1 -1
- package/build/core/notifications/notificationManager.d.ts.map +1 -1
- package/build/core/notifications/notificationManager.js +9 -6
- package/build/core/notifications/notificationManager.js.map +1 -1
- package/build/core/server/serverManager.js +6 -6
- package/build/core/server/serverManager.js.map +1 -1
- package/build/core/types/transport.d.ts +32 -0
- package/build/core/types/transport.d.ts.map +1 -1
- package/build/core/types/transport.js +3 -1
- package/build/core/types/transport.js.map +1 -1
- package/build/handlers/requestHandlers.js +8 -8
- package/build/handlers/requestHandlers.js.map +1 -1
- package/build/index.js +16 -2
- package/build/index.js.map +1 -1
- package/build/logger/logger.d.ts +39 -0
- package/build/logger/logger.d.ts.map +1 -1
- package/build/logger/logger.js +133 -0
- package/build/logger/logger.js.map +1 -1
- package/build/server.d.ts.map +1 -1
- package/build/server.js +5 -2
- package/build/server.js.map +1 -1
- package/build/services/configReloadService.js +1 -1
- package/build/services/configReloadService.js.map +1 -1
- package/build/transport/http/middlewares/mcpAvailabilityMiddleware.d.ts.map +1 -1
- package/build/transport/http/middlewares/mcpAvailabilityMiddleware.js +10 -4
- package/build/transport/http/middlewares/mcpAvailabilityMiddleware.js.map +1 -1
- package/build/transport/http/middlewares/tagsExtractor.d.ts.map +1 -1
- package/build/transport/http/middlewares/tagsExtractor.js +9 -6
- package/build/transport/http/middlewares/tagsExtractor.js.map +1 -1
- package/build/transport/http/routes/oauthRoutes.d.ts.map +1 -1
- package/build/transport/http/routes/oauthRoutes.js +5 -21
- package/build/transport/http/routes/oauthRoutes.js.map +1 -1
- package/build/transport/restartableStdioTransport.d.ts.map +1 -1
- package/build/transport/restartableStdioTransport.js +7 -4
- package/build/transport/restartableStdioTransport.js.map +1 -1
- package/build/transport/stdioProxyTransport.d.ts +39 -0
- package/build/transport/stdioProxyTransport.d.ts.map +1 -0
- package/build/transport/stdioProxyTransport.js +138 -0
- package/build/transport/stdioProxyTransport.js.map +1 -0
- package/build/transport/transportFactory.d.ts.map +1 -1
- package/build/transport/transportFactory.js +29 -13
- package/build/transport/transportFactory.js.map +1 -1
- package/build/utils/appDiscovery.js +1 -1
- package/build/utils/appDiscovery.js.map +1 -1
- package/build/utils/clientFiltering.d.ts.map +1 -1
- package/build/utils/clientFiltering.js +64 -36
- package/build/utils/clientFiltering.js.map +1 -1
- package/build/utils/envProcessor.d.ts.map +1 -1
- package/build/utils/envProcessor.js +9 -7
- package/build/utils/envProcessor.js.map +1 -1
- package/build/utils/pagination.d.ts.map +1 -1
- package/build/utils/pagination.js +6 -4
- package/build/utils/pagination.js.map +1 -1
- package/build/utils/pidFileManager.d.ts +45 -0
- package/build/utils/pidFileManager.d.ts.map +1 -0
- package/build/utils/pidFileManager.js +120 -0
- package/build/utils/pidFileManager.js.map +1 -0
- package/build/utils/projectConfigLoader.d.ts +25 -0
- package/build/utils/projectConfigLoader.d.ts.map +1 -0
- package/build/utils/projectConfigLoader.js +74 -0
- package/build/utils/projectConfigLoader.js.map +1 -0
- package/build/utils/projectConfigTypes.d.ts +28 -0
- package/build/utils/projectConfigTypes.d.ts.map +1 -0
- package/build/utils/projectConfigTypes.js +22 -0
- package/build/utils/projectConfigTypes.js.map +1 -0
- package/build/utils/urlDetection.d.ts +14 -2
- package/build/utils/urlDetection.d.ts.map +1 -1
- package/build/utils/urlDetection.js +51 -4
- package/build/utils/urlDetection.js.map +1 -1
- package/package.json +2 -1
- package/build/capabilities/capabilityManager.d.ts.map +0 -1
- package/build/capabilities/capabilityManager.js.map +0 -1
|
@@ -2,7 +2,7 @@ import { ClientStatus } from '../types/client.js';
|
|
|
2
2
|
import { TagQueryParser } from '../../utils/tagQueryParser.js';
|
|
3
3
|
import { TagQueryEvaluator } from '../../utils/tagQueryEvaluator.js';
|
|
4
4
|
import { normalizeTag } from '../../utils/sanitization.js';
|
|
5
|
-
import logger from '../../logger/logger.js';
|
|
5
|
+
import logger, { debugIf } from '../../logger/logger.js';
|
|
6
6
|
/**
|
|
7
7
|
* Unified filtering service that consolidates all filtering logic across the application.
|
|
8
8
|
* This service provides a single source of truth for filtering MCP server connections
|
|
@@ -18,13 +18,16 @@ export class FilteringService {
|
|
|
18
18
|
* @returns Filtered map of connections
|
|
19
19
|
*/
|
|
20
20
|
static getFilteredConnections(connections, config) {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
21
|
+
debugIf(() => ({
|
|
22
|
+
message: 'FilteringService: Filtering connections',
|
|
23
|
+
meta: {
|
|
24
|
+
totalConnections: connections.size,
|
|
25
|
+
filterMode: config.tagFilterMode,
|
|
26
|
+
tags: config.tags,
|
|
27
|
+
hasTagExpression: !!config.tagExpression,
|
|
28
|
+
hasTagQuery: !!config.tagQuery,
|
|
29
|
+
},
|
|
30
|
+
}));
|
|
28
31
|
// Only include connected clients in filtering
|
|
29
32
|
const connectedClients = new Map();
|
|
30
33
|
for (const [name, connection] of connections) {
|
|
@@ -32,20 +35,26 @@ export class FilteringService {
|
|
|
32
35
|
connectedClients.set(name, connection);
|
|
33
36
|
}
|
|
34
37
|
}
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
38
|
+
debugIf(() => ({
|
|
39
|
+
message: 'FilteringService: Connected clients',
|
|
40
|
+
meta: {
|
|
41
|
+
connectedCount: connectedClients.size,
|
|
42
|
+
connectedNames: Array.from(connectedClients.keys()),
|
|
43
|
+
},
|
|
44
|
+
}));
|
|
39
45
|
if (!config.tagFilterMode || config.tagFilterMode === 'none') {
|
|
40
|
-
|
|
46
|
+
debugIf('FilteringService: No filtering specified, returning all connected clients');
|
|
41
47
|
return connectedClients;
|
|
42
48
|
}
|
|
43
49
|
const filter = this.createFilter(config);
|
|
44
50
|
const filteredConnections = filter(connectedClients);
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
51
|
+
debugIf(() => ({
|
|
52
|
+
message: 'FilteringService: Filtering completed',
|
|
53
|
+
meta: {
|
|
54
|
+
filteredCount: filteredConnections.size,
|
|
55
|
+
filteredNames: Array.from(filteredConnections.keys()),
|
|
56
|
+
},
|
|
57
|
+
}));
|
|
49
58
|
return filteredConnections;
|
|
50
59
|
}
|
|
51
60
|
/**
|
|
@@ -78,9 +87,9 @@ export class FilteringService {
|
|
|
78
87
|
*/
|
|
79
88
|
static byTags(tags) {
|
|
80
89
|
return (connections) => {
|
|
81
|
-
|
|
90
|
+
debugIf(() => ({ message: `FilteringService.byTags: Filtering for tags: ${tags ? tags.join(', ') : 'none'}` }));
|
|
82
91
|
if (!tags || tags.length === 0) {
|
|
83
|
-
|
|
92
|
+
debugIf('FilteringService.byTags: No tags specified, returning all connections');
|
|
84
93
|
return connections;
|
|
85
94
|
}
|
|
86
95
|
// Normalize the filter tags for consistent comparison
|
|
@@ -90,13 +99,16 @@ export class FilteringService {
|
|
|
90
99
|
// Normalize client tags for comparison
|
|
91
100
|
const normalizedClientTags = clientTags.map((tag) => normalizeTag(tag));
|
|
92
101
|
const hasMatchingTags = normalizedClientTags.some((clientTag) => normalizedFilterTags.includes(clientTag));
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
102
|
+
debugIf(() => ({
|
|
103
|
+
message: `FilteringService.byTags: Connection ${name}`,
|
|
104
|
+
meta: {
|
|
105
|
+
clientTags,
|
|
106
|
+
normalizedClientTags,
|
|
107
|
+
requiredTags: tags,
|
|
108
|
+
normalizedRequiredTags: normalizedFilterTags,
|
|
109
|
+
hasMatchingTags,
|
|
110
|
+
},
|
|
111
|
+
}));
|
|
100
112
|
if (hasMatchingTags) {
|
|
101
113
|
filtered.set(name, connection);
|
|
102
114
|
}
|
|
@@ -112,15 +124,20 @@ export class FilteringService {
|
|
|
112
124
|
*/
|
|
113
125
|
static byTagExpression(expression) {
|
|
114
126
|
return (connections) => {
|
|
115
|
-
|
|
127
|
+
debugIf(() => ({
|
|
128
|
+
message: `FilteringService.byTagExpression: Filtering with expression: ${TagQueryParser.expressionToString(expression)}`,
|
|
129
|
+
}));
|
|
116
130
|
return Array.from(connections.entries()).reduce((filtered, [name, connection]) => {
|
|
117
131
|
const clientTags = connection.transport.tags || [];
|
|
118
132
|
const matches = TagQueryParser.evaluate(expression, clientTags);
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
133
|
+
debugIf(() => ({
|
|
134
|
+
message: `FilteringService.byTagExpression: Connection ${name}`,
|
|
135
|
+
meta: {
|
|
136
|
+
clientTags,
|
|
137
|
+
expression: TagQueryParser.expressionToString(expression),
|
|
138
|
+
matches,
|
|
139
|
+
},
|
|
140
|
+
}));
|
|
124
141
|
if (matches) {
|
|
125
142
|
filtered.set(name, connection);
|
|
126
143
|
}
|
|
@@ -136,7 +153,7 @@ export class FilteringService {
|
|
|
136
153
|
*/
|
|
137
154
|
static byTagQuery(query) {
|
|
138
155
|
return (connections) => {
|
|
139
|
-
|
|
156
|
+
debugIf(() => ({ message: 'FilteringService.byTagQuery: Filtering with tag query', meta: { query } }));
|
|
140
157
|
const filtered = new Map();
|
|
141
158
|
for (const [name, connection] of connections.entries()) {
|
|
142
159
|
if (connection.status !== ClientStatus.Connected) {
|
|
@@ -146,10 +163,13 @@ export class FilteringService {
|
|
|
146
163
|
try {
|
|
147
164
|
if (TagQueryEvaluator.evaluate(query, clientTags)) {
|
|
148
165
|
filtered.set(name, connection);
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
166
|
+
debugIf(() => ({
|
|
167
|
+
message: `FilteringService.byTagQuery: Connection ${name} matches query`,
|
|
168
|
+
meta: {
|
|
169
|
+
clientTags,
|
|
170
|
+
query,
|
|
171
|
+
},
|
|
172
|
+
}));
|
|
153
173
|
}
|
|
154
174
|
}
|
|
155
175
|
catch (error) {
|
|
@@ -172,16 +192,21 @@ export class FilteringService {
|
|
|
172
192
|
static byCapabilities(requiredCapabilities) {
|
|
173
193
|
return (connections) => {
|
|
174
194
|
const requiredCaps = Object.keys(requiredCapabilities);
|
|
175
|
-
|
|
195
|
+
debugIf(() => ({
|
|
196
|
+
message: `FilteringService.byCapabilities: Filtering for capabilities: ${requiredCaps.join(', ')}`,
|
|
197
|
+
}));
|
|
176
198
|
return Array.from(connections.entries()).reduce((filtered, [name, connection]) => {
|
|
177
199
|
const clientCaps = connection.capabilities ? Object.keys(connection.capabilities) : [];
|
|
178
200
|
const hasCapabilities = requiredCaps.every((cap) => connection.capabilities && cap in connection.capabilities);
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
201
|
+
debugIf(() => ({
|
|
202
|
+
message: `FilteringService.byCapabilities: Connection ${name}`,
|
|
203
|
+
meta: {
|
|
204
|
+
clientCapabilities: clientCaps,
|
|
205
|
+
requiredCapabilities: requiredCaps,
|
|
206
|
+
hasCapabilities,
|
|
207
|
+
clientCapabilitiesObject: connection.capabilities,
|
|
208
|
+
},
|
|
209
|
+
}));
|
|
185
210
|
if (hasCapabilities) {
|
|
186
211
|
filtered.set(name, connection);
|
|
187
212
|
}
|
|
@@ -198,23 +223,32 @@ export class FilteringService {
|
|
|
198
223
|
*/
|
|
199
224
|
static combineFilters(...filters) {
|
|
200
225
|
return (connections) => {
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
226
|
+
debugIf(() => ({
|
|
227
|
+
message: `FilteringService.combineFilters: Starting with ${connections.size} connections`,
|
|
228
|
+
meta: {
|
|
229
|
+
connectionNames: Array.from(connections.keys()),
|
|
230
|
+
filterCount: filters.length,
|
|
231
|
+
},
|
|
232
|
+
}));
|
|
205
233
|
const result = filters.reduce((filteredConnections, filter, index) => {
|
|
206
234
|
const beforeCount = filteredConnections.size;
|
|
207
235
|
const afterFiltering = filter(filteredConnections);
|
|
208
236
|
const afterCount = afterFiltering.size;
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
237
|
+
debugIf(() => ({
|
|
238
|
+
message: `FilteringService.combineFilters: Filter ${index} reduced connections from ${beforeCount} to ${afterCount}`,
|
|
239
|
+
meta: {
|
|
240
|
+
beforeNames: Array.from(filteredConnections.keys()),
|
|
241
|
+
afterNames: Array.from(afterFiltering.keys()),
|
|
242
|
+
},
|
|
243
|
+
}));
|
|
213
244
|
return afterFiltering;
|
|
214
245
|
}, connections);
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
246
|
+
debugIf(() => ({
|
|
247
|
+
message: `FilteringService.combineFilters: Final result has ${result.size} connections`,
|
|
248
|
+
meta: {
|
|
249
|
+
finalNames: Array.from(result.keys()),
|
|
250
|
+
},
|
|
251
|
+
}));
|
|
218
252
|
return result;
|
|
219
253
|
};
|
|
220
254
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"filteringService.js","sourceRoot":"","sources":["../../../src/core/filtering/filteringService.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAiB,MAAM,+BAA+B,CAAC;AAC9E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AAErE,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,MAAM,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"filteringService.js","sourceRoot":"","sources":["../../../src/core/filtering/filteringService.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructionAggregator.d.ts","sourceRoot":"","sources":["../../../src/core/instructions/instructionAggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"instructionAggregator.d.ts","sourceRoot":"","sources":["../../../src/core/instructions/instructionAggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAItC,OAAO,EAAE,mBAAmB,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AASjF;;GAEG;AACH,MAAM,WAAW,2BAA2B;IAC1C,sBAAsB,EAAE,MAAM,IAAI,CAAC;CACpC;AAED;;;;;;;;;;;;;;;;;;GAkBG;AACH,qBAAa,qBAAsB,SAAQ,YAAY;IACrD,OAAO,CAAC,kBAAkB,CAA6B;IACvD,OAAO,CAAC,aAAa,CAAkB;;IAUvC;;;;OAIG;IACI,eAAe,CAAC,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI;IAuBlF;;;OAGG;IACI,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI;IAU7C;;;;;;;OAOG;IACI,uBAAuB,CAAC,MAAM,EAAE,uBAAuB,EAAE,WAAW,EAAE,mBAAmB,GAAG,MAAM;IAyCzG;;;OAGG;IACI,cAAc,IAAI,MAAM;IAI/B;;;OAGG;IACI,cAAc,IAAI,MAAM,EAAE;IAIjC;;;;OAIG;IACI,eAAe,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO;IAInD;;;;OAIG;IACI,qBAAqB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAIpE;;OAEG;IACI,KAAK,IAAI,IAAI;IAUpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAoBxB;;OAEG;IACI,UAAU,IAAI,MAAM;IAM3B;;;;;;OAMG;IACH,OAAO,CAAC,cAAc;IAuCtB;;;;;OAKG;IACH,OAAO,CAAC,yBAAyB;IA+EjC;;;OAGG;IACI,OAAO,IAAI,IAAI;CAcvB"}
|
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import { EventEmitter } from 'events';
|
|
2
2
|
import Handlebars from 'handlebars';
|
|
3
|
-
import logger from '../../logger/logger.js';
|
|
3
|
+
import logger, { debugIf } from '../../logger/logger.js';
|
|
4
4
|
import { FilteringService } from '../filtering/filteringService.js';
|
|
5
5
|
import { DEFAULT_TEMPLATE_CONFIG, DEFAULT_INSTRUCTION_TEMPLATE, } from './templateTypes.js';
|
|
6
|
+
import { registerTemplateHelpers } from './templateHelpers.js';
|
|
6
7
|
/**
|
|
7
8
|
* Aggregates instructions from multiple MCP servers into a single instruction string.
|
|
8
9
|
* Provides both simple concatenation and filtered instructions with educational templates.
|
|
@@ -28,6 +29,8 @@ export class InstructionAggregator extends EventEmitter {
|
|
|
28
29
|
constructor() {
|
|
29
30
|
super();
|
|
30
31
|
this.setMaxListeners(50);
|
|
32
|
+
// Register custom Handlebars helpers for template processing
|
|
33
|
+
registerTemplateHelpers();
|
|
31
34
|
}
|
|
32
35
|
/**
|
|
33
36
|
* Set or update instructions for a specific server
|
|
@@ -39,15 +42,15 @@ export class InstructionAggregator extends EventEmitter {
|
|
|
39
42
|
const hasChanges = previousInstructions !== instructions;
|
|
40
43
|
if (instructions?.trim()) {
|
|
41
44
|
this.serverInstructions.set(serverName, instructions.trim());
|
|
42
|
-
|
|
45
|
+
debugIf(() => ({ message: `Updated instructions for server: ${serverName}`, meta: { serverName } }));
|
|
43
46
|
}
|
|
44
47
|
else {
|
|
45
48
|
this.serverInstructions.delete(serverName);
|
|
46
|
-
|
|
49
|
+
debugIf(() => ({ message: `Removed instructions for server: ${serverName}`, meta: { serverName } }));
|
|
47
50
|
}
|
|
48
51
|
if (!this.isInitialized) {
|
|
49
52
|
this.isInitialized = true;
|
|
50
|
-
|
|
53
|
+
debugIf('InstructionAggregator initialized');
|
|
51
54
|
}
|
|
52
55
|
if (hasChanges) {
|
|
53
56
|
logger.info(`Instructions changed. Total servers with instructions: ${this.serverInstructions.size}`);
|
|
@@ -75,12 +78,15 @@ export class InstructionAggregator extends EventEmitter {
|
|
|
75
78
|
* @returns Formatted instruction string with educational template or custom template
|
|
76
79
|
*/
|
|
77
80
|
getFilteredInstructions(config, connections) {
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
debugIf(() => ({
|
|
82
|
+
message: 'InstructionAggregator: Getting filtered instructions',
|
|
83
|
+
meta: {
|
|
84
|
+
filterMode: config.tagFilterMode,
|
|
85
|
+
totalConnections: connections.size,
|
|
86
|
+
totalInstructions: this.serverInstructions.size,
|
|
87
|
+
hasCustomTemplate: !!config.customTemplate,
|
|
88
|
+
},
|
|
89
|
+
}));
|
|
84
90
|
// Filter connections based on client configuration
|
|
85
91
|
const filteredConnections = FilteringService.getFilteredConnections(connections, config);
|
|
86
92
|
// Get filtering summary for logging
|
|
@@ -145,7 +151,7 @@ export class InstructionAggregator extends EventEmitter {
|
|
|
145
151
|
const hadInstructions = this.serverInstructions.size > 0;
|
|
146
152
|
this.serverInstructions.clear();
|
|
147
153
|
if (hadInstructions) {
|
|
148
|
-
|
|
154
|
+
debugIf('Cleared all server instructions');
|
|
149
155
|
this.emit('instructions-changed');
|
|
150
156
|
}
|
|
151
157
|
}
|
|
@@ -199,11 +205,14 @@ export class InstructionAggregator extends EventEmitter {
|
|
|
199
205
|
const variables = this.generateTemplateVariables(filteredConnections, config);
|
|
200
206
|
// Render template
|
|
201
207
|
const rendered = compiledTemplate(variables);
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
208
|
+
debugIf(() => ({
|
|
209
|
+
message: 'InstructionAggregator: Compiled and cached new template',
|
|
210
|
+
meta: {
|
|
211
|
+
templateLength: template.length,
|
|
212
|
+
variableCount: Object.keys(variables).length,
|
|
213
|
+
renderedLength: rendered.length,
|
|
214
|
+
},
|
|
215
|
+
}));
|
|
207
216
|
return rendered;
|
|
208
217
|
}
|
|
209
218
|
/**
|
|
@@ -214,26 +223,39 @@ export class InstructionAggregator extends EventEmitter {
|
|
|
214
223
|
*/
|
|
215
224
|
generateTemplateVariables(filteredConnections, config) {
|
|
216
225
|
// Get server data for both arrays and individual server objects
|
|
217
|
-
const availableServers = [];
|
|
218
226
|
const serverInstructionSections = [];
|
|
219
227
|
const servers = [];
|
|
220
228
|
// Sort filtered connections by name for consistent output
|
|
221
229
|
const sortedConnections = Array.from(filteredConnections.entries()).sort(([a], [b]) => a.localeCompare(b));
|
|
222
230
|
for (const [serverName, _connection] of sortedConnections) {
|
|
223
231
|
const serverInstructions = this.serverInstructions.get(serverName);
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
232
|
+
const instructions = serverInstructions?.trim() || '';
|
|
233
|
+
if (instructions) {
|
|
234
|
+
// Wrap instructions in XML-like tags
|
|
235
|
+
const wrappedInstructions = `<${serverName}>\n${instructions}\n</${serverName}>`;
|
|
236
|
+
serverInstructionSections.push(wrappedInstructions);
|
|
227
237
|
// Add individual server data for iteration
|
|
228
238
|
servers.push({
|
|
229
239
|
name: serverName,
|
|
230
|
-
instructions:
|
|
240
|
+
instructions: instructions,
|
|
231
241
|
hasInstructions: true,
|
|
232
242
|
});
|
|
233
243
|
}
|
|
244
|
+
else {
|
|
245
|
+
servers.push({
|
|
246
|
+
name: serverName,
|
|
247
|
+
instructions: '',
|
|
248
|
+
hasInstructions: false,
|
|
249
|
+
});
|
|
250
|
+
}
|
|
234
251
|
}
|
|
235
|
-
const
|
|
236
|
-
const
|
|
252
|
+
const connectedServerCount = filteredConnections.size;
|
|
253
|
+
const hasInstructionalServers = serverInstructionSections.length > 0;
|
|
254
|
+
const serverCount = serverInstructionSections.length;
|
|
255
|
+
const hasServers = serverInstructionSections.length > 0;
|
|
256
|
+
// Generate server lists (only servers with instructions)
|
|
257
|
+
const serverNames = servers.filter((server) => server.hasInstructions).map((server) => server.name);
|
|
258
|
+
const serverList = serverNames.join('\n');
|
|
237
259
|
// Merge configuration with defaults
|
|
238
260
|
const templateConfig = {
|
|
239
261
|
...DEFAULT_TEMPLATE_CONFIG,
|
|
@@ -243,13 +265,19 @@ export class InstructionAggregator extends EventEmitter {
|
|
|
243
265
|
};
|
|
244
266
|
return {
|
|
245
267
|
// Server state
|
|
268
|
+
connectedServerCount,
|
|
269
|
+
hasInstructionalServers,
|
|
246
270
|
serverCount,
|
|
271
|
+
instructionalServerCount: serverCount, // Alias for clarity
|
|
247
272
|
hasServers,
|
|
248
|
-
serverList
|
|
249
|
-
serverNames
|
|
273
|
+
serverList,
|
|
274
|
+
serverNames,
|
|
250
275
|
servers,
|
|
251
276
|
pluralServers: serverCount === 1 ? 'server' : 'servers',
|
|
252
277
|
isAre: serverCount === 1 ? 'is' : 'are',
|
|
278
|
+
// Grammar helpers for connected servers
|
|
279
|
+
connectedPluralServers: connectedServerCount === 1 ? 'server' : 'servers',
|
|
280
|
+
connectedIsAre: connectedServerCount === 1 ? 'is' : 'are',
|
|
253
281
|
// Content
|
|
254
282
|
instructions: serverInstructionSections.join('\n\n'),
|
|
255
283
|
filterContext: this.getFilterContext(config),
|
|
@@ -264,7 +292,7 @@ export class InstructionAggregator extends EventEmitter {
|
|
|
264
292
|
* Should be called when the aggregator is no longer needed
|
|
265
293
|
*/
|
|
266
294
|
cleanup() {
|
|
267
|
-
|
|
295
|
+
debugIf('InstructionAggregator: Starting cleanup');
|
|
268
296
|
// Clear all event listeners
|
|
269
297
|
this.removeAllListeners();
|
|
270
298
|
// Clear server instructions
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"instructionAggregator.js","sourceRoot":"","sources":["../../../src/core/instructions/instructionAggregator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtC,OAAO,UAAU,MAAM,YAAY,CAAC;AACpC,OAAO,MAAM,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"instructionAggregator.js","sourceRoot":"","sources":["../../../src/core/instructions/instructionAggregator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Register custom Handlebars helpers for template processing
|
|
3
|
+
* These helpers provide mathematical, comparison, and string operations
|
|
4
|
+
* that are commonly needed in instruction templates
|
|
5
|
+
*/
|
|
6
|
+
export declare function registerTemplateHelpers(): void;
|
|
7
|
+
//# sourceMappingURL=templateHelpers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateHelpers.d.ts","sourceRoot":"","sources":["../../../src/core/instructions/templateHelpers.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,uBAAuB,IAAI,IAAI,CA6H9C"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import Handlebars from 'handlebars';
|
|
2
|
+
/**
|
|
3
|
+
* Register custom Handlebars helpers for template processing
|
|
4
|
+
* These helpers provide mathematical, comparison, and string operations
|
|
5
|
+
* that are commonly needed in instruction templates
|
|
6
|
+
*/
|
|
7
|
+
export function registerTemplateHelpers() {
|
|
8
|
+
// Math helpers - handles chained operations like "a '/' b '*' 100"
|
|
9
|
+
Handlebars.registerHelper('math', function (...args) {
|
|
10
|
+
// Remove the last argument (options object)
|
|
11
|
+
const values = args.slice(0, -1);
|
|
12
|
+
if (values.length < 3) {
|
|
13
|
+
return 0;
|
|
14
|
+
}
|
|
15
|
+
let result = parseFloat(values[0]);
|
|
16
|
+
// Process operations in pairs (operator, value)
|
|
17
|
+
for (let i = 1; i < values.length; i += 2) {
|
|
18
|
+
const operator = values[i];
|
|
19
|
+
const value = parseFloat(values[i + 1]);
|
|
20
|
+
switch (operator) {
|
|
21
|
+
case '+':
|
|
22
|
+
result = result + value;
|
|
23
|
+
break;
|
|
24
|
+
case '-':
|
|
25
|
+
result = result - value;
|
|
26
|
+
break;
|
|
27
|
+
case '*':
|
|
28
|
+
result = result * value;
|
|
29
|
+
break;
|
|
30
|
+
case '/':
|
|
31
|
+
result = result / value;
|
|
32
|
+
break;
|
|
33
|
+
case '%':
|
|
34
|
+
result = result % value;
|
|
35
|
+
break;
|
|
36
|
+
case '**':
|
|
37
|
+
result = result ** value;
|
|
38
|
+
break;
|
|
39
|
+
default:
|
|
40
|
+
return 0;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
// Round to nearest integer for percentage calculations
|
|
44
|
+
return Math.round(result);
|
|
45
|
+
});
|
|
46
|
+
// Comparison helpers
|
|
47
|
+
Handlebars.registerHelper('eq', function (a, b) {
|
|
48
|
+
return a === b;
|
|
49
|
+
});
|
|
50
|
+
Handlebars.registerHelper('ne', function (a, b) {
|
|
51
|
+
return a !== b;
|
|
52
|
+
});
|
|
53
|
+
Handlebars.registerHelper('gt', function (a, b) {
|
|
54
|
+
return a > b;
|
|
55
|
+
});
|
|
56
|
+
Handlebars.registerHelper('lt', function (a, b) {
|
|
57
|
+
return a < b;
|
|
58
|
+
});
|
|
59
|
+
// Logical helpers
|
|
60
|
+
Handlebars.registerHelper('and', function (...args) {
|
|
61
|
+
// Remove the last argument (options object)
|
|
62
|
+
const values = args.slice(0, -1);
|
|
63
|
+
return values.every((value) => !!value);
|
|
64
|
+
});
|
|
65
|
+
Handlebars.registerHelper('or', function (...args) {
|
|
66
|
+
// Remove the last argument (options object)
|
|
67
|
+
const values = args.slice(0, -1);
|
|
68
|
+
return values.some((value) => !!value);
|
|
69
|
+
});
|
|
70
|
+
// String helpers
|
|
71
|
+
Handlebars.registerHelper('contains', function (str, substring) {
|
|
72
|
+
if (typeof str !== 'string' || typeof substring !== 'string') {
|
|
73
|
+
return false;
|
|
74
|
+
}
|
|
75
|
+
return str.includes(substring);
|
|
76
|
+
});
|
|
77
|
+
Handlebars.registerHelper('startsWith', function (str, prefix) {
|
|
78
|
+
if (typeof str !== 'string' || typeof prefix !== 'string') {
|
|
79
|
+
return false;
|
|
80
|
+
}
|
|
81
|
+
return str.startsWith(prefix);
|
|
82
|
+
});
|
|
83
|
+
Handlebars.registerHelper('endsWith', function (str, suffix) {
|
|
84
|
+
if (typeof str !== 'string' || typeof suffix !== 'string') {
|
|
85
|
+
return false;
|
|
86
|
+
}
|
|
87
|
+
return str.endsWith(suffix);
|
|
88
|
+
});
|
|
89
|
+
// Math operation helpers
|
|
90
|
+
Handlebars.registerHelper('subtract', function (a, b) {
|
|
91
|
+
return (a || 0) - (b || 0);
|
|
92
|
+
});
|
|
93
|
+
Handlebars.registerHelper('div', function (a, b) {
|
|
94
|
+
if (b === 0)
|
|
95
|
+
return 0;
|
|
96
|
+
return (a || 0) / (b || 1);
|
|
97
|
+
});
|
|
98
|
+
// String length helper
|
|
99
|
+
Handlebars.registerHelper('len', function (str) {
|
|
100
|
+
if (typeof str !== 'string') {
|
|
101
|
+
return 0;
|
|
102
|
+
}
|
|
103
|
+
return str.length;
|
|
104
|
+
});
|
|
105
|
+
// String substring helper
|
|
106
|
+
Handlebars.registerHelper('substring', function (str, start, end) {
|
|
107
|
+
if (typeof str !== 'string') {
|
|
108
|
+
return '';
|
|
109
|
+
}
|
|
110
|
+
if (end !== undefined) {
|
|
111
|
+
return str.substring(start, end);
|
|
112
|
+
}
|
|
113
|
+
return str.substring(start);
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=templateHelpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"templateHelpers.js","sourceRoot":"","sources":["../../../src/core/instructions/templateHelpers.ts"],"names":[],"mappings":"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"}
|