@inspectr/mcplab 1.30.0 → 1.31.1

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 (103) hide show
  1. package/README.md +2 -2
  2. package/dist/app/assets/index-Co-US91U.js +267 -0
  3. package/dist/app/assets/index-D5OYchKq.css +2 -0
  4. package/dist/app/index.html +2 -2
  5. package/dist/app-server/app-context.d.ts +6 -22
  6. package/dist/app-server/app-context.d.ts.map +1 -1
  7. package/dist/app-server/assistant-agent.d.ts +10 -0
  8. package/dist/app-server/assistant-agent.d.ts.map +1 -0
  9. package/dist/app-server/assistant-agent.js +29 -0
  10. package/dist/app-server/assistant-agent.js.map +1 -0
  11. package/dist/app-server/assistant-common.d.ts +7 -34
  12. package/dist/app-server/assistant-common.d.ts.map +1 -1
  13. package/dist/app-server/assistant-common.js +33 -194
  14. package/dist/app-server/assistant-common.js.map +1 -1
  15. package/dist/app-server/assistant-events.d.ts +10 -6
  16. package/dist/app-server/assistant-events.d.ts.map +1 -1
  17. package/dist/app-server/assistant-events.js +23 -11
  18. package/dist/app-server/assistant-events.js.map +1 -1
  19. package/dist/app-server/assistant-graph-nodes.d.ts +226 -0
  20. package/dist/app-server/assistant-graph-nodes.d.ts.map +1 -0
  21. package/dist/app-server/assistant-graph-nodes.js +365 -0
  22. package/dist/app-server/assistant-graph-nodes.js.map +1 -0
  23. package/dist/app-server/assistant-graph-state.d.ts +64 -0
  24. package/dist/app-server/assistant-graph-state.d.ts.map +1 -0
  25. package/dist/app-server/assistant-graph-state.js +137 -0
  26. package/dist/app-server/assistant-graph-state.js.map +1 -0
  27. package/dist/app-server/assistant-mcp-context-tools.d.ts +17 -0
  28. package/dist/app-server/assistant-mcp-context-tools.d.ts.map +1 -0
  29. package/dist/app-server/assistant-mcp-context-tools.js +149 -0
  30. package/dist/app-server/assistant-mcp-context-tools.js.map +1 -0
  31. package/dist/app-server/assistant-model.d.ts +24 -0
  32. package/dist/app-server/assistant-model.d.ts.map +1 -0
  33. package/dist/app-server/assistant-model.js +240 -0
  34. package/dist/app-server/assistant-model.js.map +1 -0
  35. package/dist/app-server/assistant-runtime-contract.d.ts +46 -0
  36. package/dist/app-server/assistant-runtime-contract.d.ts.map +1 -0
  37. package/dist/app-server/assistant-runtime-contract.js +2 -0
  38. package/dist/app-server/assistant-runtime-contract.js.map +1 -0
  39. package/dist/app-server/assistant-runtime-policy.d.ts +22 -0
  40. package/dist/app-server/assistant-runtime-policy.d.ts.map +1 -0
  41. package/dist/app-server/assistant-runtime-policy.js +71 -0
  42. package/dist/app-server/assistant-runtime-policy.js.map +1 -0
  43. package/dist/app-server/assistant-service.d.ts +23 -0
  44. package/dist/app-server/assistant-service.d.ts.map +1 -0
  45. package/dist/app-server/assistant-service.js +185 -0
  46. package/dist/app-server/assistant-service.js.map +1 -0
  47. package/dist/app-server/assistant-session-routes.d.ts +25 -0
  48. package/dist/app-server/assistant-session-routes.d.ts.map +1 -0
  49. package/dist/app-server/assistant-session-routes.js +210 -0
  50. package/dist/app-server/assistant-session-routes.js.map +1 -0
  51. package/dist/app-server/assistant-tracing.d.ts +5 -0
  52. package/dist/app-server/assistant-tracing.d.ts.map +1 -0
  53. package/dist/app-server/assistant-tracing.js +30 -0
  54. package/dist/app-server/assistant-tracing.js.map +1 -0
  55. package/dist/app-server/browser-provider-learning.js +1 -1
  56. package/dist/app-server/browser-provider-learning.js.map +1 -1
  57. package/dist/app-server/inspectr-session-manager.d.ts +28 -34
  58. package/dist/app-server/inspectr-session-manager.d.ts.map +1 -1
  59. package/dist/app-server/inspectr-session-manager.js +13 -4
  60. package/dist/app-server/inspectr-session-manager.js.map +1 -1
  61. package/dist/app-server/langchain-assistant-runtime.d.ts +11 -0
  62. package/dist/app-server/langchain-assistant-runtime.d.ts.map +1 -0
  63. package/dist/app-server/langchain-assistant-runtime.js +852 -0
  64. package/dist/app-server/langchain-assistant-runtime.js.map +1 -0
  65. package/dist/app-server/one-shot-json.d.ts +26 -0
  66. package/dist/app-server/one-shot-json.d.ts.map +1 -0
  67. package/dist/app-server/one-shot-json.js +168 -0
  68. package/dist/app-server/one-shot-json.js.map +1 -0
  69. package/dist/app-server/result-assistant-domain.d.ts +46 -48
  70. package/dist/app-server/result-assistant-domain.d.ts.map +1 -1
  71. package/dist/app-server/result-assistant-domain.js +148 -133
  72. package/dist/app-server/result-assistant-domain.js.map +1 -1
  73. package/dist/app-server/result-assistant.d.ts +2 -2
  74. package/dist/app-server/result-assistant.d.ts.map +1 -1
  75. package/dist/app-server/result-assistant.js +43 -311
  76. package/dist/app-server/result-assistant.js.map +1 -1
  77. package/dist/app-server/router.d.ts.map +1 -1
  78. package/dist/app-server/router.js +14 -16
  79. package/dist/app-server/router.js.map +1 -1
  80. package/dist/app-server/runs-routes.js +1 -1
  81. package/dist/app-server/runs-routes.js.map +1 -1
  82. package/dist/app-server/scenario-assistant-domain.d.ts +43 -136
  83. package/dist/app-server/scenario-assistant-domain.d.ts.map +1 -1
  84. package/dist/app-server/scenario-assistant-domain.js +377 -215
  85. package/dist/app-server/scenario-assistant-domain.js.map +1 -1
  86. package/dist/app-server/scenario-assistant.d.ts +3 -3
  87. package/dist/app-server/scenario-assistant.d.ts.map +1 -1
  88. package/dist/app-server/scenario-assistant.js +52 -406
  89. package/dist/app-server/scenario-assistant.js.map +1 -1
  90. package/dist/app-server/settings-store.d.ts.map +1 -1
  91. package/dist/app-server/settings-store.js +2 -5
  92. package/dist/app-server/settings-store.js.map +1 -1
  93. package/dist/app-server/tool-analysis-domain.d.ts +1 -1
  94. package/dist/app-server/tool-analysis-domain.d.ts.map +1 -1
  95. package/dist/app-server/tool-analysis-domain.js +5 -4
  96. package/dist/app-server/tool-analysis-domain.js.map +1 -1
  97. package/dist/app-server/types.d.ts +1 -1
  98. package/dist/app-server/types.d.ts.map +1 -1
  99. package/dist/cli.js +2 -1
  100. package/dist/cli.js.map +1 -1
  101. package/package.json +10 -4
  102. package/dist/app/assets/index-8I9ZyPIK.js +0 -243
  103. package/dist/app/assets/index-jX7LoIQP.css +0 -2
