@posthog/mcp 0.10.4 → 0.10.6
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/dist/extensions/capture.d.ts +2 -1
- package/dist/extensions/capture.d.ts.map +1 -1
- package/dist/extensions/capture.js +2 -3
- package/dist/extensions/capture.mjs +2 -3
- package/dist/extensions/compatibility.d.ts +3 -2
- package/dist/extensions/compatibility.d.ts.map +1 -1
- package/dist/extensions/compatibility.js +19 -20
- package/dist/extensions/compatibility.mjs +15 -16
- package/dist/extensions/context-parameters.d.ts +3 -2
- package/dist/extensions/context-parameters.d.ts.map +1 -1
- package/dist/extensions/context-parameters.js +4 -8
- package/dist/extensions/context-parameters.mjs +4 -7
- package/dist/extensions/conversation-id.d.ts +3 -2
- package/dist/extensions/conversation-id.d.ts.map +1 -1
- package/dist/extensions/conversation-id.js +5 -6
- package/dist/extensions/conversation-id.mjs +5 -5
- package/dist/extensions/instrument-highlevel.d.ts +2 -1
- package/dist/extensions/instrument-highlevel.d.ts.map +1 -1
- package/dist/extensions/instrument-highlevel.js +29 -30
- package/dist/extensions/instrument-highlevel.mjs +30 -31
- package/dist/extensions/instrument-lowlevel.d.ts +2 -1
- package/dist/extensions/instrument-lowlevel.d.ts.map +1 -1
- package/dist/extensions/instrument-lowlevel.js +15 -11
- package/dist/extensions/instrument-lowlevel.mjs +16 -12
- package/dist/extensions/instrumentation.d.ts +9 -8
- package/dist/extensions/instrumentation.d.ts.map +1 -1
- package/dist/extensions/instrumentation.js +84 -40
- package/dist/extensions/instrumentation.mjs +80 -39
- package/dist/extensions/intent.d.ts.map +1 -1
- package/dist/extensions/intent.js +2 -3
- package/dist/extensions/intent.mjs +2 -3
- package/dist/extensions/internal.d.ts.map +1 -1
- package/dist/extensions/internal.js +5 -6
- package/dist/extensions/internal.mjs +5 -6
- package/dist/extensions/logger.d.ts +12 -4
- package/dist/extensions/logger.d.ts.map +1 -1
- package/dist/extensions/logger.js +12 -3
- package/dist/extensions/logger.mjs +10 -4
- package/dist/extensions/sink.d.ts +4 -2
- package/dist/extensions/sink.d.ts.map +1 -1
- package/dist/extensions/sink.js +11 -10
- package/dist/extensions/sink.mjs +11 -10
- package/dist/extensions/tools.d.ts +2 -1
- package/dist/extensions/tools.d.ts.map +1 -1
- package/dist/extensions/tools.js +2 -2
- package/dist/extensions/tools.mjs +2 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -16
- package/dist/index.mjs +19 -17
- package/dist/types.d.ts +2 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.mjs +1 -1
- package/package.json +3 -3
- package/src/extensions/capture.ts +3 -3
- package/src/extensions/compatibility.ts +16 -16
- package/src/extensions/context-parameters.ts +8 -12
- package/src/extensions/conversation-id.ts +14 -7
- package/src/extensions/instrument-highlevel.ts +45 -44
- package/src/extensions/instrument-lowlevel.ts +30 -15
- package/src/extensions/instrumentation.ts +119 -42
- package/src/extensions/intent.ts +2 -8
- package/src/extensions/internal.ts +7 -6
- package/src/extensions/logger.ts +22 -7
- package/src/extensions/sink.ts +17 -12
- package/src/extensions/tools.ts +3 -3
- package/src/index.ts +21 -19
- package/src/types.ts +2 -0
- package/src/version.ts +1 -1
|
@@ -24,11 +24,12 @@ var __webpack_require__ = {};
|
|
|
24
24
|
var __webpack_exports__ = {};
|
|
25
25
|
__webpack_require__.r(__webpack_exports__);
|
|
26
26
|
__webpack_require__.d(__webpack_exports__, {
|
|
27
|
-
|
|
27
|
+
isToolAdvertised: ()=>isToolAdvertised,
|
|
28
28
|
cacheToolDescriptions: ()=>cacheToolDescriptions,
|
|
29
|
-
cacheToolCategories: ()=>cacheToolCategories,
|
|
30
29
|
handleInitializeRequest: ()=>handleInitializeRequest,
|
|
31
30
|
captureToolCall: ()=>captureToolCall,
|
|
31
|
+
readToolMetaCategory: ()=>readToolMetaCategory,
|
|
32
|
+
cacheToolCategories: ()=>cacheToolCategories,
|
|
32
33
|
handleListToolsRequest: ()=>handleListToolsRequest,
|
|
33
34
|
patchRequestHandlers: ()=>patchRequestHandlers
|
|
34
35
|
});
|
|
@@ -41,7 +42,6 @@ const external_event_types_js_namespaceObject = require("./event-types.js");
|
|
|
41
42
|
const external_exceptions_js_namespaceObject = require("./exceptions.js");
|
|
42
43
|
const external_intent_js_namespaceObject = require("./intent.js");
|
|
43
44
|
const external_internal_js_namespaceObject = require("./internal.js");
|
|
44
|
-
const external_logger_js_namespaceObject = require("./logger.js");
|
|
45
45
|
const external_mcp_payloads_js_namespaceObject = require("./mcp-payloads.js");
|
|
46
46
|
const external_mcp_sdk_compat_js_namespaceObject = require("./mcp-sdk-compat.js");
|
|
47
47
|
const external_session_js_namespaceObject = require("./session.js");
|
|
@@ -50,26 +50,26 @@ const external_tools_js_namespaceObject = require("./tools.js");
|
|
|
50
50
|
const external_tracing_helpers_js_namespaceObject = require("./tracing-helpers.js");
|
|
51
51
|
async function captureToolCall(params) {
|
|
52
52
|
const { server, data, request, extra, execute, parameterOwnership, eventType, explicitContextIntent, takeCapturedError } = params;
|
|
53
|
-
const
|
|
54
|
-
const
|
|
53
|
+
const resolvedEventType = eventType ?? external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpToolsCall;
|
|
54
|
+
const ownership = getActiveAnalyticsParameterOwnership(data, request.params?.name, parameterOwnership, resolvedEventType === external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpMissingCapability);
|
|
55
|
+
const conversation = (0, external_conversation_id_js_namespaceObject.resolveConversationId)(ownership.conversationId, request.params?.arguments, request.params?.name, resolvedEventType === external_event_types_js_namespaceObject.MCPAnalyticsEventType.mcpMissingCapability ? (0, external_tools_js_namespaceObject.resolveMissingCapabilityToolName)(data.options) : '');
|
|
55
56
|
const downstreamRequest = cloneRequestWithoutOwnedAnalyticsArguments(request, ownership);
|
|
56
57
|
const startTime = new Date();
|
|
57
|
-
const event = await prepareToolCallEvent(server, data, request, downstreamRequest, extra, startTime, conversation, ownership,
|
|
58
|
+
const event = await prepareToolCallEvent(server, data, request, downstreamRequest, extra, startTime, conversation, ownership, resolvedEventType);
|
|
58
59
|
if (event && explicitContextIntent) (0, external_intent_js_namespaceObject.setExplicitContextIntent)(event, explicitContextIntent);
|
|
59
60
|
let result;
|
|
60
61
|
try {
|
|
61
62
|
result = await execute(downstreamRequest);
|
|
62
63
|
} catch (error) {
|
|
63
|
-
publishFailedToolEvent(server, event, error, startTime, conversation);
|
|
64
|
+
publishFailedToolEvent(server, event, error, startTime, conversation, data.logger);
|
|
64
65
|
throw error;
|
|
65
66
|
}
|
|
66
67
|
const finalResult = applyConversationPromptBack(event, result, conversation);
|
|
67
|
-
publishSuccessfulToolEvent(server, event, finalResult, startTime, takeCapturedError);
|
|
68
|
+
publishSuccessfulToolEvent(server, event, finalResult, startTime, data.logger, takeCapturedError);
|
|
68
69
|
return finalResult;
|
|
69
70
|
}
|
|
70
|
-
function getActiveAnalyticsParameterOwnership(data, toolName, override) {
|
|
71
|
+
function getActiveAnalyticsParameterOwnership(data, toolName, override, isMissingCapabilityTool) {
|
|
71
72
|
const ownership = override ?? (toolName ? data.toolAnalyticsParameterOwnership.get(toolName) : void 0);
|
|
72
|
-
const isMissingCapabilityTool = toolName === (0, external_tools_js_namespaceObject.resolveMissingCapabilityToolName)(data.options);
|
|
73
73
|
return {
|
|
74
74
|
context: !isMissingCapabilityTool && (0, external_context_parameters_js_namespaceObject.isContextEnabled)(data.options.context) && ownership?.context === true,
|
|
75
75
|
conversationId: !isMissingCapabilityTool && true === data.options.enableConversationId && ownership?.conversationId === true
|
|
@@ -107,7 +107,7 @@ async function prepareToolCallEvent(server, data, request, downstreamRequest, ex
|
|
|
107
107
|
(0, external_intent_js_namespaceObject.setEventIntent)(event, await (0, external_intent_js_namespaceObject.resolveToolCallIntent)(data, request, ownership.context, extra));
|
|
108
108
|
return event;
|
|
109
109
|
} catch (error) {
|
|
110
|
-
|
|
110
|
+
data.logger(`Warning: PostHog MCP analytics instrumentation failed for tool ${request.params?.name}, the tool will still run - ${error}`);
|
|
111
111
|
return null;
|
|
112
112
|
}
|
|
113
113
|
}
|
|
@@ -117,7 +117,7 @@ function applyConversationPromptBack(event, result, conversation) {
|
|
|
117
117
|
if (event) event.conversationId = void 0;
|
|
118
118
|
return result;
|
|
119
119
|
}
|
|
120
|
-
function publishSuccessfulToolEvent(server, event, result, startTime, takeCapturedError) {
|
|
120
|
+
function publishSuccessfulToolEvent(server, event, result, startTime, logger, takeCapturedError) {
|
|
121
121
|
if (!event) return;
|
|
122
122
|
try {
|
|
123
123
|
if ((0, external_tracing_helpers_js_namespaceObject.isToolResultError)(result)) {
|
|
@@ -127,38 +127,71 @@ function publishSuccessfulToolEvent(server, event, result, startTime, takeCaptur
|
|
|
127
127
|
} else event.isError = false;
|
|
128
128
|
event.response = result;
|
|
129
129
|
event.duration = Date.now() - startTime.getTime();
|
|
130
|
-
(0, external_capture_js_namespaceObject.captureEvent)(server, event);
|
|
130
|
+
(0, external_capture_js_namespaceObject.captureEvent)(server, event, logger);
|
|
131
131
|
} catch (error) {
|
|
132
|
-
(
|
|
132
|
+
logger(`Warning: PostHog MCP analytics failed to publish tool event - ${error}`);
|
|
133
133
|
}
|
|
134
134
|
}
|
|
135
|
-
function publishFailedToolEvent(server, event, error, startTime, conversation) {
|
|
135
|
+
function publishFailedToolEvent(server, event, error, startTime, conversation, logger) {
|
|
136
136
|
if (!event) return;
|
|
137
137
|
try {
|
|
138
138
|
if (conversation.minted) event.conversationId = void 0;
|
|
139
139
|
event.isError = true;
|
|
140
140
|
event.error = (0, external_exceptions_js_namespaceObject.captureException)(error);
|
|
141
141
|
event.duration = Date.now() - startTime.getTime();
|
|
142
|
-
(0, external_capture_js_namespaceObject.captureEvent)(server, event);
|
|
142
|
+
(0, external_capture_js_namespaceObject.captureEvent)(server, event, logger);
|
|
143
143
|
} catch (publishError) {
|
|
144
|
-
(
|
|
144
|
+
logger(`Warning: PostHog MCP analytics failed to publish failed tool event - ${publishError}`);
|
|
145
145
|
}
|
|
146
146
|
}
|
|
147
|
+
const originalRequestHandlers = new WeakMap();
|
|
148
|
+
function rememberOriginalRequestHandler(server, handlerName, originalHandler) {
|
|
149
|
+
let handlers = originalRequestHandlers.get(server);
|
|
150
|
+
if (!handlers) {
|
|
151
|
+
handlers = new Map();
|
|
152
|
+
originalRequestHandlers.set(server, handlers);
|
|
153
|
+
}
|
|
154
|
+
handlers.set(handlerName, originalHandler);
|
|
155
|
+
}
|
|
147
156
|
function patchRequestHandlers(server, patches) {
|
|
148
157
|
for (const [handlerName, patch] of Object.entries(patches)){
|
|
149
158
|
const originalHandler = server._requestHandlers.get(handlerName);
|
|
150
|
-
if (originalHandler)
|
|
159
|
+
if (originalHandler) {
|
|
160
|
+
rememberOriginalRequestHandler(server, handlerName, originalHandler);
|
|
161
|
+
server._requestHandlers.set(handlerName, (request, extra)=>patch(server, originalHandler, request, extra));
|
|
162
|
+
}
|
|
151
163
|
}
|
|
152
164
|
const originalSetRequestHandler = server.setRequestHandler.bind(server);
|
|
153
165
|
server.setRequestHandler = (requestSchema, originalHandler)=>{
|
|
154
166
|
const shape = (0, external_mcp_sdk_compat_js_namespaceObject.getObjectShape)(requestSchema);
|
|
155
167
|
const handlerName = shape?.method ? (0, external_mcp_sdk_compat_js_namespaceObject.getLiteralValue)(shape.method) : void 0;
|
|
156
168
|
const patch = 'string' == typeof handlerName ? patches[handlerName] : void 0;
|
|
157
|
-
if (!patch) return originalSetRequestHandler(requestSchema, originalHandler);
|
|
158
|
-
|
|
169
|
+
if (!patch || 'string' != typeof handlerName) return originalSetRequestHandler(requestSchema, originalHandler);
|
|
170
|
+
const result = originalSetRequestHandler(requestSchema, originalHandler);
|
|
171
|
+
const registeredHandler = server._requestHandlers.get(handlerName);
|
|
172
|
+
if (registeredHandler) {
|
|
173
|
+
rememberOriginalRequestHandler(server, handlerName, registeredHandler);
|
|
174
|
+
server._requestHandlers.set(handlerName, (request, extra)=>patch(server, registeredHandler, request, extra));
|
|
175
|
+
}
|
|
176
|
+
return result;
|
|
159
177
|
};
|
|
160
178
|
}
|
|
161
|
-
async function
|
|
179
|
+
async function isToolAdvertised(server, toolName, extra, logger) {
|
|
180
|
+
const listHandler = originalRequestHandlers.get(server)?.get('tools/list');
|
|
181
|
+
if (!listHandler || !server._requestHandlers.has('tools/list')) return;
|
|
182
|
+
try {
|
|
183
|
+
const response = await listHandler({
|
|
184
|
+
method: 'tools/list',
|
|
185
|
+
params: {}
|
|
186
|
+
}, extra);
|
|
187
|
+
if (!response || !Array.isArray(response.tools)) return;
|
|
188
|
+
return response.tools.some((tool)=>tool?.name === toolName);
|
|
189
|
+
} catch (error) {
|
|
190
|
+
logger(`Warning: PostHog MCP analytics could not determine whether "${toolName}" is advertised; delegating to the server - ${error}`);
|
|
191
|
+
return;
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
async function handleListToolsRequest(server, originalListToolsHandler, request, extra, logger) {
|
|
162
195
|
const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
|
|
163
196
|
const startTime = new Date();
|
|
164
197
|
const event = {
|
|
@@ -169,19 +202,19 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
|
|
|
169
202
|
};
|
|
170
203
|
(0, external_client_identity_js_namespaceObject.stampMetaClientInfo)(event, request);
|
|
171
204
|
if (data) await (0, external_tracing_helpers_js_namespaceObject.applyResolvedMetadata)(event, data, request, extra);
|
|
172
|
-
const tools = await getTracedToolsList(server, originalListToolsHandler, request, extra, event);
|
|
205
|
+
const tools = await getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger);
|
|
173
206
|
if (!data) {
|
|
174
|
-
(
|
|
207
|
+
logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
175
208
|
return {
|
|
176
209
|
tools
|
|
177
210
|
};
|
|
178
211
|
}
|
|
179
212
|
if (0 === tools.length) {
|
|
180
|
-
|
|
213
|
+
data.logger('Warning: No tools found in the original list. This is likely due to the tools not being registered before PostHog MCP analytics.instrument().');
|
|
181
214
|
event.error = (0, external_exceptions_js_namespaceObject.captureException)('No tools were sent to MCP client.');
|
|
182
215
|
event.isError = true;
|
|
183
216
|
event.duration = Date.now() - startTime.getTime();
|
|
184
|
-
(0, external_capture_js_namespaceObject.captureEvent)(server, event);
|
|
217
|
+
(0, external_capture_js_namespaceObject.captureEvent)(server, event, data.logger);
|
|
185
218
|
return {
|
|
186
219
|
tools
|
|
187
220
|
};
|
|
@@ -192,7 +225,7 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
|
|
|
192
225
|
event.listedToolNames = collectListedToolNames(tools);
|
|
193
226
|
event.isError = false;
|
|
194
227
|
event.duration = Date.now() - startTime.getTime();
|
|
195
|
-
(0, external_capture_js_namespaceObject.captureEvent)(server, event);
|
|
228
|
+
(0, external_capture_js_namespaceObject.captureEvent)(server, event, data.logger);
|
|
196
229
|
return {
|
|
197
230
|
tools
|
|
198
231
|
};
|
|
@@ -205,18 +238,27 @@ function collectListedToolNames(tools) {
|
|
|
205
238
|
const names = tools.map((tool)=>tool?.name).filter((name)=>'string' == typeof name);
|
|
206
239
|
return names.length > 0 ? names : void 0;
|
|
207
240
|
}
|
|
208
|
-
async function getTracedToolsList(server, originalListToolsHandler, request, extra, event) {
|
|
241
|
+
async function getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger) {
|
|
209
242
|
try {
|
|
210
243
|
const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
|
|
211
244
|
const originalResponse = await originalListToolsHandler(request, extra);
|
|
212
|
-
let tools =
|
|
245
|
+
let tools = [
|
|
246
|
+
...originalResponse.tools || []
|
|
247
|
+
];
|
|
213
248
|
if (data) cacheToolAnalyticsParameterOwnership(data.toolAnalyticsParameterOwnership, tools);
|
|
214
|
-
if (data && (0, external_context_parameters_js_namespaceObject.isContextEnabled)(data.options.context)) tools = (0, external_context_parameters_js_namespaceObject.addContextParameterToTools)(tools, (0, external_context_parameters_js_namespaceObject.getContextDescription)(data.options.context));
|
|
215
|
-
if (data
|
|
216
|
-
if (data?.options.reportMissing) {
|
|
249
|
+
if (data && (0, external_context_parameters_js_namespaceObject.isContextEnabled)(data.options.context)) tools = (0, external_context_parameters_js_namespaceObject.addContextParameterToTools)(tools, (0, external_context_parameters_js_namespaceObject.getContextDescription)(data.options.context), data.logger);
|
|
250
|
+
if (data) {
|
|
217
251
|
const missingToolName = (0, external_tools_js_namespaceObject.resolveMissingCapabilityToolName)(data.options);
|
|
218
|
-
|
|
219
|
-
if (
|
|
252
|
+
let injectedMissingCapabilityTool = false;
|
|
253
|
+
if (data.options.reportMissing) {
|
|
254
|
+
const alreadyPresent = tools.some((tool)=>tool?.name === missingToolName);
|
|
255
|
+
if (alreadyPresent) data.logger(`Warning: Cannot inject missing-capability tool "${missingToolName}" because a real tool already uses that name. The real tool will not be intercepted.`);
|
|
256
|
+
else {
|
|
257
|
+
tools.push((0, external_tools_js_namespaceObject.getReportMissingToolDescriptor)(missingToolName));
|
|
258
|
+
injectedMissingCapabilityTool = true;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
if (data.options.enableConversationId) tools = (0, external_conversation_id_js_namespaceObject.addConversationIdToTools)(tools, missingToolName, injectedMissingCapabilityTool, data.logger);
|
|
220
262
|
}
|
|
221
263
|
if (data) {
|
|
222
264
|
cacheToolDescriptions(data.toolDescriptions, tools);
|
|
@@ -224,11 +266,11 @@ async function getTracedToolsList(server, originalListToolsHandler, request, ext
|
|
|
224
266
|
}
|
|
225
267
|
return tools;
|
|
226
268
|
} catch (error) {
|
|
227
|
-
(
|
|
269
|
+
logger(`Warning: Original list tools handler failed, this suggests an error PostHog MCP analytics did not cause - ${error}`);
|
|
228
270
|
event.error = (0, external_exceptions_js_namespaceObject.captureException)(error);
|
|
229
271
|
event.isError = true;
|
|
230
272
|
event.duration = event.timestamp ? Date.now() - event.timestamp.getTime() : 0;
|
|
231
|
-
(0, external_capture_js_namespaceObject.captureEvent)(server, event);
|
|
273
|
+
(0, external_capture_js_namespaceObject.captureEvent)(server, event, logger);
|
|
232
274
|
throw error;
|
|
233
275
|
}
|
|
234
276
|
}
|
|
@@ -273,7 +315,7 @@ function mintStatelessSessionOnInitialize(server, data, request, extra) {
|
|
|
273
315
|
(0, external_internal_js_namespaceObject.setServerTrackingData)(server, data);
|
|
274
316
|
return sessionId;
|
|
275
317
|
} catch (error) {
|
|
276
|
-
|
|
318
|
+
data.logger(`Warning: PostHog MCP analytics failed to mint a stateless session id - ${error}`);
|
|
277
319
|
return;
|
|
278
320
|
}
|
|
279
321
|
}
|
|
@@ -289,7 +331,7 @@ function upgradeMintedTokenToNegotiated(server, data, mintedSessionId, negotiate
|
|
|
289
331
|
});
|
|
290
332
|
(0, external_session_token_js_namespaceObject.writeSessionIdToTransport)(transport, token);
|
|
291
333
|
} catch (error) {
|
|
292
|
-
|
|
334
|
+
data.logger(`Warning: PostHog MCP analytics failed to upgrade the stateless session token - ${error}`);
|
|
293
335
|
}
|
|
294
336
|
}
|
|
295
337
|
function readInitializeClientInfo(request) {
|
|
@@ -301,10 +343,10 @@ function readInitializeClientInfo(request) {
|
|
|
301
343
|
version: 'string' == typeof version ? version : void 0
|
|
302
344
|
};
|
|
303
345
|
}
|
|
304
|
-
async function handleInitializeRequest(server, originalInitializeHandler, request, extra) {
|
|
346
|
+
async function handleInitializeRequest(server, originalInitializeHandler, request, extra, logger) {
|
|
305
347
|
const data = (0, external_internal_js_namespaceObject.getServerTrackingData)(server);
|
|
306
348
|
if (!data) {
|
|
307
|
-
(
|
|
349
|
+
logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
308
350
|
return await originalInitializeHandler(request, extra);
|
|
309
351
|
}
|
|
310
352
|
const mintedSessionId = mintStatelessSessionOnInitialize(server, data, request, extra);
|
|
@@ -326,7 +368,7 @@ async function handleInitializeRequest(server, originalInitializeHandler, reques
|
|
|
326
368
|
data.sessionInfo.protocolVersion = negotiatedProtocolVersion;
|
|
327
369
|
(0, external_internal_js_namespaceObject.setServerTrackingData)(server, data);
|
|
328
370
|
if (mintedSessionId) upgradeMintedTokenToNegotiated(server, data, mintedSessionId, negotiatedProtocolVersion);
|
|
329
|
-
(0, external_capture_js_namespaceObject.captureEvent)(server, event);
|
|
371
|
+
(0, external_capture_js_namespaceObject.captureEvent)(server, event, data.logger);
|
|
330
372
|
return result;
|
|
331
373
|
}
|
|
332
374
|
function readProtocolVersion(result, request) {
|
|
@@ -340,6 +382,7 @@ exports.cacheToolDescriptions = __webpack_exports__.cacheToolDescriptions;
|
|
|
340
382
|
exports.captureToolCall = __webpack_exports__.captureToolCall;
|
|
341
383
|
exports.handleInitializeRequest = __webpack_exports__.handleInitializeRequest;
|
|
342
384
|
exports.handleListToolsRequest = __webpack_exports__.handleListToolsRequest;
|
|
385
|
+
exports.isToolAdvertised = __webpack_exports__.isToolAdvertised;
|
|
343
386
|
exports.patchRequestHandlers = __webpack_exports__.patchRequestHandlers;
|
|
344
387
|
exports.readToolMetaCategory = __webpack_exports__.readToolMetaCategory;
|
|
345
388
|
for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
@@ -348,6 +391,7 @@ for(var __webpack_i__ in __webpack_exports__)if (-1 === [
|
|
|
348
391
|
"captureToolCall",
|
|
349
392
|
"handleInitializeRequest",
|
|
350
393
|
"handleListToolsRequest",
|
|
394
|
+
"isToolAdvertised",
|
|
351
395
|
"patchRequestHandlers",
|
|
352
396
|
"readToolMetaCategory"
|
|
353
397
|
].indexOf(__webpack_i__)) exports[__webpack_i__] = __webpack_exports__[__webpack_i__];
|
|
@@ -7,7 +7,6 @@ import { MCPAnalyticsEventType } from "./event-types.mjs";
|
|
|
7
7
|
import { captureException } from "./exceptions.mjs";
|
|
8
8
|
import { resolveToolCallIntent, setEventIntent, setExplicitContextIntent } from "./intent.mjs";
|
|
9
9
|
import { getServerTrackingData, handleIdentify, setServerTrackingData } from "./internal.mjs";
|
|
10
|
-
import { log } from "./logger.mjs";
|
|
11
10
|
import { buildCapturedMcpParameters } from "./mcp-payloads.mjs";
|
|
12
11
|
import { getLiteralValue, getObjectShape } from "./mcp-sdk-compat.mjs";
|
|
13
12
|
import { getSessionId, newSessionId } from "./session.mjs";
|
|
@@ -16,26 +15,26 @@ import { getReportMissingToolDescriptor, resolveMissingCapabilityToolName } from
|
|
|
16
15
|
import { applyResolvedMetadata, isToolResultError } from "./tracing-helpers.mjs";
|
|
17
16
|
async function captureToolCall(params) {
|
|
18
17
|
const { server, data, request, extra, execute, parameterOwnership, eventType, explicitContextIntent, takeCapturedError } = params;
|
|
19
|
-
const
|
|
20
|
-
const
|
|
18
|
+
const resolvedEventType = eventType ?? MCPAnalyticsEventType.mcpToolsCall;
|
|
19
|
+
const ownership = getActiveAnalyticsParameterOwnership(data, request.params?.name, parameterOwnership, resolvedEventType === MCPAnalyticsEventType.mcpMissingCapability);
|
|
20
|
+
const conversation = resolveConversationId(ownership.conversationId, request.params?.arguments, request.params?.name, resolvedEventType === MCPAnalyticsEventType.mcpMissingCapability ? resolveMissingCapabilityToolName(data.options) : '');
|
|
21
21
|
const downstreamRequest = cloneRequestWithoutOwnedAnalyticsArguments(request, ownership);
|
|
22
22
|
const startTime = new Date();
|
|
23
|
-
const event = await prepareToolCallEvent(server, data, request, downstreamRequest, extra, startTime, conversation, ownership,
|
|
23
|
+
const event = await prepareToolCallEvent(server, data, request, downstreamRequest, extra, startTime, conversation, ownership, resolvedEventType);
|
|
24
24
|
if (event && explicitContextIntent) setExplicitContextIntent(event, explicitContextIntent);
|
|
25
25
|
let result;
|
|
26
26
|
try {
|
|
27
27
|
result = await execute(downstreamRequest);
|
|
28
28
|
} catch (error) {
|
|
29
|
-
publishFailedToolEvent(server, event, error, startTime, conversation);
|
|
29
|
+
publishFailedToolEvent(server, event, error, startTime, conversation, data.logger);
|
|
30
30
|
throw error;
|
|
31
31
|
}
|
|
32
32
|
const finalResult = applyConversationPromptBack(event, result, conversation);
|
|
33
|
-
publishSuccessfulToolEvent(server, event, finalResult, startTime, takeCapturedError);
|
|
33
|
+
publishSuccessfulToolEvent(server, event, finalResult, startTime, data.logger, takeCapturedError);
|
|
34
34
|
return finalResult;
|
|
35
35
|
}
|
|
36
|
-
function getActiveAnalyticsParameterOwnership(data, toolName, override) {
|
|
36
|
+
function getActiveAnalyticsParameterOwnership(data, toolName, override, isMissingCapabilityTool) {
|
|
37
37
|
const ownership = override ?? (toolName ? data.toolAnalyticsParameterOwnership.get(toolName) : void 0);
|
|
38
|
-
const isMissingCapabilityTool = toolName === resolveMissingCapabilityToolName(data.options);
|
|
39
38
|
return {
|
|
40
39
|
context: !isMissingCapabilityTool && isContextEnabled(data.options.context) && ownership?.context === true,
|
|
41
40
|
conversationId: !isMissingCapabilityTool && true === data.options.enableConversationId && ownership?.conversationId === true
|
|
@@ -73,7 +72,7 @@ async function prepareToolCallEvent(server, data, request, downstreamRequest, ex
|
|
|
73
72
|
setEventIntent(event, await resolveToolCallIntent(data, request, ownership.context, extra));
|
|
74
73
|
return event;
|
|
75
74
|
} catch (error) {
|
|
76
|
-
|
|
75
|
+
data.logger(`Warning: PostHog MCP analytics instrumentation failed for tool ${request.params?.name}, the tool will still run - ${error}`);
|
|
77
76
|
return null;
|
|
78
77
|
}
|
|
79
78
|
}
|
|
@@ -83,7 +82,7 @@ function applyConversationPromptBack(event, result, conversation) {
|
|
|
83
82
|
if (event) event.conversationId = void 0;
|
|
84
83
|
return result;
|
|
85
84
|
}
|
|
86
|
-
function publishSuccessfulToolEvent(server, event, result, startTime, takeCapturedError) {
|
|
85
|
+
function publishSuccessfulToolEvent(server, event, result, startTime, logger, takeCapturedError) {
|
|
87
86
|
if (!event) return;
|
|
88
87
|
try {
|
|
89
88
|
if (isToolResultError(result)) {
|
|
@@ -93,38 +92,71 @@ function publishSuccessfulToolEvent(server, event, result, startTime, takeCaptur
|
|
|
93
92
|
} else event.isError = false;
|
|
94
93
|
event.response = result;
|
|
95
94
|
event.duration = Date.now() - startTime.getTime();
|
|
96
|
-
captureEvent(server, event);
|
|
95
|
+
captureEvent(server, event, logger);
|
|
97
96
|
} catch (error) {
|
|
98
|
-
|
|
97
|
+
logger(`Warning: PostHog MCP analytics failed to publish tool event - ${error}`);
|
|
99
98
|
}
|
|
100
99
|
}
|
|
101
|
-
function publishFailedToolEvent(server, event, error, startTime, conversation) {
|
|
100
|
+
function publishFailedToolEvent(server, event, error, startTime, conversation, logger) {
|
|
102
101
|
if (!event) return;
|
|
103
102
|
try {
|
|
104
103
|
if (conversation.minted) event.conversationId = void 0;
|
|
105
104
|
event.isError = true;
|
|
106
105
|
event.error = captureException(error);
|
|
107
106
|
event.duration = Date.now() - startTime.getTime();
|
|
108
|
-
captureEvent(server, event);
|
|
107
|
+
captureEvent(server, event, logger);
|
|
109
108
|
} catch (publishError) {
|
|
110
|
-
|
|
109
|
+
logger(`Warning: PostHog MCP analytics failed to publish failed tool event - ${publishError}`);
|
|
111
110
|
}
|
|
112
111
|
}
|
|
112
|
+
const originalRequestHandlers = new WeakMap();
|
|
113
|
+
function rememberOriginalRequestHandler(server, handlerName, originalHandler) {
|
|
114
|
+
let handlers = originalRequestHandlers.get(server);
|
|
115
|
+
if (!handlers) {
|
|
116
|
+
handlers = new Map();
|
|
117
|
+
originalRequestHandlers.set(server, handlers);
|
|
118
|
+
}
|
|
119
|
+
handlers.set(handlerName, originalHandler);
|
|
120
|
+
}
|
|
113
121
|
function patchRequestHandlers(server, patches) {
|
|
114
122
|
for (const [handlerName, patch] of Object.entries(patches)){
|
|
115
123
|
const originalHandler = server._requestHandlers.get(handlerName);
|
|
116
|
-
if (originalHandler)
|
|
124
|
+
if (originalHandler) {
|
|
125
|
+
rememberOriginalRequestHandler(server, handlerName, originalHandler);
|
|
126
|
+
server._requestHandlers.set(handlerName, (request, extra)=>patch(server, originalHandler, request, extra));
|
|
127
|
+
}
|
|
117
128
|
}
|
|
118
129
|
const originalSetRequestHandler = server.setRequestHandler.bind(server);
|
|
119
130
|
server.setRequestHandler = (requestSchema, originalHandler)=>{
|
|
120
131
|
const shape = getObjectShape(requestSchema);
|
|
121
132
|
const handlerName = shape?.method ? getLiteralValue(shape.method) : void 0;
|
|
122
133
|
const patch = 'string' == typeof handlerName ? patches[handlerName] : void 0;
|
|
123
|
-
if (!patch) return originalSetRequestHandler(requestSchema, originalHandler);
|
|
124
|
-
|
|
134
|
+
if (!patch || 'string' != typeof handlerName) return originalSetRequestHandler(requestSchema, originalHandler);
|
|
135
|
+
const result = originalSetRequestHandler(requestSchema, originalHandler);
|
|
136
|
+
const registeredHandler = server._requestHandlers.get(handlerName);
|
|
137
|
+
if (registeredHandler) {
|
|
138
|
+
rememberOriginalRequestHandler(server, handlerName, registeredHandler);
|
|
139
|
+
server._requestHandlers.set(handlerName, (request, extra)=>patch(server, registeredHandler, request, extra));
|
|
140
|
+
}
|
|
141
|
+
return result;
|
|
125
142
|
};
|
|
126
143
|
}
|
|
127
|
-
async function
|
|
144
|
+
async function isToolAdvertised(server, toolName, extra, logger) {
|
|
145
|
+
const listHandler = originalRequestHandlers.get(server)?.get('tools/list');
|
|
146
|
+
if (!listHandler || !server._requestHandlers.has('tools/list')) return;
|
|
147
|
+
try {
|
|
148
|
+
const response = await listHandler({
|
|
149
|
+
method: 'tools/list',
|
|
150
|
+
params: {}
|
|
151
|
+
}, extra);
|
|
152
|
+
if (!response || !Array.isArray(response.tools)) return;
|
|
153
|
+
return response.tools.some((tool)=>tool?.name === toolName);
|
|
154
|
+
} catch (error) {
|
|
155
|
+
logger(`Warning: PostHog MCP analytics could not determine whether "${toolName}" is advertised; delegating to the server - ${error}`);
|
|
156
|
+
return;
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
async function handleListToolsRequest(server, originalListToolsHandler, request, extra, logger) {
|
|
128
160
|
const data = getServerTrackingData(server);
|
|
129
161
|
const startTime = new Date();
|
|
130
162
|
const event = {
|
|
@@ -135,19 +167,19 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
|
|
|
135
167
|
};
|
|
136
168
|
stampMetaClientInfo(event, request);
|
|
137
169
|
if (data) await applyResolvedMetadata(event, data, request, extra);
|
|
138
|
-
const tools = await getTracedToolsList(server, originalListToolsHandler, request, extra, event);
|
|
170
|
+
const tools = await getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger);
|
|
139
171
|
if (!data) {
|
|
140
|
-
|
|
172
|
+
logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
141
173
|
return {
|
|
142
174
|
tools
|
|
143
175
|
};
|
|
144
176
|
}
|
|
145
177
|
if (0 === tools.length) {
|
|
146
|
-
|
|
178
|
+
data.logger('Warning: No tools found in the original list. This is likely due to the tools not being registered before PostHog MCP analytics.instrument().');
|
|
147
179
|
event.error = captureException('No tools were sent to MCP client.');
|
|
148
180
|
event.isError = true;
|
|
149
181
|
event.duration = Date.now() - startTime.getTime();
|
|
150
|
-
captureEvent(server, event);
|
|
182
|
+
captureEvent(server, event, data.logger);
|
|
151
183
|
return {
|
|
152
184
|
tools
|
|
153
185
|
};
|
|
@@ -158,7 +190,7 @@ async function handleListToolsRequest(server, originalListToolsHandler, request,
|
|
|
158
190
|
event.listedToolNames = collectListedToolNames(tools);
|
|
159
191
|
event.isError = false;
|
|
160
192
|
event.duration = Date.now() - startTime.getTime();
|
|
161
|
-
captureEvent(server, event);
|
|
193
|
+
captureEvent(server, event, data.logger);
|
|
162
194
|
return {
|
|
163
195
|
tools
|
|
164
196
|
};
|
|
@@ -171,18 +203,27 @@ function collectListedToolNames(tools) {
|
|
|
171
203
|
const names = tools.map((tool)=>tool?.name).filter((name)=>'string' == typeof name);
|
|
172
204
|
return names.length > 0 ? names : void 0;
|
|
173
205
|
}
|
|
174
|
-
async function getTracedToolsList(server, originalListToolsHandler, request, extra, event) {
|
|
206
|
+
async function getTracedToolsList(server, originalListToolsHandler, request, extra, event, logger) {
|
|
175
207
|
try {
|
|
176
208
|
const data = getServerTrackingData(server);
|
|
177
209
|
const originalResponse = await originalListToolsHandler(request, extra);
|
|
178
|
-
let tools =
|
|
210
|
+
let tools = [
|
|
211
|
+
...originalResponse.tools || []
|
|
212
|
+
];
|
|
179
213
|
if (data) cacheToolAnalyticsParameterOwnership(data.toolAnalyticsParameterOwnership, tools);
|
|
180
|
-
if (data && isContextEnabled(data.options.context)) tools = addContextParameterToTools(tools, getContextDescription(data.options.context));
|
|
181
|
-
if (data
|
|
182
|
-
if (data?.options.reportMissing) {
|
|
214
|
+
if (data && isContextEnabled(data.options.context)) tools = addContextParameterToTools(tools, getContextDescription(data.options.context), data.logger);
|
|
215
|
+
if (data) {
|
|
183
216
|
const missingToolName = resolveMissingCapabilityToolName(data.options);
|
|
184
|
-
|
|
185
|
-
if (
|
|
217
|
+
let injectedMissingCapabilityTool = false;
|
|
218
|
+
if (data.options.reportMissing) {
|
|
219
|
+
const alreadyPresent = tools.some((tool)=>tool?.name === missingToolName);
|
|
220
|
+
if (alreadyPresent) data.logger(`Warning: Cannot inject missing-capability tool "${missingToolName}" because a real tool already uses that name. The real tool will not be intercepted.`);
|
|
221
|
+
else {
|
|
222
|
+
tools.push(getReportMissingToolDescriptor(missingToolName));
|
|
223
|
+
injectedMissingCapabilityTool = true;
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
if (data.options.enableConversationId) tools = addConversationIdToTools(tools, missingToolName, injectedMissingCapabilityTool, data.logger);
|
|
186
227
|
}
|
|
187
228
|
if (data) {
|
|
188
229
|
cacheToolDescriptions(data.toolDescriptions, tools);
|
|
@@ -190,11 +231,11 @@ async function getTracedToolsList(server, originalListToolsHandler, request, ext
|
|
|
190
231
|
}
|
|
191
232
|
return tools;
|
|
192
233
|
} catch (error) {
|
|
193
|
-
|
|
234
|
+
logger(`Warning: Original list tools handler failed, this suggests an error PostHog MCP analytics did not cause - ${error}`);
|
|
194
235
|
event.error = captureException(error);
|
|
195
236
|
event.isError = true;
|
|
196
237
|
event.duration = event.timestamp ? Date.now() - event.timestamp.getTime() : 0;
|
|
197
|
-
captureEvent(server, event);
|
|
238
|
+
captureEvent(server, event, logger);
|
|
198
239
|
throw error;
|
|
199
240
|
}
|
|
200
241
|
}
|
|
@@ -239,7 +280,7 @@ function mintStatelessSessionOnInitialize(server, data, request, extra) {
|
|
|
239
280
|
setServerTrackingData(server, data);
|
|
240
281
|
return sessionId;
|
|
241
282
|
} catch (error) {
|
|
242
|
-
|
|
283
|
+
data.logger(`Warning: PostHog MCP analytics failed to mint a stateless session id - ${error}`);
|
|
243
284
|
return;
|
|
244
285
|
}
|
|
245
286
|
}
|
|
@@ -255,7 +296,7 @@ function upgradeMintedTokenToNegotiated(server, data, mintedSessionId, negotiate
|
|
|
255
296
|
});
|
|
256
297
|
writeSessionIdToTransport(transport, token);
|
|
257
298
|
} catch (error) {
|
|
258
|
-
|
|
299
|
+
data.logger(`Warning: PostHog MCP analytics failed to upgrade the stateless session token - ${error}`);
|
|
259
300
|
}
|
|
260
301
|
}
|
|
261
302
|
function readInitializeClientInfo(request) {
|
|
@@ -267,10 +308,10 @@ function readInitializeClientInfo(request) {
|
|
|
267
308
|
version: 'string' == typeof version ? version : void 0
|
|
268
309
|
};
|
|
269
310
|
}
|
|
270
|
-
async function handleInitializeRequest(server, originalInitializeHandler, request, extra) {
|
|
311
|
+
async function handleInitializeRequest(server, originalInitializeHandler, request, extra, logger) {
|
|
271
312
|
const data = getServerTrackingData(server);
|
|
272
313
|
if (!data) {
|
|
273
|
-
|
|
314
|
+
logger('Warning: PostHog MCP analytics is unable to find server tracking data. Please ensure you have called instrument(server, options) before using tool calls.');
|
|
274
315
|
return await originalInitializeHandler(request, extra);
|
|
275
316
|
}
|
|
276
317
|
const mintedSessionId = mintStatelessSessionOnInitialize(server, data, request, extra);
|
|
@@ -292,7 +333,7 @@ async function handleInitializeRequest(server, originalInitializeHandler, reques
|
|
|
292
333
|
data.sessionInfo.protocolVersion = negotiatedProtocolVersion;
|
|
293
334
|
setServerTrackingData(server, data);
|
|
294
335
|
if (mintedSessionId) upgradeMintedTokenToNegotiated(server, data, mintedSessionId, negotiatedProtocolVersion);
|
|
295
|
-
captureEvent(server, event);
|
|
336
|
+
captureEvent(server, event, data.logger);
|
|
296
337
|
return result;
|
|
297
338
|
}
|
|
298
339
|
function readProtocolVersion(result, request) {
|
|
@@ -301,4 +342,4 @@ function readProtocolVersion(result, request) {
|
|
|
301
342
|
const requested = request.params?.protocolVersion;
|
|
302
343
|
return 'string' == typeof requested && requested.length > 0 ? requested : void 0;
|
|
303
344
|
}
|
|
304
|
-
export { cacheToolCategories, cacheToolDescriptions, captureToolCall, handleInitializeRequest, handleListToolsRequest, patchRequestHandlers, readToolMetaCategory };
|
|
345
|
+
export { cacheToolCategories, cacheToolDescriptions, captureToolCall, handleInitializeRequest, handleListToolsRequest, isToolAdvertised, patchRequestHandlers, readToolMetaCategory };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/extensions/intent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,EACd,QAAQ,EACT,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"intent.d.ts","sourceRoot":"","sources":["../../src/extensions/intent.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,wBAAwB,EACxB,cAAc,EACd,QAAQ,EACT,MAAM,UAAU,CAAA;AAGjB,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,wBAAwB,CAAA;CACjC;AAkCD,wBAAsB,qBAAqB,CACzC,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,cAAc,EACvB,oBAAoB,EAAE,OAAO,EAC7B,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAOhC;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,QAAQ,EAAE,cAAc,EAAE,cAAc,GAAG,IAAI,GAAG,IAAI,CAO3F;AAED,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAQ/E"}
|
|
@@ -29,7 +29,6 @@ __webpack_require__.d(__webpack_exports__, {
|
|
|
29
29
|
setEventIntent: ()=>setEventIntent
|
|
30
30
|
});
|
|
31
31
|
const external_context_parameters_js_namespaceObject = require("./context-parameters.js");
|
|
32
|
-
const external_logger_js_namespaceObject = require("./logger.js");
|
|
33
32
|
function getContextArgument(request) {
|
|
34
33
|
const context = request.params?.arguments?.context;
|
|
35
34
|
return 'string' == typeof context && context.trim() ? context : void 0;
|
|
@@ -48,13 +47,13 @@ async function runIntentFallback(data, request, extra) {
|
|
|
48
47
|
source: 'inferred'
|
|
49
48
|
} : null;
|
|
50
49
|
} catch (error) {
|
|
51
|
-
|
|
50
|
+
data.logger(`intentFallback callback error: ${error}`);
|
|
52
51
|
return null;
|
|
53
52
|
}
|
|
54
53
|
}
|
|
55
54
|
async function resolveToolCallIntent(data, request, analyticsOwnsContext, extra) {
|
|
56
55
|
const contextArgument = getContextArgument(request);
|
|
57
|
-
if (analyticsOwnsContext && (0, external_context_parameters_js_namespaceObject.isContextEnabled)(data.options.context) &&
|
|
56
|
+
if (analyticsOwnsContext && (0, external_context_parameters_js_namespaceObject.isContextEnabled)(data.options.context) && contextArgument) return {
|
|
58
57
|
intent: contextArgument,
|
|
59
58
|
source: 'context_parameter'
|
|
60
59
|
};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { isContextEnabled } from "./context-parameters.mjs";
|
|
2
|
-
import { log } from "./logger.mjs";
|
|
3
2
|
function getContextArgument(request) {
|
|
4
3
|
const context = request.params?.arguments?.context;
|
|
5
4
|
return 'string' == typeof context && context.trim() ? context : void 0;
|
|
@@ -18,13 +17,13 @@ async function runIntentFallback(data, request, extra) {
|
|
|
18
17
|
source: 'inferred'
|
|
19
18
|
} : null;
|
|
20
19
|
} catch (error) {
|
|
21
|
-
|
|
20
|
+
data.logger(`intentFallback callback error: ${error}`);
|
|
22
21
|
return null;
|
|
23
22
|
}
|
|
24
23
|
}
|
|
25
24
|
async function resolveToolCallIntent(data, request, analyticsOwnsContext, extra) {
|
|
26
25
|
const contextArgument = getContextArgument(request);
|
|
27
|
-
if (analyticsOwnsContext && isContextEnabled(data.options.context) &&
|
|
26
|
+
if (analyticsOwnsContext && isContextEnabled(data.options.context) && contextArgument) return {
|
|
28
27
|
intent: contextArgument,
|
|
29
28
|
source: 'context_parameter'
|
|
30
29
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/extensions/internal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAEb,YAAY,EACb,MAAM,UAAU,CAAA;
|
|
1
|
+
{"version":3,"file":"internal.d.ts","sourceRoot":"","sources":["../../src/extensions/internal.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EACV,6BAA6B,EAC7B,gBAAgB,EAChB,cAAc,EACd,aAAa,EAEb,YAAY,EACb,MAAM,UAAU,CAAA;AAKjB;;;;;GAKG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkC;IACzD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAQ;gBAErB,OAAO,SAAO;IAI1B,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,GAAG,SAAS;IAWhD,GAAG,CAAC,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,YAAY,GAAG,IAAI;IAapD,GAAG,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO;IAI/B,IAAI,IAAI,MAAM;CAGf;AAID,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,gBAAgB,GAAG,SAAS,CAEzF;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,EAAE,IAAI,EAAE,gBAAgB,GAAG,IAAI,CAEzF;AAED,wBAAgB,kBAAkB,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,GAAG,OAAO,CA4B5E;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,YAAY,GAAG,SAAS,EAAE,IAAI,EAAE,YAAY,GAAG,YAAY,CAapG;AAED;;;;;GAKG;AACH,wBAAsB,cAAc,CAClC,MAAM,EAAE,aAAa,EACrB,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,IAAI,CAAC,CAkDf;AAED;;;;GAIG;AACH,wBAAsB,sBAAsB,CAC1C,IAAI,EAAE,gBAAgB,EACtB,OAAO,EAAE,cAAc,EACvB,KAAK,CAAC,EAAE,6BAA6B,GACpC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC,CAUzC"}
|