sub-agents-mcp 0.14.0 → 0.14.2
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 +67 -544
- package/dist/agents/AgentManager.d.ts +16 -0
- package/dist/agents/AgentManager.d.ts.map +1 -1
- package/dist/agents/AgentManager.js +68 -43
- package/dist/agents/AgentManager.js.map +1 -1
- package/dist/agents/AgentName.d.ts +15 -0
- package/dist/agents/AgentName.d.ts.map +1 -0
- package/dist/agents/AgentName.js +40 -0
- package/dist/agents/AgentName.js.map +1 -0
- package/dist/config/ServerConfig.d.ts.map +1 -1
- package/dist/config/ServerConfig.js +101 -70
- package/dist/config/ServerConfig.js.map +1 -1
- package/dist/execution/AgentExecutor.d.ts +27 -3
- package/dist/execution/AgentExecutor.d.ts.map +1 -1
- package/dist/execution/AgentExecutor.js +328 -197
- package/dist/execution/AgentExecutor.js.map +1 -1
- package/dist/execution/StreamProcessor.d.ts.map +1 -1
- package/dist/execution/StreamProcessor.js +17 -16
- package/dist/execution/StreamProcessor.js.map +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/dist/resources/AgentResources.d.ts.map +1 -1
- package/dist/resources/AgentResources.js +2 -8
- package/dist/resources/AgentResources.js.map +1 -1
- package/dist/server/McpServer.d.ts.map +1 -1
- package/dist/server/McpServer.js +40 -21
- package/dist/server/McpServer.js.map +1 -1
- package/dist/session/SessionManager.d.ts +11 -1
- package/dist/session/SessionManager.d.ts.map +1 -1
- package/dist/session/SessionManager.js +118 -28
- package/dist/session/SessionManager.js.map +1 -1
- package/dist/tools/RunAgentTool.d.ts +32 -9
- package/dist/tools/RunAgentTool.d.ts.map +1 -1
- package/dist/tools/RunAgentTool.js +281 -190
- package/dist/tools/RunAgentTool.js.map +1 -1
- package/dist/types/ExecutionParams.d.ts +0 -1
- package/dist/types/ExecutionParams.d.ts.map +1 -1
- package/dist/types/SessionData.d.ts +6 -1
- package/dist/types/SessionData.d.ts.map +1 -1
- package/dist/utils/ErrorHandler.d.ts +14 -2
- package/dist/utils/ErrorHandler.d.ts.map +1 -1
- package/dist/utils/ErrorHandler.js +40 -9
- package/dist/utils/ErrorHandler.js.map +1 -1
- package/dist/utils/Logger.d.ts.map +1 -1
- package/dist/utils/Logger.js +3 -2
- package/dist/utils/Logger.js.map +1 -1
- package/package.json +10 -14
|
@@ -1,6 +1,104 @@
|
|
|
1
1
|
import { mkdirSync } from 'node:fs';
|
|
2
2
|
import * as fs from 'node:fs/promises';
|
|
3
3
|
import * as path from 'node:path';
|
|
4
|
+
import { toErrorMessage } from '../utils/ErrorHandler.js';
|
|
5
|
+
function isRecord(value) {
|
|
6
|
+
return typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
7
|
+
}
|
|
8
|
+
function malformed(field) {
|
|
9
|
+
return new Error(`Session file contains a malformed "${field}" field`);
|
|
10
|
+
}
|
|
11
|
+
function readString(source, field) {
|
|
12
|
+
const value = source[field];
|
|
13
|
+
if (typeof value !== 'string') {
|
|
14
|
+
throw malformed(field);
|
|
15
|
+
}
|
|
16
|
+
return value;
|
|
17
|
+
}
|
|
18
|
+
function readOptionalString(source, field) {
|
|
19
|
+
const value = source[field];
|
|
20
|
+
if (value === undefined) {
|
|
21
|
+
return undefined;
|
|
22
|
+
}
|
|
23
|
+
if (typeof value !== 'string') {
|
|
24
|
+
throw malformed(field);
|
|
25
|
+
}
|
|
26
|
+
return value;
|
|
27
|
+
}
|
|
28
|
+
function readNumber(source, field) {
|
|
29
|
+
const value = source[field];
|
|
30
|
+
if (typeof value !== 'number' || Number.isNaN(value)) {
|
|
31
|
+
throw malformed(field);
|
|
32
|
+
}
|
|
33
|
+
return value;
|
|
34
|
+
}
|
|
35
|
+
function readDate(source, field) {
|
|
36
|
+
const value = source[field];
|
|
37
|
+
if (typeof value !== 'string' && typeof value !== 'number') {
|
|
38
|
+
throw malformed(field);
|
|
39
|
+
}
|
|
40
|
+
const date = new Date(value);
|
|
41
|
+
if (Number.isNaN(date.getTime())) {
|
|
42
|
+
throw malformed(field);
|
|
43
|
+
}
|
|
44
|
+
return date;
|
|
45
|
+
}
|
|
46
|
+
function readRecord(source, field) {
|
|
47
|
+
const value = source[field];
|
|
48
|
+
if (!isRecord(value)) {
|
|
49
|
+
throw malformed(field);
|
|
50
|
+
}
|
|
51
|
+
return value;
|
|
52
|
+
}
|
|
53
|
+
function parseSessionEntry(value) {
|
|
54
|
+
if (!isRecord(value)) {
|
|
55
|
+
throw malformed('history entry');
|
|
56
|
+
}
|
|
57
|
+
const request = readRecord(value, 'request');
|
|
58
|
+
const response = readRecord(value, 'response');
|
|
59
|
+
const cwd = readOptionalString(request, 'cwd');
|
|
60
|
+
return {
|
|
61
|
+
...value,
|
|
62
|
+
timestamp: readDate(value, 'timestamp'),
|
|
63
|
+
request: {
|
|
64
|
+
...request,
|
|
65
|
+
agent: readString(request, 'agent'),
|
|
66
|
+
prompt: readString(request, 'prompt'),
|
|
67
|
+
...(cwd !== undefined && { cwd }),
|
|
68
|
+
},
|
|
69
|
+
response: {
|
|
70
|
+
...response,
|
|
71
|
+
stdout: readString(response, 'stdout'),
|
|
72
|
+
stderr: readString(response, 'stderr'),
|
|
73
|
+
exitCode: readNumber(response, 'exitCode'),
|
|
74
|
+
executionTime: readNumber(response, 'executionTime'),
|
|
75
|
+
},
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Parses a persisted session file. Session files are plain JSON on disk, so the
|
|
80
|
+
* shape is validated and timestamps are revived rather than trusted as-is.
|
|
81
|
+
* Throws when the content does not describe a session; callers treat that as a
|
|
82
|
+
* cache miss.
|
|
83
|
+
*/
|
|
84
|
+
function parseSessionData(fileContent) {
|
|
85
|
+
const parsed = JSON.parse(fileContent);
|
|
86
|
+
if (!isRecord(parsed)) {
|
|
87
|
+
throw new Error('Session file does not contain session data');
|
|
88
|
+
}
|
|
89
|
+
const history = parsed['history'];
|
|
90
|
+
if (!Array.isArray(history)) {
|
|
91
|
+
throw malformed('history');
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
...parsed,
|
|
95
|
+
sessionId: readString(parsed, 'sessionId'),
|
|
96
|
+
agentType: readString(parsed, 'agentType'),
|
|
97
|
+
createdAt: readDate(parsed, 'createdAt'),
|
|
98
|
+
lastUpdatedAt: readDate(parsed, 'lastUpdatedAt'),
|
|
99
|
+
history: history.map(parseSessionEntry),
|
|
100
|
+
};
|
|
101
|
+
}
|
|
4
102
|
export class SessionManager {
|
|
5
103
|
config;
|
|
6
104
|
constructor(config) {
|
|
@@ -12,9 +110,11 @@ export class SessionManager {
|
|
|
12
110
|
mkdirSync(this.config.sessionDir, { recursive: true });
|
|
13
111
|
}
|
|
14
112
|
catch (error) {
|
|
15
|
-
const errorMessage =
|
|
113
|
+
const errorMessage = toErrorMessage(error);
|
|
16
114
|
console.error(`Failed to create session directory at ${this.config.sessionDir}:`, errorMessage);
|
|
17
|
-
throw new Error(`Session directory initialization failed: ${errorMessage}
|
|
115
|
+
throw new Error(`Session directory initialization failed: ${errorMessage}`, {
|
|
116
|
+
cause: error,
|
|
117
|
+
});
|
|
18
118
|
}
|
|
19
119
|
}
|
|
20
120
|
validateSessionId(sessionId) {
|
|
@@ -38,6 +138,11 @@ export class SessionManager {
|
|
|
38
138
|
}
|
|
39
139
|
return filePath;
|
|
40
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* Persists one exchange. A failure is reported back rather than thrown, so the
|
|
143
|
+
* caller can keep the agent's result while telling the user the history was
|
|
144
|
+
* not stored.
|
|
145
|
+
*/
|
|
41
146
|
async saveSession(sessionId, request, response) {
|
|
42
147
|
try {
|
|
43
148
|
this.validateSessionId(sessionId);
|
|
@@ -50,9 +155,11 @@ export class SessionManager {
|
|
|
50
155
|
const filePath = this.buildFilePath(sessionId, request.agent);
|
|
51
156
|
const jsonContent = JSON.stringify(sessionData, null, 2);
|
|
52
157
|
await fs.writeFile(filePath, jsonContent, { mode: 0o600 });
|
|
158
|
+
return { saved: true };
|
|
53
159
|
}
|
|
54
160
|
catch (error) {
|
|
55
161
|
this.logSaveError(sessionId, request.agent, error);
|
|
162
|
+
return { saved: false, reason: toErrorMessage(error) };
|
|
56
163
|
}
|
|
57
164
|
}
|
|
58
165
|
async buildSessionData(sessionId, agentType, sessionEntry) {
|
|
@@ -73,7 +180,7 @@ export class SessionManager {
|
|
|
73
180
|
};
|
|
74
181
|
}
|
|
75
182
|
logSaveError(sessionId, agentType, error) {
|
|
76
|
-
const errorMessage =
|
|
183
|
+
const errorMessage = toErrorMessage(error);
|
|
77
184
|
console.error('Failed to save session:', {
|
|
78
185
|
sessionId,
|
|
79
186
|
agentType,
|
|
@@ -91,16 +198,7 @@ export class SessionManager {
|
|
|
91
198
|
return null;
|
|
92
199
|
}
|
|
93
200
|
const fileContent = await fs.readFile(filePath, 'utf-8');
|
|
94
|
-
|
|
95
|
-
return {
|
|
96
|
-
...sessionData,
|
|
97
|
-
createdAt: new Date(sessionData.createdAt),
|
|
98
|
-
lastUpdatedAt: new Date(sessionData.lastUpdatedAt),
|
|
99
|
-
history: sessionData.history.map((entry) => ({
|
|
100
|
-
...entry,
|
|
101
|
-
timestamp: new Date(entry.timestamp),
|
|
102
|
-
})),
|
|
103
|
-
};
|
|
201
|
+
return parseSessionData(fileContent);
|
|
104
202
|
}
|
|
105
203
|
catch (error) {
|
|
106
204
|
this.logLoadError(sessionId, error);
|
|
@@ -117,23 +215,14 @@ export class SessionManager {
|
|
|
117
215
|
return null;
|
|
118
216
|
}
|
|
119
217
|
const fileContent = await fs.readFile(filePath, 'utf-8');
|
|
120
|
-
|
|
121
|
-
return {
|
|
122
|
-
...sessionData,
|
|
123
|
-
createdAt: new Date(sessionData.createdAt),
|
|
124
|
-
lastUpdatedAt: new Date(sessionData.lastUpdatedAt),
|
|
125
|
-
history: sessionData.history.map((entry) => ({
|
|
126
|
-
...entry,
|
|
127
|
-
timestamp: new Date(entry.timestamp),
|
|
128
|
-
})),
|
|
129
|
-
};
|
|
218
|
+
return parseSessionData(fileContent);
|
|
130
219
|
}
|
|
131
220
|
catch {
|
|
132
221
|
return null;
|
|
133
222
|
}
|
|
134
223
|
}
|
|
135
224
|
logLoadError(sessionId, error) {
|
|
136
|
-
const errorMessage =
|
|
225
|
+
const errorMessage = toErrorMessage(error);
|
|
137
226
|
console.error('Failed to load session:', {
|
|
138
227
|
sessionId,
|
|
139
228
|
error: errorMessage,
|
|
@@ -160,7 +249,7 @@ export class SessionManager {
|
|
|
160
249
|
deletedFiles.push(file);
|
|
161
250
|
}
|
|
162
251
|
catch (deleteError) {
|
|
163
|
-
const errorMessage =
|
|
252
|
+
const errorMessage = toErrorMessage(deleteError);
|
|
164
253
|
console.error(`Failed to delete old session file: ${file}`, {
|
|
165
254
|
file,
|
|
166
255
|
error: errorMessage,
|
|
@@ -169,7 +258,7 @@ export class SessionManager {
|
|
|
169
258
|
}
|
|
170
259
|
}
|
|
171
260
|
catch (statError) {
|
|
172
|
-
const errorMessage =
|
|
261
|
+
const errorMessage = toErrorMessage(statError);
|
|
173
262
|
console.error(`Failed to stat session file: ${file}`, {
|
|
174
263
|
file,
|
|
175
264
|
error: errorMessage,
|
|
@@ -177,14 +266,15 @@ export class SessionManager {
|
|
|
177
266
|
}
|
|
178
267
|
}
|
|
179
268
|
if (deletedCount > 0) {
|
|
180
|
-
|
|
269
|
+
// stdout carries the MCP protocol stream, so every diagnostic goes to stderr.
|
|
270
|
+
console.error('Cleaned up old session files:', {
|
|
181
271
|
deletedCount,
|
|
182
272
|
deletedFiles,
|
|
183
273
|
});
|
|
184
274
|
}
|
|
185
275
|
}
|
|
186
276
|
catch (error) {
|
|
187
|
-
const errorMessage =
|
|
277
|
+
const errorMessage = toErrorMessage(error);
|
|
188
278
|
console.error('Failed to cleanup old sessions:', {
|
|
189
279
|
error: errorMessage,
|
|
190
280
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../src/session/SessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;
|
|
1
|
+
{"version":3,"file":"SessionManager.js","sourceRoot":"","sources":["../../src/session/SessionManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,KAAK,EAAE,MAAM,kBAAkB,CAAA;AACtC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAA;AAEjC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AASzD,SAAS,QAAQ,CAAC,KAAc;IAC9B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;AAC7E,CAAC;AAED,SAAS,SAAS,CAAC,KAAa;IAC9B,OAAO,IAAI,KAAK,CAAC,sCAAsC,KAAK,SAAS,CAAC,CAAA;AACxE,CAAC;AAED,SAAS,UAAU,CAAC,MAA+B,EAAE,KAAa;IAChE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,SAAS,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,kBAAkB,CAAC,MAA+B,EAAE,KAAa;IACxE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,SAAS,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,UAAU,CAAC,MAA+B,EAAE,KAAa;IAChE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;QACrD,MAAM,SAAS,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,QAAQ,CAAC,MAA+B,EAAE,KAAa;IAC9D,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QAC3D,MAAM,SAAS,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IACD,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,CAAA;IAC5B,IAAI,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,EAAE,CAAC;QACjC,MAAM,SAAS,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,UAAU,CAAC,MAA+B,EAAE,KAAa;IAChE,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IAC3B,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,SAAS,CAAC,KAAK,CAAC,CAAA;IACxB,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,SAAS,CAAC,eAAe,CAAC,CAAA;IAClC,CAAC;IAED,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;IAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,EAAE,UAAU,CAAC,CAAA;IAC9C,MAAM,GAAG,GAAG,kBAAkB,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IAE9C,OAAO;QACL,GAAG,KAAK;QACR,SAAS,EAAE,QAAQ,CAAC,KAAK,EAAE,WAAW,CAAC;QACvC,OAAO,EAAE;YACP,GAAG,OAAO;YACV,KAAK,EAAE,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC;YACnC,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;YACrC,GAAG,CAAC,GAAG,KAAK,SAAS,IAAI,EAAE,GAAG,EAAE,CAAC;SAClC;QACD,QAAQ,EAAE;YACR,GAAG,QAAQ;YACX,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC;YACtC,MAAM,EAAE,UAAU,CAAC,QAAQ,EAAE,QAAQ,CAAC;YACtC,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,CAAC;YAC1C,aAAa,EAAE,UAAU,CAAC,QAAQ,EAAE,eAAe,CAAC;SACrD;KACF,CAAA;AACH,CAAC;AAED;;;;;GAKG;AACH,SAAS,gBAAgB,CAAC,WAAmB;IAC3C,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAA;IAC/C,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;IAC/D,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,CAAA;IACjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,MAAM,SAAS,CAAC,SAAS,CAAC,CAAA;IAC5B,CAAC;IAED,OAAO;QACL,GAAG,MAAM;QACT,SAAS,EAAE,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC;QAC1C,SAAS,EAAE,UAAU,CAAC,MAAM,EAAE,WAAW,CAAC;QAC1C,SAAS,EAAE,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC;QACxC,aAAa,EAAE,QAAQ,CAAC,MAAM,EAAE,eAAe,CAAC;QAChD,OAAO,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;KACxC,CAAA;AACH,CAAC;AAED,MAAM,OAAO,cAAc;IACR,MAAM,CAAe;IAEtC,YAAY,MAAqB;QAC/B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,0BAA0B,EAAE,CAAA;IACnC,CAAC;IAEO,0BAA0B;QAChC,IAAI,CAAC;YACH,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACxD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;YAC1C,OAAO,CAAC,KAAK,CACX,yCAAyC,IAAI,CAAC,MAAM,CAAC,UAAU,GAAG,EAClE,YAAY,CACb,CAAA;YACD,MAAM,IAAI,KAAK,CAAC,4CAA4C,YAAY,EAAE,EAAE;gBAC1E,KAAK,EAAE,KAAK;aACb,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAEM,iBAAiB,CAAC,SAAiB;QACxC,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,gDAAgD,CAAC,CAAA;QACnE,CAAC;QAED,MAAM,YAAY,GAAG,kBAAkB,CAAA;QACvC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YAClC,MAAM,IAAI,KAAK,CACb,wBAAwB,SAAS,2GAA2G,CAC7I,CAAA;QACH,CAAC;IACH,CAAC;IAEM,aAAa,CAAC,SAAiB,EAAE,SAAiB;QACvD,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;QACjC,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,SAAS,OAAO,CAAA;QACjD,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAA;QAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,YAAY,CAAC,CAAA;QAChE,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAA;QAC/C,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;QAEnE,IAAI,CAAC,cAAc,CAAC,UAAU,CAAC,oBAAoB,CAAC,EAAE,CAAC;YACrD,MAAM,IAAI,KAAK,CACb,oFAAoF,oBAAoB,WAAW,cAAc,GAAG,CACrI,CAAA;QACH,CAAC;QAED,OAAO,QAAQ,CAAA;IACjB,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,WAAW,CACtB,SAAiB,EACjB,OAAgC,EAChC,QAAkC;QAElC,IAAI,CAAC;YACH,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;YACjC,MAAM,YAAY,GAAiB;gBACjC,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,OAAO;gBACP,QAAQ;aACT,CAAA;YAED,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,YAAY,CAAC,CAAA;YACvF,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,CAAA;YAC7D,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,CAAA;YACxD,MAAM,EAAE,CAAC,SAAS,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAA;YAC1D,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;QACxB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;YAClD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,cAAc,CAAC,KAAK,CAAC,EAAE,CAAA;QACxD,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,gBAAgB,CAC5B,SAAiB,EACjB,SAAiB,EACjB,YAA0B;QAE1B,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,mBAAmB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;QAE5E,IAAI,eAAe,EAAE,CAAC;YACpB,OAAO;gBACL,GAAG,eAAe;gBAClB,OAAO,EAAE,CAAC,GAAG,eAAe,CAAC,OAAO,EAAE,YAAY,CAAC;gBACnD,aAAa,EAAE,IAAI,IAAI,EAAE;aAC1B,CAAA;QACH,CAAC;QAED,OAAO;YACL,SAAS;YACT,SAAS;YACT,OAAO,EAAE,CAAC,YAAY,CAAC;YACvB,SAAS,EAAE,IAAI,IAAI,EAAE;YACrB,aAAa,EAAE,IAAI,IAAI,EAAE;SAC1B,CAAA;IACH,CAAC;IAEO,YAAY,CAAC,SAAiB,EAAE,SAAiB,EAAE,KAAc;QACvE,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;QAC1C,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE;YACvC,SAAS;YACT,SAAS;YACT,KAAK,EAAE,YAAY;SACpB,CAAC,CAAA;IACJ,CAAC;IAEM,KAAK,CAAC,WAAW,CAAC,SAAiB,EAAE,SAAiB;QAC3D,IAAI,CAAC;YACH,IAAI,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAA;YACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YACzD,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAA;YACb,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YACxD,OAAO,gBAAgB,CAAC,WAAW,CAAC,CAAA;QACtC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAA;YACnC,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,mBAAmB,CAC/B,SAAiB,EACjB,SAAiB;QAEjB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,SAAS,EAAE,SAAS,CAAC,CAAA;YACzD,IAAI,CAAC;gBACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;YAC3B,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,IAAI,CAAA;YACb,CAAC;YACD,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;YACxD,OAAO,gBAAgB,CAAC,WAAW,CAAC,CAAA;QACtC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IAEO,YAAY,CAAC,SAAiB,EAAE,KAAc;QACpD,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;QAC1C,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE;YACvC,SAAS;YACT,KAAK,EAAE,YAAY;SACpB,CAAC,CAAA;IACJ,CAAC;IAEM,KAAK,CAAC,kBAAkB;QAC7B,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;YACtD,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAA;YACnE,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,WAAW,CAAA;YAE3C,IAAI,YAAY,GAAG,CAAC,CAAA;YACpB,MAAM,YAAY,GAAa,EAAE,CAAA;YAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;oBAC5B,SAAQ;gBACV,CAAC;gBAED,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAA;gBAExD,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;oBACrC,IAAI,KAAK,CAAC,OAAO,GAAG,UAAU,EAAE,CAAC;wBAC/B,IAAI,CAAC;4BACH,MAAM,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAA;4BACzB,YAAY,EAAE,CAAA;4BACd,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;wBACzB,CAAC;wBAAC,OAAO,WAAW,EAAE,CAAC;4BACrB,MAAM,YAAY,GAAG,cAAc,CAAC,WAAW,CAAC,CAAA;4BAChD,OAAO,CAAC,KAAK,CAAC,sCAAsC,IAAI,EAAE,EAAE;gCAC1D,IAAI;gCACJ,KAAK,EAAE,YAAY;6BACpB,CAAC,CAAA;wBACJ,CAAC;oBACH,CAAC;gBACH,CAAC;gBAAC,OAAO,SAAS,EAAE,CAAC;oBACnB,MAAM,YAAY,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;oBAC9C,OAAO,CAAC,KAAK,CAAC,gCAAgC,IAAI,EAAE,EAAE;wBACpD,IAAI;wBACJ,KAAK,EAAE,YAAY;qBACpB,CAAC,CAAA;gBACJ,CAAC;YACH,CAAC;YAED,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;gBACrB,8EAA8E;gBAC9E,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE;oBAC7C,YAAY;oBACZ,YAAY;iBACb,CAAC,CAAA;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;YAC1C,OAAO,CAAC,KAAK,CAAC,iCAAiC,EAAE;gBAC/C,KAAK,EAAE,YAAY;aACpB,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;CACF"}
|
|
@@ -10,7 +10,7 @@ interface McpToolResponse {
|
|
|
10
10
|
[x: string]: unknown;
|
|
11
11
|
content: McpTextContent[];
|
|
12
12
|
isError?: boolean;
|
|
13
|
-
structuredContent?: unknown
|
|
13
|
+
structuredContent?: Record<string, unknown>;
|
|
14
14
|
_meta?: {
|
|
15
15
|
session_id: string;
|
|
16
16
|
};
|
|
@@ -32,13 +32,6 @@ interface RunAgentInputSchema {
|
|
|
32
32
|
type: 'string';
|
|
33
33
|
description: string;
|
|
34
34
|
};
|
|
35
|
-
extra_args: {
|
|
36
|
-
type: 'array';
|
|
37
|
-
items: {
|
|
38
|
-
type: 'string';
|
|
39
|
-
};
|
|
40
|
-
description: string;
|
|
41
|
-
};
|
|
42
35
|
session_id: {
|
|
43
36
|
type: 'string';
|
|
44
37
|
description: string;
|
|
@@ -56,10 +49,40 @@ export declare class RunAgentTool {
|
|
|
56
49
|
private executionStats;
|
|
57
50
|
readonly inputSchema: RunAgentInputSchema;
|
|
58
51
|
constructor(agentExecutor?: AgentExecutor | undefined, agentManager?: AgentManager | undefined, sessionManager?: SessionManager | undefined);
|
|
59
|
-
|
|
52
|
+
/** Prunes expired session files without blocking the current request. */
|
|
53
|
+
private startBackgroundSessionCleanup;
|
|
54
|
+
/**
|
|
55
|
+
* Prefixes the request with the stored conversation history when a session is
|
|
56
|
+
* active. History retrieval is best-effort: failures fall back to the raw prompt.
|
|
57
|
+
*/
|
|
58
|
+
private buildPromptWithHistory;
|
|
59
|
+
/**
|
|
60
|
+
* Appends the exchange to the session store. Never throws; returns whether the
|
|
61
|
+
* history was actually persisted so the caller can say so in its response.
|
|
62
|
+
*/
|
|
63
|
+
private persistSession;
|
|
64
|
+
/** Runs the agent and records the exchange, returning the formatted MCP response. */
|
|
65
|
+
private runAgent;
|
|
66
|
+
/**
|
|
67
|
+
* Without a session store nothing is persisted, so no session_id is issued —
|
|
68
|
+
* echoing one back would invite the caller to reuse an id that continues nothing.
|
|
69
|
+
*/
|
|
70
|
+
private resolveSessionId;
|
|
71
|
+
execute(params: unknown, signal?: AbortSignal): Promise<McpToolResponse>;
|
|
60
72
|
private validateParams;
|
|
61
73
|
private isRecord;
|
|
62
74
|
private isStringField;
|
|
75
|
+
/**
|
|
76
|
+
* Derives the single execution outcome that both `status` and `isError` are
|
|
77
|
+
* built from. Keeping one derivation prevents the two fields from disagreeing.
|
|
78
|
+
*/
|
|
79
|
+
private resolveOutcome;
|
|
80
|
+
/**
|
|
81
|
+
* Builds the text shown to the caller. On a non-success outcome the failure
|
|
82
|
+
* reason on stderr must survive even when the agent also produced stdout,
|
|
83
|
+
* otherwise the caller sees partial output and no explanation.
|
|
84
|
+
*/
|
|
85
|
+
private buildResultText;
|
|
63
86
|
private extractAgentContent;
|
|
64
87
|
private isAgentError;
|
|
65
88
|
private isPartialResult;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RunAgentTool.d.ts","sourceRoot":"","sources":["../../src/tools/RunAgentTool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;
|
|
1
|
+
{"version":3,"file":"RunAgentTool.d.ts","sourceRoot":"","sources":["../../src/tools/RunAgentTool.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAA;AAE7D,OAAO,KAAK,EAAwB,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAExF,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAWlE,UAAU,cAAc;IACtB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACpB,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;CACb;AAED,UAAU,eAAe;IACvB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACpB,OAAO,EAAE,cAAc,EAAE,CAAA;IACzB,OAAO,CAAC,EAAE,OAAO,CAAA;IACjB,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IAC3C,KAAK,CAAC,EAAE;QACN,UAAU,EAAE,MAAM,CAAA;KACnB,CAAA;CACF;AAgBD,UAAU,mBAAmB;IAC3B,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACpB,IAAI,EAAE,QAAQ,CAAA;IACd,UAAU,EAAE;QACV,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;QACnB,KAAK,EAAE;YACL,IAAI,EAAE,QAAQ,CAAA;YACd,WAAW,EAAE,MAAM,CAAA;SACpB,CAAA;QACD,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ,CAAA;YACd,WAAW,EAAE,MAAM,CAAA;SACpB,CAAA;QACD,GAAG,EAAE;YACH,IAAI,EAAE,QAAQ,CAAA;YACd,WAAW,EAAE,MAAM,CAAA;SACpB,CAAA;QACD,UAAU,EAAE;YACV,IAAI,EAAE,QAAQ,CAAA;YACd,WAAW,EAAE,MAAM,CAAA;SACpB,CAAA;KACF,CAAA;IACD,QAAQ,EAAE,MAAM,EAAE,CAAA;CACnB;AAqFD,qBAAa,YAAY;IAmCrB,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,YAAY,CAAC;IACrB,OAAO,CAAC,cAAc,CAAC;IApCzB,SAAgB,IAAI,eAAc;IAClC,SAAgB,WAAW,0YAC6W;IACxY,OAAO,CAAC,MAAM,CAAQ;IACtB,OAAO,CAAC,cAAc,CACX;IAEX,SAAgB,WAAW,EAAE,mBAAmB,CAwB/C;gBAGS,aAAa,CAAC,EAAE,aAAa,YAAA,EAC7B,YAAY,CAAC,EAAE,YAAY,YAAA,EAC3B,cAAc,CAAC,EAAE,cAAc,YAAA;IAOzC,yEAAyE;IACzE,OAAO,CAAC,6BAA6B;IAgBrC;;;OAGG;YACW,sBAAsB;IAkCpC;;;OAGG;YACW,cAAc;IAiD5B,qFAAqF;YACvE,QAAQ;IA2CtB;;;OAGG;IACH,OAAO,CAAC,gBAAgB;IAalB,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,WAAW,GAAG,OAAO,CAAC,eAAe,CAAC;IAsF9E,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,QAAQ;IAIhB,OAAO,CAAC,aAAa;IAIrB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAyBtB;;;;OAIG;IACH,OAAO,CAAC,eAAe;IAiCvB,OAAO,CAAC,mBAAmB;IAsB3B,OAAO,CAAC,YAAY;IAuBpB,OAAO,CAAC,eAAe;IAIvB,OAAO,CAAC,uBAAuB;IAoD/B,OAAO,CAAC,mBAAmB;IAyB3B,OAAO,CAAC,iBAAiB;IAIzB,OAAO,CAAC,oBAAoB;IAgB5B,iBAAiB,IAAI,GAAG,CAAC,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,IAAI,CAAA;KAAE,CAAC;YAIxE,sBAAsB;CAerC"}
|