@@ -1,121 +1,20 @@
1
1
  import { basename, relative, resolve, sep } from 'node:path';
2
2
  import { readdirSync, statSync } from 'node:fs';
3
- import { McpClientManager } from '@inspectr/mcplab-core';
4
- import { throwIfAborted } from '@inspectr/mcplab-core';
3
+ import { setupResultAssistantSession } from './result-assistant-domain.js';
5
4
  import { cleanupResultAssistantSessions, resultAssistantSessionView, touchResultAssistantSession } from './result-assistant-domain.js';
6
- import { isResultAssistantAutoApprovedTool } from './result-assistant-tools.js';
7
- import { flushDanglingToolCalls } from './assistant-common.js';
8
- import { broadcastAssistantSseEvent, createAssistantSseEvent, endAssistantSseClients, serveAssistantSseStream } from './assistant-events.js';
5
+ import { handleAssistantSessionRoutes } from './assistant-session-routes.js';
6
+ import { isAssistantDeltaEvent, broadcastAssistantSseEvent, createAssistantSseEvent } from './assistant-events.js';
9
7
  export async function handleResultAssistantRoutes(params) {
10
8
  const { req, res, pathname, method, settings, resultAssistantSessions, deps } = params;
11
- const { parseBody, asJson, getRunResults, readLibraries, pickDefaultAssistantAgentName, resolveAssistantAgentFromLibraries, continueResultAssistantTurn, executeResultAssistantToolCall, summarizeToolResultForResultAssistant, preloadResultAssistantTools } = deps;
12
- const errorMessage = (error) => (error instanceof Error ? error.message : String(error));
13
- const makeMsgId = () => `msg-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`;
9
+ const { parseBody, asJson, getRunResults, readLibraries, pickDefaultAssistantAgentName, resolveAssistantAgentFromLibraries, assistantRuntimeFactory } = deps;
14
10
  const listReferenceReportsForRun = (runId) => listMarkdownReportsLinkedToRun(settings.workspaceRoot, runId);
15
11
  const publishSessionEvent = (session, type, payload = {}) => {
16
12
  broadcastAssistantSseEvent(session, createAssistantSseEvent(type, {
17
13
  sessionId: session.id,
18
- session: resultAssistantSessionView(session),
14
+ ...(isAssistantDeltaEvent(type) ? {} : { session: resultAssistantSessionView(session) }),
19
15
  ...payload
20
16
  }));
21
17
  };
22
- const executePendingToolCall = async (session, pending, approvalLabel, options) => {
23
- const emitApprovalChatMessage = options?.emitApprovalChatMessage ?? true;
24
- pending.status = 'approved';
25
- publishSessionEvent(session, 'tool_call_approved', { pendingToolCallId: pending.id });
26
- if (emitApprovalChatMessage) {
27
- session.chatMessages.push({
28
- id: makeMsgId(),
29
- role: 'tool',
30
- text: `${approvalLabel} tool call ${pending.server}::${pending.tool}`,
31
- createdAt: new Date().toISOString()
32
- });
33
- }
34
- try {
35
- const toolResult = await executeResultAssistantToolCall(session, pending, options?.signal);
36
- pending.resultPreview = summarizeToolResultForResultAssistant(toolResult);
37
- if (pending.tool === 'mcplab_write_markdown_report' && session.scope === 'run') {
38
- session.referenceReportsForRun = listReferenceReportsForRun(session.runId);
39
- session.systemPromptCache = undefined;
40
- }
41
- session.llmMessages.push({
42
- role: 'tool',
43
- content: pending.resultPreview,
44
- tool_call_id: pending.id,
45
- name: pending.publicToolName
46
- });
47
- publishSessionEvent(session, 'tool_call_resolved', {
48
- pendingToolCallId: pending.id,
49
- pendingToolCall: pending
50
- });
51
- }
52
- catch (error) {
53
- if (options?.signal?.aborted || (error instanceof Error && error.name === 'AbortError')) {
54
- throw error;
55
- }
56
- pending.status = 'error';
57
- pending.error = errorMessage(error);
58
- session.llmMessages.push({
59
- role: 'tool',
60
- content: JSON.stringify({ error: pending.error }),
61
- tool_call_id: pending.id,
62
- name: pending.publicToolName
63
- });
64
- session.chatMessages.push({
65
- id: makeMsgId(),
66
- role: 'tool',
67
- text: `Tool error (${pending.server}::${pending.tool}): ${pending.error}`,
68
- createdAt: new Date().toISOString()
69
- });
70
- publishSessionEvent(session, 'session_error', {
71
- pendingToolCallId: pending.id,
72
- error: pending.error
73
- });
74
- }
75
- };
76
- const continueWithAutoApprovedReads = async (session, signal) => {
77
- throwIfAborted(signal);
78
- publishSessionEvent(session, 'turn_started');
79
- let output = await continueResultAssistantTurn(session, signal);
80
- throwIfAborted(signal);
81
- for (let i = 0; i < 25; i += 1) {
82
- throwIfAborted(signal);
83
- const pending = output.response.pendingToolCall;
84
- if (output.response.type !== 'tool_call_request' ||
85
- !pending ||
86
- !isResultAssistantAutoApprovedTool(pending.tool)) {
87
- if (output.response.type === 'assistant_message') {
88
- publishSessionEvent(session, 'assistant_message_completed', {
89
- text: output.response.text
90
- });
91
- }
92
- else if (output.response.type === 'tool_call_request' &&
93
- output.response.pendingToolCall) {
94
- publishSessionEvent(session, 'tool_call_requested', {
95
- pendingToolCallId: output.response.pendingToolCall.id,
96
- pendingToolCall: output.response.pendingToolCall
97
- });
98
- }
99
- return output;
100
- }
101
- publishSessionEvent(session, 'tool_call_requested', {
102
- pendingToolCallId: pending.id,
103
- pendingToolCall: pending
104
- });
105
- throwIfAborted(signal);
106
- await executePendingToolCall(session, pending, 'Auto-approved read-only', {
107
- emitApprovalChatMessage: false,
108
- signal: signal
109
- });
110
- throwIfAborted(signal);
111
- touchResultAssistantSession(session);
112
- if (pending.error)
113
- break;
114
- output = await continueResultAssistantTurn(session, signal);
115
- throwIfAborted(signal);
116
- }
117
- return output;
118
- };
119
18
  if (pathname === '/api/result-assistant/sessions' && method === 'POST') {
120
19
  cleanupResultAssistantSessions(resultAssistantSessions);
121
20
  const body = (await parseBody(req));
@@ -131,36 +30,31 @@ export async function handleResultAssistantRoutes(params) {
131
30
  const results = scope === 'run' ? getRunResults(runId, settings.runsDir) : null;
132
31
  const libraries = readLibraries(settings.librariesDir);
133
32
  const assistantAgentName = pickDefaultAssistantAgentName({
134
- settingsDefault: settings.scenarioAssistantAgentName,
33
+ settingsDefault: settings.assistantAgentName,
135
34
  agentNames: Object.keys(libraries.agents)
136
35
  });
137
36
  if (!assistantAgentName) {
138
37
  asJson(res, 400, {
139
- error: 'No assistant agent available. Add an agent in Libraries > Agents or configure the Scenario Assistant Agent in Settings.'
38
+ error: 'No assistant agent available. Add an agent in Libraries > Agents or configure the Assistant Agent in Settings.'
140
39
  });
141
40
  return true;
142
41
  }
143
42
  const agentConfig = resolveAssistantAgentFromLibraries(libraries, assistantAgentName);
144
- const session = {
43
+ const sessionInitializer = {
145
44
  id: `ras-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
146
45
  scope,
147
46
  runId: scope === 'run' ? runId : null,
148
47
  createdAt: Date.now(),
149
48
  lastTouchedAt: Date.now(),
150
49
  selectedAssistantAgentName: assistantAgentName,
151
- agentConfig,
152
- resultSummary: results,
153
- referenceReportsForRun: listReferenceReportsForRun(scope === 'run' ? runId : null),
154
- mcp: new McpClientManager(),
155
- tools: [],
156
- toolPublicMap: new Map(),
157
- pendingToolCalls: [],
158
- chatMessages: [],
159
- llmMessages: [],
160
- events: [],
50
+ model: agentConfig.model,
51
+ provider: agentConfig.provider,
52
+ toolsLoaded: 0,
53
+ toolServers: [],
54
+ initialMessages: [],
161
55
  clients: new Set()
162
56
  };
163
- session.chatMessages.push({
57
+ sessionInitializer.initialMessages.push({
164
58
  id: `msg-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
165
59
  role: 'system',
166
60
  text: scope === 'all_runs'
@@ -168,202 +62,40 @@ export async function handleResultAssistantRoutes(params) {
168
62
  : 'Result Assistant session created.',
169
63
  createdAt: new Date().toISOString()
170
64
  });
171
- try {
172
- await preloadResultAssistantTools(session, localMcplabMcpUrl());
173
- }
174
- catch (error) {
175
- session.chatMessages.push({
176
- id: `msg-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
177
- role: 'system',
178
- text: `Warning: could not preload MCPLab MCP tools: ${errorMessage(error)}`,
179
- createdAt: new Date().toISOString()
180
- });
181
- publishSessionEvent(session, 'session_warning', { warning: errorMessage(error) });
182
- }
65
+ const session = await setupResultAssistantSession({
66
+ session: sessionInitializer,
67
+ agentConfig,
68
+ resultSummary: results,
69
+ referenceReportsForRun: listReferenceReportsForRun(scope === 'run' ? runId : null),
70
+ mcpServerUrl: localMcplabMcpUrl(),
71
+ refreshReports: () => listReferenceReportsForRun(sessionInitializer.runId),
72
+ assistantRuntimeFactory,
73
+ onEvent: (event, readySession) => {
74
+ touchResultAssistantSession(readySession);
75
+ publishSessionEvent(readySession, event.type, event.payload);
76
+ },
77
+ onActivity: touchResultAssistantSession
78
+ });
183
79
  resultAssistantSessions.set(session.id, session);
184
80
  publishSessionEvent(session, 'session_started');
185
81
  asJson(res, 201, { sessionId: session.id, session: resultAssistantSessionView(session) });
186
82
  return true;
187
83
  }
188
- if (pathname.startsWith('/api/result-assistant/sessions/') &&
189
- pathname.endsWith('/events') &&
190
- method === 'GET') {
191
- cleanupResultAssistantSessions(resultAssistantSessions);
192
- const sessionId = pathname
193
- .replace('/api/result-assistant/sessions/', '')
194
- .replace('/events', '');
195
- const session = resultAssistantSessions.get(sessionId);
196
- if (!session) {
197
- asJson(res, 404, { error: 'Result Assistant session not found' });
198
- return true;
199
- }
200
- serveAssistantSseStream(req, res, session);
201
- return true;
202
- }
203
- if (pathname.startsWith('/api/result-assistant/sessions/') && method === 'GET') {
204
- cleanupResultAssistantSessions(resultAssistantSessions);
205
- const sessionId = pathname.replace('/api/result-assistant/sessions/', '');
206
- const session = resultAssistantSessions.get(sessionId);
207
- if (!session) {
208
- asJson(res, 404, { error: 'Result Assistant session not found' });
209
- return true;
210
- }
211
- touchResultAssistantSession(session);
212
- asJson(res, 200, { session: resultAssistantSessionView(session) });
213
- return true;
214
- }
215
- if (pathname.startsWith('/api/result-assistant/sessions/') && method === 'DELETE') {
216
- cleanupResultAssistantSessions(resultAssistantSessions);
217
- const sessionId = pathname.replace('/api/result-assistant/sessions/', '');
218
- const session = resultAssistantSessions.get(sessionId);
219
- if (session) {
220
- publishSessionEvent(session, 'session_finished');
221
- endAssistantSseClients(session);
222
- }
223
- resultAssistantSessions.delete(sessionId);
224
- asJson(res, 200, { ok: true });
225
- return true;
226
- }
227
- if (pathname.startsWith('/api/result-assistant/sessions/') &&
228
- pathname.endsWith('/messages') &&
229
- method === 'POST') {
230
- cleanupResultAssistantSessions(resultAssistantSessions);
231
- const parts = pathname.split('/');
232
- const sessionId = parts[4];
233
- const session = resultAssistantSessions.get(sessionId);
234
- if (!session) {
235
- asJson(res, 404, { error: 'Result Assistant session not found' });
236
- return true;
237
- }
238
- const chatMessagesBefore = session.chatMessages.length;
239
- const llmMessagesBefore = session.llmMessages.length;
240
- const pendingToolCallsBefore = session.pendingToolCalls.length;
241
- const abortController = new AbortController();
242
- const handleClose = () => {
243
- if (req.complete)
244
- return;
245
- if (res.writableEnded)
246
- return;
247
- abortController.abort();
248
- };
249
- req.on('close', handleClose);
250
- try {
251
- const body = await parseBody(req);
252
- const message = String(body.message ?? '').trim();
253
- throwIfAborted(abortController.signal);
254
- if (!message) {
255
- asJson(res, 400, { error: 'message is required' });
256
- return true;
257
- }
258
- session.chatMessages.push({
259
- id: `msg-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
260
- role: 'user',
261
- text: message,
262
- createdAt: new Date().toISOString()
263
- });
264
- flushDanglingToolCalls(session.llmMessages);
265
- session.llmMessages.push({ role: 'user', content: message });
266
- const output = await continueWithAutoApprovedReads(session, abortController.signal);
267
- throwIfAborted(abortController.signal);
268
- asJson(res, 200, output);
269
- return true;
270
- }
271
- catch (error) {
272
- if (abortController.signal.aborted) {
273
- session.chatMessages.splice(chatMessagesBefore);
274
- session.llmMessages.splice(llmMessagesBefore);
275
- session.pendingToolCalls.splice(pendingToolCallsBefore);
276
- return true;
277
- }
278
- throw error;
279
- }
280
- finally {
281
- req.off('close', handleClose);
282
- }
283
- }
284
- if (pathname.startsWith('/api/result-assistant/sessions/') &&
285
- pathname.includes('/tool-calls/') &&
286
- pathname.endsWith('/approve') &&
287
- method === 'POST') {
288
- cleanupResultAssistantSessions(resultAssistantSessions);
289
- const parts = pathname.split('/');
290
- const sessionId = parts[4];
291
- const callId = parts[6];
292
- const session = resultAssistantSessions.get(sessionId);
293
- if (!session) {
294
- asJson(res, 404, { error: 'Result Assistant session not found' });
295
- return true;
296
- }
297
- const pending = session.pendingToolCalls.find((call) => call.id === callId);
298
- if (!pending) {
299
- asJson(res, 404, { error: 'Result Assistant tool call not found' });
300
- return true;
301
- }
302
- if (pending.status !== 'pending') {
303
- asJson(res, 409, { error: `Tool call is already ${pending.status}` });
304
- return true;
305
- }
306
- const body = (await parseBody(req));
307
- if (Object.prototype.hasOwnProperty.call(body ?? {}, 'argumentsOverride')) {
308
- pending.arguments = body.argumentsOverride;
309
- }
310
- await executePendingToolCall(session, pending, 'Approved', {
311
- emitApprovalChatMessage: false
312
- });
313
- const output = await continueWithAutoApprovedReads(session);
314
- asJson(res, 200, output);
315
- return true;
316
- }
317
- if (pathname.startsWith('/api/result-assistant/sessions/') &&
318
- pathname.includes('/tool-calls/') &&
319
- pathname.endsWith('/deny') &&
320
- method === 'POST') {
321
- cleanupResultAssistantSessions(resultAssistantSessions);
322
- const parts = pathname.split('/');
323
- const sessionId = parts[4];
324
- const callId = parts[6];
325
- const session = resultAssistantSessions.get(sessionId);
326
- if (!session) {
327
- asJson(res, 404, { error: 'Result Assistant session not found' });
328
- return true;
329
- }
330
- const pending = session.pendingToolCalls.find((call) => call.id === callId);
331
- if (!pending) {
332
- asJson(res, 404, { error: 'Result Assistant tool call not found' });
333
- return true;
334
- }
335
- if (pending.status !== 'pending') {
336
- asJson(res, 409, { error: `Tool call is already ${pending.status}` });
337
- return true;
338
- }
339
- pending.status = 'denied';
340
- session.chatMessages.push({
341
- id: `msg-${Date.now()}-${Math.random().toString(36).slice(2, 8)}`,
342
- role: 'tool',
343
- text: `Denied tool call ${pending.server}::${pending.tool}`,
344
- createdAt: new Date().toISOString()
345
- });
346
- session.llmMessages.push({
347
- role: 'tool',
348
- content: JSON.stringify({
349
- denied: true,
350
- reason: 'User denied tool call',
351
- server: pending.server,
352
- tool: pending.tool
353
- }),
354
- tool_call_id: pending.id,
355
- name: pending.publicToolName
356
- });
357
- publishSessionEvent(session, 'tool_call_denied', { pendingToolCallId: pending.id });
358
- publishSessionEvent(session, 'tool_call_resolved', {
359
- pendingToolCallId: pending.id,
360
- pendingToolCall: pending
361
- });
362
- const output = await continueWithAutoApprovedReads(session);
363
- asJson(res, 200, output);
364
- return true;
365
- }
366
- return false;
84
+ return handleAssistantSessionRoutes({
85
+ req,
86
+ res,
87
+ pathname,
88
+ method,
89
+ prefix: '/api/result-assistant/sessions',
90
+ assistantLabel: 'Result Assistant',
91
+ parseBody,
92
+ asJson,
93
+ sessions: resultAssistantSessions,
94
+ cleanup: () => cleanupResultAssistantSessions(resultAssistantSessions),
95
+ touch: touchResultAssistantSession,
96
+ view: resultAssistantSessionView,
97
+ finish: (session) => publishSessionEvent(session, 'session_finished')
98
+ });
367
99
  }
368
100
  function localMcplabMcpUrl() {
369
101
  const host = process.env.MCP_HOST || '127.0.0.1';
@@ -1 +1 @@
1
- {"version":3,"file":"result-assistant.js","sourceRoot":"","sources":["../../src/app-server/result-assistant.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"result-assistant.js","sourceRoot":"","sources":["../../src/app-server/result-assistant.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,WAAW,CAAC;AAC7D,OAAO,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEhD,OAAO,EACL,2BAA2B,EAI5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,8BAA8B,EAC9B,0BAA0B,EAC1B,2BAA2B,EAC5B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,4BAA4B,EAAE,MAAM,+BAA+B,CAAC;AAC7E,OAAO,EACL,qBAAqB,EACrB,0BAA0B,EAC1B,uBAAuB,EAExB,MAAM,uBAAuB,CAAC;AAa/B,MAAM,CAAC,KAAK,UAAU,2BAA2B,CAAC,MAQjD;IACC,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,uBAAuB,EAAE,IAAI,EAAE,GAAG,MAAM,CAAC;IACvF,MAAM,EACJ,SAAS,EACT,MAAM,EACN,aAAa,EACb,aAAa,EACb,6BAA6B,EAC7B,kCAAkC,EAClC,uBAAuB,EACxB,GAAG,IAAI,CAAC;IACT,MAAM,0BAA0B,GAAG,CAAC,KAAoB,EAAE,EAAE,CAC1D,8BAA8B,CAAC,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,CAAC;IAChE,MAAM,mBAAmB,GAAG,CAC1B,OAA+B,EAC/B,IAA2B,EAC3B,OAAO,GAA4B,EAAE,EACrC,EAAE;QACF,0BAA0B,CACxB,OAAO,EACP,uBAAuB,CAAC,IAAI,EAAE;YAC5B,SAAS,EAAE,OAAO,CAAC,EAAE;YACrB,GAAG,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC;YACxF,GAAG,OAAO;SACX,CAAC,CACH,CAAC;IACJ,CAAC,CAAC;IAEF,IAAI,QAAQ,KAAK,gCAAgC,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACvE,8BAA8B,CAAC,uBAAuB,CAAC,CAAC;QACxD,MAAM,IAAI,GAAG,CAAC,MAAM,SAAS,CAAC,GAAG,CAAC,CAAyC,CAAC;QAC5E,MAAM,cAAc,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;aAC5C,IAAI,EAAE;aACN,WAAW,EAAE,CAAC;QACjB,MAAM,KAAK,GAAuB,cAAc,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC;QACrF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9C,IAAI,KAAK,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,2CAA2C,EAAE,CAAC,CAAC;YACzE,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,OAAO,GAAG,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,EAAE,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAChF,MAAM,SAAS,GAAG,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;QACvD,MAAM,kBAAkB,GAAG,6BAA6B,CAAC;YACvD,eAAe,EAAE,QAAQ,CAAC,kBAAkB;YAC5C,UAAU,EAAE,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAC1C,CAAC,CAAC;QACH,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACxB,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE;gBACf,KAAK,EACH,gHAAgH;aACnH,CAAC,CAAC;YACH,OAAO,IAAI,CAAC;QACd,CAAC;QACD,MAAM,WAAW,GAAG,kCAAkC,CAAC,SAAS,EAAE,kBAAkB,CAAC,CAAC;QACtF,MAAM,kBAAkB,GAAsC;YAC5D,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACjE,KAAK;YACL,KAAK,EAAE,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI;YACrC,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,aAAa,EAAE,IAAI,CAAC,GAAG,EAAE;YACzB,0BAA0B,EAAE,kBAAkB;YAC9C,KAAK,EAAE,WAAW,CAAC,KAAK;YACxB,QAAQ,EAAE,WAAW,CAAC,QAAQ;YAC9B,WAAW,EAAE,CAAC;YACd,WAAW,EAAE,EAAE;YACf,eAAe,EAAE,EAAE;YACnB,OAAO,EAAE,IAAI,GAAG,EAAE;SACnB,CAAC;QACF,kBAAkB,CAAC,eAAe,CAAC,IAAI,CAAC;YACtC,EAAE,EAAE,OAAO,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACjE,IAAI,EAAE,QAAQ;YACd,IAAI,EACF,KAAK,KAAK,UAAU;gBAClB,CAAC,CAAC,2DAA2D;gBAC7D,CAAC,CAAC,mCAAmC;YACzC,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,2BAA2B,CAAC;YAChD,OAAO,EAAE,kBAAkB;YAC3B,WAAW;YACX,aAAa,EAAE,OAAO;YACtB,sBAAsB,EAAE,0BAA0B,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YAClF,YAAY,EAAE,iBAAiB,EAAE;YACjC,cAAc,EAAE,GAAG,EAAE,CAAC,0BAA0B,CAAC,kBAAkB,CAAC,KAAK,CAAC;YAC1E,uBAAuB;YACvB,OAAO,EAAE,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE;gBAC/B,2BAA2B,CAAC,YAAY,CAAC,CAAC;gBAC1C,mBAAmB,CAAC,YAAY,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;YAC/D,CAAC;YACD,UAAU,EAAE,2BAA2B;SACxC,CAAC,CAAC;QACH,uBAAuB,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC;QACjD,mBAAmB,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QAChD,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,SAAS,EAAE,OAAO,CAAC,EAAE,EAAE,OAAO,EAAE,0BAA0B,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAC1F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,4BAA4B,CAAC;QAClC,GAAG;QACH,GAAG;QACH,QAAQ;QACR,MAAM;QACN,MAAM,EAAE,gCAAgC;QACxC,cAAc,EAAE,kBAAkB;QAClC,SAAS;QACT,MAAM;QACN,QAAQ,EAAE,uBAAuB;QACjC,OAAO,EAAE,GAAG,EAAE,CAAC,8BAA8B,CAAC,uBAAuB,CAAC;QACtE,KAAK,EAAE,2BAA2B;QAClC,IAAI,EAAE,0BAA0B;QAChC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,OAAO,EAAE,kBAAkB,CAAC;KACtE,CAAC,CAAC;AACL,CAAC;AAED,SAAS,iBAAiB;IACxB,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,WAAW,CAAC;IACjD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC5C,OAAO,UAAU,IAAI,IAAI,IAAI,GAAG,IAAI,EAAE,CAAC;AACzC,CAAC;AAED,SAAS,8BAA8B,CACrC,aAAqB,EACrB,KAAoB;IAEpB,MAAM,IAAI,GAAG,OAAO,CAAC,aAAa,EAAE,gBAAgB,CAAC,CAAC;IACtD,MAAM,GAAG,GAAqC,EAAE,CAAC;IACjD,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IACxF,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,EAAE;QAC3B,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;QACD,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YAC1C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACxB,IAAI,CAAC,QAAQ,CAAC,CAAC;gBACf,SAAS;YACX,CAAC;YACD,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAAE,SAAS;YACvD,IAAI,CAAC;gBACH,MAAM,EAAE,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAC9B,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;oBAAE,SAAS;gBAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBAC9D,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACtE,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAChC,IAAI,KAAK,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC;oBAAE,SAAS;gBACzE,GAAG,CAAC,IAAI,CAAC;oBACP,IAAI,EAAE,MAAM;oBACZ,YAAY,EAAE,OAAO;oBACrB,IAAI;oBACJ,SAAS,EAAE,EAAE,CAAC,IAAI;oBAClB,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,WAAW,EAAE;iBAC9B,CAAC,CAAC;YACL,CAAC;YAAC,MAAM,CAAC;gBACP,2BAA2B;YAC7B,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IACF,IAAI,CAAC,IAAI,CAAC,CAAC;IACX,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QAChB,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;YAAE,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7D,OAAO,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACxC,CAAC,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1B,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/app-server/router.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,YAAY,CAAC;AAsCrF,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAuB,KAAK,MAAM,EAAsB,MAAM,sBAAsB,CAAC;AAuD5F,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAYjF,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAC9C,UAAU,EAAE,eAAe,GAAG,IAAI,EAClC,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,GAC7C,MAAM,GAAG,IAAI,CAOf;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE3E;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAC9C,UAAU,EAAE,eAAe,GAAG,IAAI,EAClC,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,EAC9C,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,aAAa,EAAE,MAAM,GACpB,MAAM,GAAG,IAAI,CAIf;AAKD,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,iBAmuB7D"}
1
+ {"version":3,"file":"router.d.ts","sourceRoot":"","sources":["../../src/app-server/router.ts"],"names":[],"mappings":"AAmCA,OAAO,KAAK,EAAE,gBAAgB,EAAoC,MAAM,YAAY,CAAC;AAuCrF,OAAO,EAGL,KAAK,eAAe,EACrB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAuB,KAAK,MAAM,EAAsB,MAAM,sBAAsB,CAAC;AA0C5F,OAAO,KAAK,EAAE,eAAe,EAAE,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAYjF,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAC9C,UAAU,EAAE,eAAe,GAAG,IAAI,EAClC,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,GAC7C,MAAM,GAAG,IAAI,CAOf;AAED,wBAAgB,0BAA0B,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAE3E;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,IAAI,CAAC,eAAe,EAAE,gBAAgB,CAAC,EAC9C,UAAU,EAAE,eAAe,GAAG,IAAI,EAClC,IAAI,EAAE,CAAC,OAAO,EAAE,kBAAkB,KAAK,OAAO,EAC9C,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,aAAa,EAAE,MAAM,GACpB,MAAM,GAAG,IAAI,CAIf;AAKD,wBAAsB,cAAc,CAAC,OAAO,EAAE,gBAAgB,iBAiuB7D"}
@@ -5,6 +5,7 @@ import { createServer } from 'node:http';
5
5
  import { join, resolve } from 'node:path';
6
6
  import { chatWithAgent, expandConfigForAgents, readLibraryAgentsAndServers, resolveEvaluationJudge, resolveWorkspaceEvaluation, McpClientManager, validateBrowserProviderProfile } from '@inspectr/mcplab-core';
7
7
  import { asHtml, asJson, asText, parseBody } from './http.js';
8
+ import { createLangChainAssistantRuntimeFactory } from './langchain-assistant-runtime.js';
8
9
  import { handleConnectionTestRoutes } from './connection-test-routes.js';
9
10
  import { applyRequestOriginPolicy } from './request-origin.js';
10
11
  import { addJobEvent, sendSseEvent } from './jobs.js';
@@ -27,8 +28,7 @@ import { handleRunsRoutes } from './runs-routes.js';
27
28
  import { createRunQueueService } from './run-queue-domain.js';
28
29
  import { createRunQueueState } from './run-queue-state.js';
29
30
  import { fetchProviderModels } from './provider-models.js';
30
- import { cleanupAssistantSessions, touchAssistantSession, assistantSessionView, resolveAssistantAgentFromConfig, resolveAssistantAgentFromLibraries, pickDefaultAssistantAgentName, preloadAssistantTools, continueAssistantTurn, executeAssistantToolCall, summarizeToolResultForAssistant } from './scenario-assistant-domain.js';
31
- import { preloadResultAssistantTools, continueResultAssistantTurn, executeResultAssistantToolCall, summarizeToolResultForResultAssistant } from './result-assistant-domain.js';
31
+ import { resolveAssistantAgentFromConfig, resolveAssistantAgentFromLibraries, pickDefaultAssistantAgentName } from './assistant-agent.js';
32
32
  import { discoverMcpToolsForServers, runToolAnalysisJob } from './tool-analysis-domain.js';
33
33
  import { cleanupOAuthDebuggerSessions, oauthDebuggerSessionView, createOAuthDebuggerSession, startOrResumeOAuthDebuggerSession, submitManualCallbackToSession, submitBrowserCallbackToSession, stopOAuthDebuggerSession, oauthDebuggerExportMarkdown, oauthDebuggerExportRawTrace } from './oauth-debugger-domain.js';
34
34
  import { OAuthSessionManager } from './oauth-session-manager.js';
@@ -129,7 +129,10 @@ export async function startAppServer(options) {
129
129
  }
130
130
  });
131
131
  const runQueueState = createRunQueueState(settings.defaultQueueWorkers);
132
+ const assistantRuntimeFactory = createLangChainAssistantRuntimeFactory();
133
+ console.info('[mcplab-app] Assistants runtime: LangGraph');
132
134
  const routeDeps = {
135
+ assistantRuntimeFactory,
133
136
  parseBody,
134
137
  asHtml,
135
138
  asJson,
@@ -148,21 +151,10 @@ export async function startAppServer(options) {
148
151
  stopOAuthDebuggerSession,
149
152
  oauthDebuggerExportMarkdown,
150
153
  oauthDebuggerExportRawTrace,
151
- cleanupAssistantSessions,
152
- touchAssistantSession,
153
- assistantSessionView,
154
154
  ensureInsideRoot,
155
155
  pickDefaultAssistantAgentName,
156
156
  resolveAssistantAgentFromConfig,
157
157
  resolveAssistantAgentFromLibraries,
158
- preloadResultAssistantTools,
159
- continueResultAssistantTurn,
160
- executeResultAssistantToolCall,
161
- summarizeToolResultForResultAssistant,
162
- preloadAssistantTools,
163
- continueAssistantTurn,
164
- executeAssistantToolCall,
165
- summarizeToolResultForAssistant,
166
158
  getRunResults,
167
159
  decodeEvalId,
168
160
  readConfigRecord,
@@ -375,9 +367,14 @@ export async function startAppServer(options) {
375
367
  asJson(res, 400, { error: error instanceof Error ? error.message : String(error) });
376
368
  return;
377
369
  }
378
- if (Object.prototype.hasOwnProperty.call(body, 'scenarioAssistantAgentName')) {
379
- candidate.scenarioAssistantAgentName =
380
- String(body.scenarioAssistantAgentName ?? '').trim() || undefined;
370
+ // Older clients send the setting under its previous name.
371
+ const assistantAgentKey = Object.prototype.hasOwnProperty.call(body, 'assistantAgentName')
372
+ ? 'assistantAgentName'
373
+ : Object.prototype.hasOwnProperty.call(body, 'scenarioAssistantAgentName')
374
+ ? 'scenarioAssistantAgentName'
375
+ : undefined;
376
+ if (assistantAgentKey) {
377
+ candidate.assistantAgentName = String(body[assistantAgentKey] ?? '').trim() || undefined;
381
378
  }
382
379
  if (Object.prototype.hasOwnProperty.call(body, 'defaultQueueWorkers')) {
383
380
  candidate.defaultQueueWorkers = normalizeQueueWorkerCount(body.defaultQueueWorkers);
@@ -391,6 +388,7 @@ export async function startAppServer(options) {
391
388
  mkdirSync(join(candidate.librariesDir, 'test-cases'), { recursive: true });
392
389
  }
393
390
  const settingsChanged = [
391
+ 'assistantAgentName',
394
392
  'scenarioAssistantAgentName',
395
393
  'evaluationJudgeAgentName',
396
394
  'evaluationDecision',