@inspectr/mcplab 1.7.0 → 1.9.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/README.md +14 -1
- package/dist/app/assets/index-BLsLqeX3.js +249 -0
- package/dist/app/assets/index-D80zV1LL.css +1 -0
- package/dist/app/icons/claude-color.svg +1 -0
- package/dist/app/icons/openai.svg +1 -0
- package/dist/app/index.html +2 -2
- package/dist/app-server/app-context.d.ts +129 -75
- package/dist/app-server/assistant-common.d.ts +2 -0
- package/dist/app-server/assistant-common.d.ts.map +1 -1
- package/dist/app-server/assistant-common.js +2 -1
- package/dist/app-server/assistant-common.js.map +1 -1
- package/dist/app-server/config-store.d.ts +2 -0
- package/dist/app-server/config-store.d.ts.map +1 -1
- package/dist/app-server/config-store.js +10 -5
- package/dist/app-server/config-store.js.map +1 -1
- package/dist/app-server/oauth-debugger-domain.d.ts +202 -174
- package/dist/app-server/oauth-debugger-domain.d.ts.map +1 -1
- package/dist/app-server/oauth-debugger-domain.js +53 -4
- package/dist/app-server/oauth-debugger-domain.js.map +1 -1
- package/dist/app-server/oauth-runtime-domain.d.ts +53 -42
- package/dist/app-server/oauth-runtime-domain.d.ts.map +1 -1
- package/dist/app-server/oauth-runtime-domain.js +1 -3
- package/dist/app-server/oauth-runtime-domain.js.map +1 -1
- package/dist/app-server/oauth-runtime-routes.d.ts +13 -11
- package/dist/app-server/oauth-runtime-routes.d.ts.map +1 -1
- package/dist/app-server/oauth-runtime-routes.js +27 -1
- package/dist/app-server/oauth-runtime-routes.js.map +1 -1
- package/dist/app-server/oauth-session-manager.d.ts +57 -0
- package/dist/app-server/oauth-session-manager.d.ts.map +1 -0
- package/dist/app-server/oauth-session-manager.js +338 -0
- package/dist/app-server/oauth-session-manager.js.map +1 -0
- package/dist/app-server/result-assistant-domain.d.ts +5 -3
- package/dist/app-server/result-assistant-domain.d.ts.map +1 -1
- package/dist/app-server/result-assistant-domain.js +38 -44
- package/dist/app-server/result-assistant-domain.js.map +1 -1
- package/dist/app-server/result-assistant-tools.d.ts +11 -0
- package/dist/app-server/result-assistant-tools.d.ts.map +1 -0
- package/dist/app-server/result-assistant-tools.js +27 -0
- package/dist/app-server/result-assistant-tools.js.map +1 -0
- package/dist/app-server/result-assistant.d.ts.map +1 -1
- package/dist/app-server/result-assistant.js +24 -27
- package/dist/app-server/result-assistant.js.map +1 -1
- package/dist/app-server/router.d.ts.map +1 -1
- package/dist/app-server/router.js +36 -8
- package/dist/app-server/router.js.map +1 -1
- package/dist/app-server/runs-routes.d.ts +54 -30
- package/dist/app-server/runs-routes.d.ts.map +1 -1
- package/dist/app-server/runs-routes.js +207 -87
- package/dist/app-server/runs-routes.js.map +1 -1
- package/dist/app-server/scenario-assistant-domain.d.ts +19 -3
- package/dist/app-server/scenario-assistant-domain.d.ts.map +1 -1
- package/dist/app-server/scenario-assistant-domain.js +272 -6
- package/dist/app-server/scenario-assistant-domain.js.map +1 -1
- package/dist/app-server/scenario-assistant.d.ts +2 -0
- package/dist/app-server/scenario-assistant.d.ts.map +1 -1
- package/dist/app-server/scenario-assistant.js +60 -3
- package/dist/app-server/scenario-assistant.js.map +1 -1
- package/dist/app-server/tool-analysis-domain.d.ts +179 -165
- package/dist/app-server/tool-analysis-domain.d.ts.map +1 -1
- package/dist/app-server/tool-analysis-domain.js +21 -9
- package/dist/app-server/tool-analysis-domain.js.map +1 -1
- package/dist/app-server/tool-analysis.d.ts +21 -12
- package/dist/app-server/tool-analysis.d.ts.map +1 -1
- package/dist/app-server/tool-analysis.js +23 -20
- package/dist/app-server/tool-analysis.js.map +1 -1
- package/dist/app-server/types.d.ts +7 -0
- package/dist/app-server/types.d.ts.map +1 -1
- package/dist/cli.js +186 -103
- package/dist/cli.js.map +1 -1
- package/dist/eval-config-files.d.ts +13 -0
- package/dist/eval-config-files.d.ts.map +1 -0
- package/dist/eval-config-files.js +89 -0
- package/dist/eval-config-files.js.map +1 -0
- package/dist/run-interactive.d.ts.map +1 -1
- package/dist/run-interactive.js +14 -10
- package/dist/run-interactive.js.map +1 -1
- package/package.json +4 -4
- package/dist/app/assets/index-CYs1291A.css +0 -1
- package/dist/app/assets/index-Fe4npghI.js +0 -249
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
import { readLibraries } from './libraries-store.js';
|
|
2
|
+
import { createOAuthRuntimeSession, oauthRuntimeSessionView } from './oauth-runtime-domain.js';
|
|
3
|
+
const DEFAULT_REFRESH_SKEW_MS = 60_000;
|
|
4
|
+
export class OAuthAuthorizationRequiredError extends Error {
|
|
5
|
+
details;
|
|
6
|
+
constructor(details) {
|
|
7
|
+
const first = details[0]?.message || 'OAuth authorization required';
|
|
8
|
+
super(first);
|
|
9
|
+
this.name = 'OAuthAuthorizationRequiredError';
|
|
10
|
+
this.details = details;
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
function parseExpiresAt(tokenResponse) {
|
|
14
|
+
if (!tokenResponse)
|
|
15
|
+
return undefined;
|
|
16
|
+
const raw = tokenResponse.expires_in;
|
|
17
|
+
if (typeof raw === 'number' && Number.isFinite(raw) && raw > 0) {
|
|
18
|
+
return Date.now() + raw * 1000;
|
|
19
|
+
}
|
|
20
|
+
if (typeof raw === 'string') {
|
|
21
|
+
const parsed = Number(raw);
|
|
22
|
+
if (Number.isFinite(parsed) && parsed > 0) {
|
|
23
|
+
return Date.now() + parsed * 1000;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
function bearer(token) {
|
|
29
|
+
return { authorization: `Bearer ${token}` };
|
|
30
|
+
}
|
|
31
|
+
function tokenExpiryView(state) {
|
|
32
|
+
if (!state.expiresAt)
|
|
33
|
+
return {};
|
|
34
|
+
return {
|
|
35
|
+
tokenExpiresAt: new Date(state.expiresAt).toISOString(),
|
|
36
|
+
tokenExpiresInSeconds: Math.max(0, Math.floor((state.expiresAt - Date.now()) / 1000))
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
export class OAuthSessionManager {
|
|
40
|
+
params;
|
|
41
|
+
states = new Map();
|
|
42
|
+
constructor(params) {
|
|
43
|
+
this.params = params;
|
|
44
|
+
}
|
|
45
|
+
setLibrariesDir(next) {
|
|
46
|
+
this.params.librariesDir = next;
|
|
47
|
+
}
|
|
48
|
+
get refreshSkewMs() {
|
|
49
|
+
return this.params.refreshSkewMs ?? DEFAULT_REFRESH_SKEW_MS;
|
|
50
|
+
}
|
|
51
|
+
getServerConfig(serverName) {
|
|
52
|
+
const libraries = readLibraries(this.params.librariesDir);
|
|
53
|
+
return libraries.servers[serverName];
|
|
54
|
+
}
|
|
55
|
+
getState(serverName) {
|
|
56
|
+
const existing = this.states.get(serverName);
|
|
57
|
+
if (existing)
|
|
58
|
+
return existing;
|
|
59
|
+
const created = { serverName };
|
|
60
|
+
this.states.set(serverName, created);
|
|
61
|
+
return created;
|
|
62
|
+
}
|
|
63
|
+
updateStateFromTokenPayload(state, tokenResponse) {
|
|
64
|
+
const accessToken = typeof tokenResponse.access_token === 'string' ? tokenResponse.access_token : undefined;
|
|
65
|
+
if (!accessToken)
|
|
66
|
+
return;
|
|
67
|
+
state.accessToken = accessToken;
|
|
68
|
+
if (typeof tokenResponse.refresh_token === 'string' && tokenResponse.refresh_token.trim()) {
|
|
69
|
+
state.refreshToken = tokenResponse.refresh_token;
|
|
70
|
+
}
|
|
71
|
+
if (typeof tokenResponse.token_type === 'string' && tokenResponse.token_type.trim()) {
|
|
72
|
+
state.tokenType = tokenResponse.token_type;
|
|
73
|
+
}
|
|
74
|
+
if (typeof tokenResponse.scope === 'string') {
|
|
75
|
+
state.scope = tokenResponse.scope;
|
|
76
|
+
}
|
|
77
|
+
const expiresAt = parseExpiresAt(tokenResponse);
|
|
78
|
+
if (expiresAt) {
|
|
79
|
+
state.expiresAt = expiresAt;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
delete state.expiresAt;
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
syncStateFromRuntimeSession(state) {
|
|
86
|
+
const runtimeSessionId = state.runtimeSessionId;
|
|
87
|
+
if (!runtimeSessionId)
|
|
88
|
+
return;
|
|
89
|
+
const runtimeSession = this.params.runtimeSessions.get(runtimeSessionId);
|
|
90
|
+
if (!runtimeSession || runtimeSession.serverName !== state.serverName) {
|
|
91
|
+
delete state.runtimeSessionId;
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
const debuggerSession = this.params.oauthDebuggerSessions.get(runtimeSession.oauthDebuggerSessionId);
|
|
95
|
+
if (!debuggerSession)
|
|
96
|
+
return;
|
|
97
|
+
const tokenResponse = debuggerSession.context.tokenResponse;
|
|
98
|
+
if (tokenResponse &&
|
|
99
|
+
typeof tokenResponse === 'object' &&
|
|
100
|
+
(!state.accessToken ||
|
|
101
|
+
state.runtimeTokenSyncedFromSessionId !== runtimeSessionId ||
|
|
102
|
+
(debuggerSession.updatedAt ?? 0) > (state.runtimeTokenSyncedFromDebuggerUpdatedAt ?? 0))) {
|
|
103
|
+
this.updateStateFromTokenPayload(state, tokenResponse);
|
|
104
|
+
state.runtimeTokenSyncedFromSessionId = runtimeSessionId;
|
|
105
|
+
state.runtimeTokenSyncedFromDebuggerUpdatedAt = debuggerSession.updatedAt;
|
|
106
|
+
}
|
|
107
|
+
const tokenEndpoint = debuggerSession.context.authServerMetadata?.token_endpoint;
|
|
108
|
+
if (typeof tokenEndpoint === 'string' && tokenEndpoint.trim()) {
|
|
109
|
+
state.tokenEndpoint = tokenEndpoint;
|
|
110
|
+
}
|
|
111
|
+
const resolvedClient = debuggerSession.context.resolvedClient;
|
|
112
|
+
if (resolvedClient?.clientId) {
|
|
113
|
+
state.clientId = resolvedClient.clientId;
|
|
114
|
+
state.clientSecret = resolvedClient.clientSecret;
|
|
115
|
+
const authMethod = resolvedClient.tokenEndpointAuthMethod;
|
|
116
|
+
if (authMethod === 'client_secret_post' || authMethod === 'client_secret_basic') {
|
|
117
|
+
state.tokenEndpointAuthMethod = authMethod;
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
tokenExpiredOrNearExpiry(state) {
|
|
122
|
+
if (!state.accessToken)
|
|
123
|
+
return true;
|
|
124
|
+
if (!state.expiresAt)
|
|
125
|
+
return false;
|
|
126
|
+
return state.expiresAt <= Date.now() + this.refreshSkewMs;
|
|
127
|
+
}
|
|
128
|
+
async refreshIfNeeded(serverName) {
|
|
129
|
+
const state = this.getState(serverName);
|
|
130
|
+
this.syncStateFromRuntimeSession(state);
|
|
131
|
+
if (!this.tokenExpiredOrNearExpiry(state))
|
|
132
|
+
return true;
|
|
133
|
+
if (!state.accessToken)
|
|
134
|
+
return false;
|
|
135
|
+
if (!state.refreshToken)
|
|
136
|
+
return false;
|
|
137
|
+
if (!state.tokenEndpoint || !state.clientId)
|
|
138
|
+
return false;
|
|
139
|
+
if (state.refreshPromise)
|
|
140
|
+
return state.refreshPromise;
|
|
141
|
+
state.refreshPromise = (async () => {
|
|
142
|
+
try {
|
|
143
|
+
const form = new URLSearchParams({
|
|
144
|
+
grant_type: 'refresh_token',
|
|
145
|
+
refresh_token: state.refreshToken,
|
|
146
|
+
client_id: state.clientId
|
|
147
|
+
});
|
|
148
|
+
const headers = {
|
|
149
|
+
accept: 'application/json',
|
|
150
|
+
'content-type': 'application/x-www-form-urlencoded'
|
|
151
|
+
};
|
|
152
|
+
if (state.clientSecret) {
|
|
153
|
+
const method = state.tokenEndpointAuthMethod ?? 'client_secret_basic';
|
|
154
|
+
if (method === 'client_secret_post') {
|
|
155
|
+
form.set('client_secret', state.clientSecret);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
headers.authorization = `Basic ${Buffer.from(`${state.clientId}:${state.clientSecret}`, 'utf8').toString('base64')}`;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
const response = await fetch(state.tokenEndpoint, {
|
|
162
|
+
method: 'POST',
|
|
163
|
+
headers,
|
|
164
|
+
body: form.toString()
|
|
165
|
+
});
|
|
166
|
+
const text = await response.text();
|
|
167
|
+
let json;
|
|
168
|
+
try {
|
|
169
|
+
json = text ? JSON.parse(text) : undefined;
|
|
170
|
+
}
|
|
171
|
+
catch {
|
|
172
|
+
json = undefined;
|
|
173
|
+
}
|
|
174
|
+
if (!response.ok || !json)
|
|
175
|
+
return false;
|
|
176
|
+
this.updateStateFromTokenPayload(state, json);
|
|
177
|
+
return Boolean(state.accessToken);
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
return false;
|
|
181
|
+
}
|
|
182
|
+
finally {
|
|
183
|
+
state.refreshPromise = undefined;
|
|
184
|
+
}
|
|
185
|
+
})();
|
|
186
|
+
return state.refreshPromise;
|
|
187
|
+
}
|
|
188
|
+
getExistingRuntimeView(state) {
|
|
189
|
+
if (!state.runtimeSessionId)
|
|
190
|
+
return undefined;
|
|
191
|
+
const runtimeSession = this.params.runtimeSessions.get(state.runtimeSessionId);
|
|
192
|
+
if (!runtimeSession || runtimeSession.serverName !== state.serverName) {
|
|
193
|
+
delete state.runtimeSessionId;
|
|
194
|
+
return undefined;
|
|
195
|
+
}
|
|
196
|
+
return oauthRuntimeSessionView({
|
|
197
|
+
runtimeSession,
|
|
198
|
+
oauthDebuggerSessions: this.params.oauthDebuggerSessions
|
|
199
|
+
});
|
|
200
|
+
}
|
|
201
|
+
async ensureServerAuthorized(serverName, hostHeader) {
|
|
202
|
+
const serverConfig = this.getServerConfig(serverName);
|
|
203
|
+
if (!serverConfig) {
|
|
204
|
+
return {
|
|
205
|
+
serverName,
|
|
206
|
+
status: 'auth_required',
|
|
207
|
+
debugState: 'auth_required',
|
|
208
|
+
message: `Server '${serverName}' not found in libraries`
|
|
209
|
+
};
|
|
210
|
+
}
|
|
211
|
+
if (serverConfig.auth?.type !== 'oauth_authorization_code') {
|
|
212
|
+
return { serverName, status: 'not_oauth', debugState: 'not_oauth' };
|
|
213
|
+
}
|
|
214
|
+
const state = this.getState(serverName);
|
|
215
|
+
if (state.ensurePromise)
|
|
216
|
+
return state.ensurePromise;
|
|
217
|
+
state.ensurePromise = (async () => {
|
|
218
|
+
this.syncStateFromRuntimeSession(state);
|
|
219
|
+
if (state.accessToken) {
|
|
220
|
+
const wasNearExpiry = this.tokenExpiredOrNearExpiry(state);
|
|
221
|
+
const refreshed = wasNearExpiry ? await this.refreshIfNeeded(serverName) : true;
|
|
222
|
+
if (refreshed && state.accessToken && !this.tokenExpiredOrNearExpiry(state)) {
|
|
223
|
+
return {
|
|
224
|
+
serverName,
|
|
225
|
+
status: 'ready',
|
|
226
|
+
debugState: wasNearExpiry ? 'refreshed' : 'reused',
|
|
227
|
+
...tokenExpiryView(state)
|
|
228
|
+
};
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
const existing = this.getExistingRuntimeView(state);
|
|
232
|
+
if (existing && existing.status !== 'error' && existing.status !== 'stopped') {
|
|
233
|
+
if (existing.status === 'completed' && existing.hasAccessToken) {
|
|
234
|
+
this.syncStateFromRuntimeSession(state);
|
|
235
|
+
if (state.accessToken) {
|
|
236
|
+
const wasNearExpiry = this.tokenExpiredOrNearExpiry(state);
|
|
237
|
+
const refreshed = wasNearExpiry ? await this.refreshIfNeeded(serverName) : true;
|
|
238
|
+
if (refreshed && state.accessToken) {
|
|
239
|
+
return {
|
|
240
|
+
serverName,
|
|
241
|
+
status: 'ready',
|
|
242
|
+
debugState: wasNearExpiry ? 'refreshed' : 'reused',
|
|
243
|
+
...tokenExpiryView(state)
|
|
244
|
+
};
|
|
245
|
+
}
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
return {
|
|
249
|
+
serverName,
|
|
250
|
+
status: 'auth_required',
|
|
251
|
+
debugState: 'auth_required',
|
|
252
|
+
runtimeSessionId: existing.id,
|
|
253
|
+
authorizationUrl: existing.authorizationUrl,
|
|
254
|
+
authorizeLaunchUrl: existing.authorizeLaunchUrl,
|
|
255
|
+
message: `OAuth login required for server '${serverName}'.`
|
|
256
|
+
};
|
|
257
|
+
}
|
|
258
|
+
const created = await createOAuthRuntimeSession({
|
|
259
|
+
serverName,
|
|
260
|
+
hostHeader,
|
|
261
|
+
librariesDir: this.params.librariesDir,
|
|
262
|
+
runtimeSessions: this.params.runtimeSessions,
|
|
263
|
+
oauthDebuggerSessions: this.params.oauthDebuggerSessions
|
|
264
|
+
});
|
|
265
|
+
state.runtimeSessionId = created.id;
|
|
266
|
+
return {
|
|
267
|
+
serverName,
|
|
268
|
+
status: 'auth_required',
|
|
269
|
+
debugState: 'auth_required',
|
|
270
|
+
runtimeSessionId: created.id,
|
|
271
|
+
authorizationUrl: created.authorizationUrl,
|
|
272
|
+
authorizeLaunchUrl: created.authorizeLaunchUrl,
|
|
273
|
+
message: `OAuth login required for server '${serverName}'.`
|
|
274
|
+
};
|
|
275
|
+
})();
|
|
276
|
+
try {
|
|
277
|
+
return await state.ensurePromise;
|
|
278
|
+
}
|
|
279
|
+
finally {
|
|
280
|
+
state.ensurePromise = undefined;
|
|
281
|
+
}
|
|
282
|
+
}
|
|
283
|
+
async ensureServersAuthorized(serverNames, hostHeader) {
|
|
284
|
+
const uniqueNames = Array.from(new Set(serverNames.filter(Boolean)));
|
|
285
|
+
const servers = [];
|
|
286
|
+
for (const serverName of uniqueNames) {
|
|
287
|
+
servers.push(await this.ensureServerAuthorized(serverName, hostHeader));
|
|
288
|
+
}
|
|
289
|
+
return {
|
|
290
|
+
servers,
|
|
291
|
+
allReady: servers.every((server) => server.status === 'ready' || server.status === 'not_oauth')
|
|
292
|
+
};
|
|
293
|
+
}
|
|
294
|
+
async getAuthHeadersForServers(serverNames, hostHeader) {
|
|
295
|
+
const uniqueNames = Array.from(new Set(serverNames.filter(Boolean)));
|
|
296
|
+
const headers = {};
|
|
297
|
+
const authRequired = [];
|
|
298
|
+
for (const serverName of uniqueNames) {
|
|
299
|
+
const result = await this.ensureServerAuthorized(serverName, hostHeader);
|
|
300
|
+
if (result.status === 'not_oauth')
|
|
301
|
+
continue;
|
|
302
|
+
if (result.status === 'auth_required') {
|
|
303
|
+
authRequired.push({
|
|
304
|
+
serverName,
|
|
305
|
+
runtimeSessionId: result.runtimeSessionId,
|
|
306
|
+
authorizationUrl: result.authorizationUrl,
|
|
307
|
+
authorizeLaunchUrl: result.authorizeLaunchUrl,
|
|
308
|
+
message: result.message || `OAuth login required for server '${serverName}'.`
|
|
309
|
+
});
|
|
310
|
+
continue;
|
|
311
|
+
}
|
|
312
|
+
const state = this.getState(serverName);
|
|
313
|
+
this.syncStateFromRuntimeSession(state);
|
|
314
|
+
if (!state.accessToken) {
|
|
315
|
+
authRequired.push({
|
|
316
|
+
serverName,
|
|
317
|
+
runtimeSessionId: state.runtimeSessionId,
|
|
318
|
+
message: `OAuth login required for server '${serverName}'.`
|
|
319
|
+
});
|
|
320
|
+
continue;
|
|
321
|
+
}
|
|
322
|
+
headers[serverName] = bearer(state.accessToken);
|
|
323
|
+
}
|
|
324
|
+
if (authRequired.length > 0) {
|
|
325
|
+
throw new OAuthAuthorizationRequiredError(authRequired);
|
|
326
|
+
}
|
|
327
|
+
return headers;
|
|
328
|
+
}
|
|
329
|
+
noteRuntimeSession(serverName, runtimeSessionId) {
|
|
330
|
+
const state = this.getState(serverName);
|
|
331
|
+
if (state.runtimeSessionId !== runtimeSessionId) {
|
|
332
|
+
delete state.runtimeTokenSyncedFromSessionId;
|
|
333
|
+
delete state.runtimeTokenSyncedFromDebuggerUpdatedAt;
|
|
334
|
+
}
|
|
335
|
+
state.runtimeSessionId = runtimeSessionId;
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
//# sourceMappingURL=oauth-session-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"oauth-session-manager.js","sourceRoot":"","sources":["../../src/app-server/oauth-session-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,12 +23,13 @@ interface ResultAssistantChatMessage {
|
|
|
23
23
|
}
|
|
24
24
|
export interface ResultAssistantSession {
|
|
25
25
|
id: string;
|
|
26
|
-
|
|
26
|
+
scope: 'run' | 'all_runs';
|
|
27
|
+
runId: string | null;
|
|
27
28
|
createdAt: number;
|
|
28
29
|
lastTouchedAt: number;
|
|
29
30
|
selectedAssistantAgentName: string;
|
|
30
31
|
agentConfig: AgentConfig;
|
|
31
|
-
resultSummary: ResultsJson;
|
|
32
|
+
resultSummary: ResultsJson | null;
|
|
32
33
|
referenceReportsForRun: Array<{
|
|
33
34
|
path: string;
|
|
34
35
|
relativePath: string;
|
|
@@ -57,7 +58,8 @@ export declare function cleanupResultAssistantSessions(
|
|
|
57
58
|
export declare function touchResultAssistantSession(session: ResultAssistantSession): void;
|
|
58
59
|
export declare function resultAssistantSessionView(session: ResultAssistantSession): {
|
|
59
60
|
id: string;
|
|
60
|
-
|
|
61
|
+
scope: 'run' | 'all_runs';
|
|
62
|
+
runId: string | null;
|
|
61
63
|
createdAt: string;
|
|
62
64
|
updatedAt: string;
|
|
63
65
|
selectedAssistantAgentName: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-assistant-domain.d.ts","sourceRoot":"","sources":["../../src/app-server/result-assistant-domain.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAC3F,OAAO,EAAiB,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"result-assistant-domain.d.ts","sourceRoot":"","sources":["../../src/app-server/result-assistant-domain.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,26 +1,10 @@
|
|
|
1
1
|
import { chatWithAgent } from '@inspectr/mcplab-core';
|
|
2
|
-
import { cleanupSessionsByTtl, makeAssistantToolPublicName, newAssistantEntityId, touchSession, truncateJson } from './assistant-common.js';
|
|
2
|
+
import { cleanupSessionsByTtl, makeAssistantToolPublicName, formatAssistantToolName, newAssistantEntityId, touchSession, truncateJson } from './assistant-common.js';
|
|
3
|
+
import { isResultAssistantAllowedTool } from './result-assistant-tools.js';
|
|
3
4
|
const RESULT_ASSISTANT_SESSION_TTL_MS = 30 * 60 * 1000;
|
|
4
5
|
const RESULT_ASSISTANT_TOOL_RESULT_PREVIEW_CHARS = 4000;
|
|
5
6
|
const RESULT_ASSISTANT_MAX_PENDING_TOOL_CALLS = 3;
|
|
6
7
|
const RESULT_ASSISTANT_MCP_SERVER_NAME = 'mcplab';
|
|
7
|
-
const RESULT_ASSISTANT_ALLOWED_TOOLS = new Set([
|
|
8
|
-
'mcplab_write_markdown_report',
|
|
9
|
-
'mcplab_list_markdown_reports',
|
|
10
|
-
'mcplab_read_markdown_report',
|
|
11
|
-
'mcplab_list_runs',
|
|
12
|
-
'mcplab_read_run_artifact',
|
|
13
|
-
'mcplab_grep_run_artifact',
|
|
14
|
-
'mcplab_trace_stats',
|
|
15
|
-
'mcplab_trace_get_final_answers',
|
|
16
|
-
'mcplab_trace_get_conversation',
|
|
17
|
-
'mcplab_trace_list_events',
|
|
18
|
-
'mcplab_trace_search',
|
|
19
|
-
'mcplab_list_tool_analysis_results',
|
|
20
|
-
'mcplab_read_tool_analysis_result',
|
|
21
|
-
'mcplab_list_library',
|
|
22
|
-
'mcplab_get_library_item'
|
|
23
|
-
]);
|
|
24
8
|
export function cleanupResultAssistantSessions(sessions, now = Date.now()) {
|
|
25
9
|
cleanupSessionsByTtl(sessions, RESULT_ASSISTANT_SESSION_TTL_MS, now);
|
|
26
10
|
}
|
|
@@ -30,6 +14,7 @@ export function touchResultAssistantSession(session) {
|
|
|
30
14
|
export function resultAssistantSessionView(session) {
|
|
31
15
|
return {
|
|
32
16
|
id: session.id,
|
|
17
|
+
scope: session.scope,
|
|
33
18
|
runId: session.runId,
|
|
34
19
|
createdAt: new Date(session.createdAt).toISOString(),
|
|
35
20
|
updatedAt: new Date(session.lastTouchedAt).toISOString(),
|
|
@@ -37,7 +22,7 @@ export function resultAssistantSessionView(session) {
|
|
|
37
22
|
model: session.agentConfig.model,
|
|
38
23
|
provider: session.agentConfig.provider,
|
|
39
24
|
messages: session.chatMessages,
|
|
40
|
-
pendingToolCalls: session.pendingToolCalls
|
|
25
|
+
pendingToolCalls: session.pendingToolCalls
|
|
41
26
|
};
|
|
42
27
|
}
|
|
43
28
|
export async function preloadResultAssistantTools(session, mcpServerUrl) {
|
|
@@ -50,7 +35,7 @@ export async function preloadResultAssistantTools(session, mcpServerUrl) {
|
|
|
50
35
|
const discovered = await session.mcp.listTools(RESULT_ASSISTANT_MCP_SERVER_NAME);
|
|
51
36
|
const usedNames = new Set();
|
|
52
37
|
for (const tool of discovered) {
|
|
53
|
-
if (!
|
|
38
|
+
if (!isResultAssistantAllowedTool(tool.name))
|
|
54
39
|
continue;
|
|
55
40
|
const publicName = makeAssistantToolPublicName(RESULT_ASSISTANT_MCP_SERVER_NAME, tool.name, usedNames);
|
|
56
41
|
session.toolPublicMap.set(publicName, {
|
|
@@ -85,11 +70,12 @@ export async function continueResultAssistantTurn(session) {
|
|
|
85
70
|
status: 'pending',
|
|
86
71
|
createdAt: new Date().toISOString()
|
|
87
72
|
};
|
|
73
|
+
const toolRequestText = `I need to call '${formatAssistantToolName(pending.publicToolName)}' to help with this request.`;
|
|
88
74
|
session.pendingToolCalls.push(pending);
|
|
89
75
|
session.chatMessages.push({
|
|
90
76
|
id: newAssistantEntityId('msg'),
|
|
91
77
|
role: 'assistant',
|
|
92
|
-
text:
|
|
78
|
+
text: toolRequestText,
|
|
93
79
|
createdAt: new Date().toISOString(),
|
|
94
80
|
pendingToolCallId: pending.id,
|
|
95
81
|
toolRequestServer: pending.server,
|
|
@@ -98,13 +84,13 @@ export async function continueResultAssistantTurn(session) {
|
|
|
98
84
|
});
|
|
99
85
|
session.llmMessages.push({
|
|
100
86
|
role: 'assistant',
|
|
101
|
-
content:
|
|
87
|
+
content: toolRequestText,
|
|
102
88
|
tool_calls: [{ id: pending.id, name: pending.publicToolName, arguments: pending.arguments }]
|
|
103
89
|
});
|
|
104
90
|
touchResultAssistantSession(session);
|
|
105
91
|
return {
|
|
106
92
|
session: resultAssistantSessionView(session),
|
|
107
|
-
response: { type: 'tool_call_request', text:
|
|
93
|
+
response: { type: 'tool_call_request', text: toolRequestText, pendingToolCall: pending }
|
|
108
94
|
};
|
|
109
95
|
}
|
|
110
96
|
session.chatMessages.push({
|
|
@@ -146,16 +132,16 @@ export function summarizeToolResultForResultAssistant(result) {
|
|
|
146
132
|
function resultAssistantSystemPrompt(session) {
|
|
147
133
|
if (session.systemPromptCache)
|
|
148
134
|
return session.systemPromptCache;
|
|
149
|
-
const totalScenarioCount = session.resultSummary.scenarios.length;
|
|
150
135
|
const scenarioLimit = 30;
|
|
136
|
+
const totalScenarioCount = session.resultSummary?.scenarios.length ?? 0;
|
|
151
137
|
const omittedScenarioCount = Math.max(0, totalScenarioCount - scenarioLimit);
|
|
152
|
-
const scenarioSummaries = session.resultSummary
|
|
138
|
+
const scenarioSummaries = session.resultSummary?.scenarios.slice(0, scenarioLimit).map((sc) => ({
|
|
153
139
|
scenario_id: sc.scenario_id,
|
|
154
140
|
agent: sc.agent,
|
|
155
141
|
pass_rate: sc.pass_rate,
|
|
156
142
|
run_count: sc.runs.length,
|
|
157
143
|
sample_failures: sc.runs.flatMap((r) => r.failures).slice(0, 5)
|
|
158
|
-
}));
|
|
144
|
+
})) ?? [];
|
|
159
145
|
const toolLines = session.tools.map((tool) => {
|
|
160
146
|
const mapping = session.toolPublicMap.get(tool.name);
|
|
161
147
|
const schemaText = tool.inputSchema ? truncateJson(tool.inputSchema, 500) : '{}';
|
|
@@ -166,25 +152,32 @@ function resultAssistantSystemPrompt(session) {
|
|
|
166
152
|
'Help the user understand MCP evaluation run results, failures, tool behavior, and snapshot drift.',
|
|
167
153
|
'Be concise and practical.',
|
|
168
154
|
'You may call MCPLab MCP tools for grounded follow-up actions (e.g. write a markdown report) when useful, but only when it improves the answer.',
|
|
155
|
+
'Tool selection policy: prefer search_* tools first for retrieval; fall back to list_* tools when the query is unknown, broad, or full coverage is required.',
|
|
169
156
|
'If you need a tool, request exactly one tool call and wait for approval.',
|
|
170
157
|
'Respond in plain text. If you need to call a tool, use the available tools directly.',
|
|
171
|
-
|
|
172
|
-
?
|
|
173
|
-
:
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
158
|
+
session.scope === 'all_runs'
|
|
159
|
+
? 'Scope: all historical runs. Use mcplab_search_runs to list or filter runs (no query needed for full listing). Then inspect specific runs via mcplab_read_run_artifact / trace tools.'
|
|
160
|
+
: omittedScenarioCount > 0
|
|
161
|
+
? `Important: Only the first ${scenarioLimit} of ${totalScenarioCount} scenarios are included in the prompt context. If the user asks about coverage/completeness, mention that ${omittedScenarioCount} scenario(s) are omitted and suggest using tools to inspect full results.`
|
|
162
|
+
: 'All scenarios are included in the prompt context.',
|
|
163
|
+
session.scope === 'all_runs'
|
|
164
|
+
? 'Run result context: none preloaded. You can inspect any run from history using available tools.'
|
|
165
|
+
: `Run result context: ${JSON.stringify({
|
|
166
|
+
run_id: session.resultSummary?.metadata.run_id,
|
|
167
|
+
timestamp: session.resultSummary?.metadata.timestamp,
|
|
168
|
+
run_note: session.resultSummary?.metadata.run_note ?? null,
|
|
169
|
+
config_hash: session.resultSummary?.metadata.config_hash,
|
|
170
|
+
summary: session.resultSummary?.summary,
|
|
171
|
+
snapshot_eval: session.resultSummary?.metadata.snapshot_eval ?? null,
|
|
172
|
+
scenario_count_total: totalScenarioCount,
|
|
173
|
+
scenario_count_included: scenarioSummaries.length,
|
|
174
|
+
scenario_count_omitted: omittedScenarioCount,
|
|
175
|
+
scenarios: scenarioSummaries,
|
|
176
|
+
linked_custom_reports: session.referenceReportsForRun.slice(0, 20)
|
|
177
|
+
})}`,
|
|
178
|
+
session.scope === 'all_runs'
|
|
179
|
+
? 'For custom markdown reports across runs, use mcplab_search_markdown_reports (no query needed for full listing, or filter by run_id/name). Then read selected files with mcplab_read_markdown_report.'
|
|
180
|
+
: 'For custom markdown reports linked to this run, use mcplab_search_markdown_reports with run_id set to the current run id. Then read selected files with mcplab_read_markdown_report.',
|
|
188
181
|
toolLines.length > 0
|
|
189
182
|
? `Available MCPLab MCP tools:\n${toolLines.join('\n')}`
|
|
190
183
|
: 'No MCPLab MCP tools available.'
|
|
@@ -201,7 +194,8 @@ async function resultAssistantChatModel(session) {
|
|
|
201
194
|
});
|
|
202
195
|
if (response.tool_calls && response.tool_calls.length > 0) {
|
|
203
196
|
const [first] = response.tool_calls;
|
|
204
|
-
const baseText = response.content?.trim() ||
|
|
197
|
+
const baseText = response.content?.trim() ||
|
|
198
|
+
`I need to call '${formatAssistantToolName(first.name)}' to help with this request.`;
|
|
205
199
|
return {
|
|
206
200
|
type: 'tool_call_request',
|
|
207
201
|
text: baseText,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"result-assistant-domain.js","sourceRoot":"","sources":["../../src/app-server/result-assistant-domain.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAoB,MAAM,uBAAuB,CAAC;AACxE,OAAO,EACL,oBAAoB,EACpB,2BAA2B,EAC3B,oBAAoB,EACpB,YAAY,EACZ,YAAY,EACb,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"result-assistant-domain.js","sourceRoot":"","sources":["../../src/app-server/result-assistant-domain.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export type ResultAssistantToolRole = 'search' | 'list' | 'read' | 'analysis' | 'catalog' | 'write';
|
|
2
|
+
export interface ResultAssistantToolCapability {
|
|
3
|
+
name: string;
|
|
4
|
+
role: ResultAssistantToolRole;
|
|
5
|
+
readOnly: boolean;
|
|
6
|
+
search: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare const RESULT_ASSISTANT_TOOL_CAPABILITIES: ResultAssistantToolCapability[];
|
|
9
|
+
export declare function isResultAssistantAllowedTool(name: string): boolean;
|
|
10
|
+
export declare function isResultAssistantAutoApprovedTool(name: string): boolean;
|
|
11
|
+
//# sourceMappingURL=result-assistant-tools.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"result-assistant-tools.d.ts","sourceRoot":"","sources":["../../src/app-server/result-assistant-tools.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,uBAAuB,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpG,MAAM,WAAW,6BAA6B;IAC5C,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,uBAAuB,CAAC;IAC9B,QAAQ,EAAE,OAAO,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,kCAAkC,EAAE,6BAA6B,EAkB7E,CAAC;AAMF,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAElE;AAED,wBAAgB,iCAAiC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEvE"}
|