@juspay/neurolink 12.59.0 → 13.0.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.
- package/CHANGELOG.md +3 -3
- package/dist/auth/anthropicOAuth.js +3 -3
- package/dist/auth/middleware/AuthMiddleware.d.ts +1 -1
- package/dist/auth/sessionManager.js +4 -4
- package/dist/auth/tokenStore.js +4 -4
- package/dist/browser/neurolink.min.js +474 -473
- package/dist/cli/commands/observability.d.ts +1 -6
- package/dist/cli/commands/observability.js +0 -106
- package/dist/cli/commands/proxy.js +9 -18
- package/dist/cli/commands/telemetry.d.ts +3 -13
- package/dist/cli/commands/telemetry.js +7 -354
- package/dist/cli/loop/session.js +1 -1
- package/dist/client/httpClient.js +1 -1
- package/dist/client/sseClient.js +1 -1
- package/dist/client/streamingClient.js +2 -2
- package/dist/client/wsClient.js +1 -1
- package/dist/constants/langfuse.d.ts +25 -0
- package/dist/constants/langfuse.js +38 -0
- package/dist/constants/telemetry.d.ts +20 -0
- package/dist/constants/telemetry.js +34 -0
- package/dist/core/baseProvider.d.ts +2 -1
- package/dist/core/baseProvider.js +4 -11
- package/dist/core/conversationMemoryManager.js +5 -8
- package/dist/core/factory.js +1 -1
- package/dist/core/geminiLoopAdapter.d.ts +8 -1
- package/dist/core/geminiLoopAdapter.js +25 -1
- package/dist/core/loopEngine.js +69 -40
- package/dist/core/modules/MessageBuilder.js +2 -2
- package/dist/core/modules/StreamHandler.js +2 -2
- package/dist/core/modules/TelemetryHandler.d.ts +2 -18
- package/dist/core/modules/TelemetryHandler.js +1 -66
- package/dist/core/modules/ToolsManager.js +40 -31
- package/dist/core/nativeGenerateLoop.js +78 -8
- package/dist/core/redisConversationMemoryManager.js +8 -15
- package/dist/core/toolExecutionGuards.js +1 -13
- package/dist/index.d.ts +5 -12
- package/dist/index.js +5 -37
- package/dist/mcp/batching/requestBatcher.js +1 -1
- package/dist/mcp/externalServerManager.js +3 -21
- package/dist/mcp/toolDiscoveryService.js +4 -16
- package/dist/mcp/toolRegistry.js +2 -5
- package/dist/memory/memoryRetrievalTools.js +1 -1
- package/dist/neurolink.d.ts +16 -27
- package/dist/neurolink.js +788 -792
- package/dist/observability/exporterSpanProcessor.d.ts +50 -0
- package/dist/observability/exporterSpanProcessor.js +181 -0
- package/dist/observability/exporters/langfuseExporter.d.ts +13 -34
- package/dist/observability/exporters/langfuseExporter.js +101 -154
- package/dist/observability/index.d.ts +1 -0
- package/dist/observability/index.js +1 -0
- package/dist/observability/langfuseMasking.d.ts +8 -0
- package/dist/observability/langfuseMasking.js +47 -0
- package/dist/observability/otlpEncoding.d.ts +20 -0
- package/dist/observability/otlpEncoding.js +85 -0
- package/dist/providers/amazonBedrock/client.js +142 -176
- package/dist/providers/amazonBedrock/loopAdapter.js +14 -1
- package/dist/providers/amazonSagemaker.js +118 -80
- package/dist/providers/anthropic/client.js +3 -52
- package/dist/providers/anthropic/loopAdapter.js +24 -1
- package/dist/providers/anthropic/rateLimitCapture.js +9 -12
- package/dist/providers/googleAiStudio/client.d.ts +4 -5
- package/dist/providers/googleAiStudio/client.js +38 -40
- package/dist/providers/googleVertex/client.d.ts +2 -7
- package/dist/providers/googleVertex/client.js +282 -378
- package/dist/providers/googleVertex/constants.js +2 -2
- package/dist/providers/litellm/client.d.ts +2 -9
- package/dist/providers/litellm/client.js +1 -63
- package/dist/providers/openAI/client.d.ts +1 -8
- package/dist/providers/openAI/client.js +0 -65
- package/dist/providers/openaiChatCompletionsBase.d.ts +1 -0
- package/dist/providers/openaiChatCompletionsBase.js +61 -4
- package/dist/providers/replicate.js +22 -4
- package/dist/proxy/codexUsage.js +7 -0
- package/dist/proxy/proxyFetch.js +19 -25
- package/dist/proxy/proxyTracer.d.ts +14 -7
- package/dist/proxy/proxyTracer.js +129 -83
- package/dist/proxy/proxyTranslationEngine.js +0 -1
- package/dist/proxy/requestLogger.d.ts +1 -1
- package/dist/proxy/requestLogger.js +39 -45
- package/dist/server/middleware/auth.d.ts +5 -1
- package/dist/server/middleware/auth.js +10 -3
- package/dist/server/middleware/common.js +1 -1
- package/dist/server/routes/agentRoutes.js +4 -4
- package/dist/server/routes/claudeProxyRoutes.js +99 -196
- package/dist/server/routes/codexProxyRoutes.js +621 -591
- package/dist/server/routes/healthRoutes.js +6 -6
- package/dist/server/routes/mcpRoutes.js +7 -7
- package/dist/server/routes/memoryRoutes.js +7 -7
- package/dist/server/routes/openApiRoutes.js +3 -3
- package/dist/server/routes/toolRoutes.js +5 -5
- package/dist/server/routes/transcribeRoutes.js +1 -1
- package/dist/server/utils/validation.d.ts +3 -3
- package/dist/services/server/ai/observability/instrumentation.d.ts +34 -201
- package/dist/services/server/ai/observability/instrumentation.js +220 -1267
- package/dist/services/server/ai/observability/langfuseSetup.d.ts +14 -0
- package/dist/services/server/ai/observability/langfuseSetup.js +55 -0
- package/dist/services/server/ai/observability/otlpSetup.d.ts +16 -0
- package/dist/services/server/ai/observability/otlpSetup.js +58 -0
- package/dist/session/globalSessionState.js +0 -11
- package/dist/telemetry/attributes.d.ts +23 -46
- package/dist/telemetry/attributes.js +76 -162
- package/dist/telemetry/chatMessages.d.ts +13 -0
- package/dist/telemetry/chatMessages.js +59 -0
- package/dist/telemetry/index.d.ts +5 -19
- package/dist/telemetry/index.js +5 -26
- package/dist/telemetry/observation.d.ts +37 -0
- package/dist/telemetry/observation.js +112 -0
- package/dist/telemetry/observationNames.d.ts +18 -0
- package/dist/telemetry/observationNames.js +24 -0
- package/dist/telemetry/spanSanitizer.d.ts +39 -0
- package/dist/telemetry/spanSanitizer.js +92 -0
- package/dist/telemetry/spanSerialization.d.ts +13 -0
- package/dist/telemetry/spanSerialization.js +46 -0
- package/dist/telemetry/tracers.d.ts +37 -18
- package/dist/telemetry/tracers.js +97 -19
- package/dist/telemetry/withSpan.d.ts +47 -25
- package/dist/telemetry/withSpan.js +158 -71
- package/dist/types/cli.d.ts +0 -11
- package/dist/types/decision.d.ts +3 -0
- package/dist/types/exporter.d.ts +54 -0
- package/dist/types/exporter.js +0 -4
- package/dist/types/generate.d.ts +4 -1
- package/dist/types/isolatedAgent.d.ts +5 -4
- package/dist/types/loopEngine.d.ts +18 -28
- package/dist/types/observability.d.ts +127 -160
- package/dist/types/providers.d.ts +15 -0
- package/dist/types/proxy.d.ts +41 -2
- package/dist/types/server.d.ts +9 -5
- package/dist/utils/anthropicTraceSanitizer.d.ts +2 -2
- package/dist/utils/anthropicTraceSanitizer.js +3 -1
- package/dist/utils/conversationMemory.js +4 -4
- package/dist/utils/fileDetector.js +1 -1
- package/dist/utils/messageBuilder.js +1 -1
- package/dist/utils/noOutputSentinel.d.ts +4 -16
- package/dist/utils/noOutputSentinel.js +12 -28
- package/dist/utils/providerRetry.js +4 -4
- package/dist/voice/livekit/brain.js +1 -1
- package/dist/voice/livekit/realtimeMemory.d.ts +1 -1
- package/dist/voice/livekit/realtimeMemory.js +66 -1
- package/dist/voice/livekit/realtimeVoiceAgent.js +1 -1
- package/docs-site/static/search-index.json +42 -64
- package/package.json +5 -4
- package/dist/telemetry/telemetryService.d.ts +0 -79
- package/dist/telemetry/telemetryService.js +0 -572
- package/dist/utils/observabilityHelpers.d.ts +0 -27
- package/dist/utils/observabilityHelpers.js +0 -47
|
@@ -14,7 +14,6 @@ import { toolRegistry } from "./toolRegistry.js";
|
|
|
14
14
|
import { HITLUserRejectedError, HITLTimeoutError } from "../hitl/hitlErrors.js";
|
|
15
15
|
import { detectCategory } from "../utils/mcpDefaults.js";
|
|
16
16
|
import { isObject, isNonNullObject } from "../utils/typeUtils.js";
|
|
17
|
-
import { TelemetryService } from "../telemetry/telemetryService.js";
|
|
18
17
|
import { tracers } from "../telemetry/tracers.js";
|
|
19
18
|
import { SpanStatusCode } from "@opentelemetry/api";
|
|
20
19
|
// `@modelcontextprotocol/sdk`'s stdio transport (imported above) does
|
|
@@ -1085,7 +1084,7 @@ export class ExternalServerManager extends EventEmitter {
|
|
|
1085
1084
|
throw new Error(`Server '${serverId}' not found`);
|
|
1086
1085
|
}
|
|
1087
1086
|
const config = instance.config;
|
|
1088
|
-
const span = tracers.mcp.startSpan("
|
|
1087
|
+
const span = tracers.mcp.startSpan("mcp.server.start", {
|
|
1089
1088
|
attributes: {
|
|
1090
1089
|
"mcp.server_id": serverId,
|
|
1091
1090
|
"mcp.transport": config.transport,
|
|
@@ -1281,7 +1280,7 @@ export class ExternalServerManager extends EventEmitter {
|
|
|
1281
1280
|
if (!instance) {
|
|
1282
1281
|
return;
|
|
1283
1282
|
}
|
|
1284
|
-
const span = tracers.mcp.startSpan("
|
|
1283
|
+
const span = tracers.mcp.startSpan("mcp.server.stop", {
|
|
1285
1284
|
attributes: {
|
|
1286
1285
|
"mcp.server_id": serverId,
|
|
1287
1286
|
},
|
|
@@ -1503,7 +1502,7 @@ export class ExternalServerManager extends EventEmitter {
|
|
|
1503
1502
|
}
|
|
1504
1503
|
instance.restartTimer = setTimeout(async () => {
|
|
1505
1504
|
this.retryDeadlines.delete(serverId);
|
|
1506
|
-
const restartSpan = tracers.mcp.startSpan("
|
|
1505
|
+
const restartSpan = tracers.mcp.startSpan("mcp.server.restart", {
|
|
1507
1506
|
attributes: {
|
|
1508
1507
|
"mcp.server_id": serverId,
|
|
1509
1508
|
"mcp.restart_attempt": instance.reconnectAttempts,
|
|
@@ -2050,10 +2049,6 @@ export class ExternalServerManager extends EventEmitter {
|
|
|
2050
2049
|
// of counting every resolved error as a success.
|
|
2051
2050
|
const resolvedError = result.isErrorResult === true;
|
|
2052
2051
|
if (resolvedError) {
|
|
2053
|
-
// Keep this instance's totalErrors (and the getStatistics() /
|
|
2054
|
-
// getExternalMCPStatistics() it feeds) consistent with the breaker,
|
|
2055
|
-
// TelemetryService and ToolDiscoveryService's failedCalls, all of
|
|
2056
|
-
// which already count a resolved isError result as a failure.
|
|
2057
2052
|
instance.metrics.totalErrors++;
|
|
2058
2053
|
}
|
|
2059
2054
|
mcpLogger.debug(resolvedError
|
|
@@ -2061,12 +2056,6 @@ export class ExternalServerManager extends EventEmitter {
|
|
|
2061
2056
|
: `[ExternalServerManager] Tool executed successfully: ${toolName} on ${serverId}`, {
|
|
2062
2057
|
duration,
|
|
2063
2058
|
});
|
|
2064
|
-
try {
|
|
2065
|
-
TelemetryService.getInstance()?.recordMCPToolCall(toolName, duration, !resolvedError);
|
|
2066
|
-
}
|
|
2067
|
-
catch {
|
|
2068
|
-
/* telemetry should not break execution */
|
|
2069
|
-
}
|
|
2070
2059
|
return result.data;
|
|
2071
2060
|
}
|
|
2072
2061
|
else {
|
|
@@ -2075,13 +2064,6 @@ export class ExternalServerManager extends EventEmitter {
|
|
|
2075
2064
|
}
|
|
2076
2065
|
catch (error) {
|
|
2077
2066
|
instance.metrics.totalErrors++;
|
|
2078
|
-
try {
|
|
2079
|
-
const errorDuration = Date.now() - startTime;
|
|
2080
|
-
TelemetryService.getInstance()?.recordMCPToolCall(toolName, errorDuration, false);
|
|
2081
|
-
}
|
|
2082
|
-
catch {
|
|
2083
|
-
/* telemetry should not break execution */
|
|
2084
|
-
}
|
|
2085
2067
|
mcpLogger.error(`[ExternalServerManager] Tool execution failed: ${toolName} on ${serverId}`, error);
|
|
2086
2068
|
// The SDK rejects with its connection-closed error when the server is
|
|
2087
2069
|
// gone. Without this transition the instance stayed "connected" and
|
|
@@ -111,7 +111,7 @@ export class ToolDiscoveryService extends EventEmitter {
|
|
|
111
111
|
*/
|
|
112
112
|
async discoverTools(serverId, client, timeout = DEFAULT_TOOL_TIMEOUT, isCurrentDiscovery = () => true, startupDiscovery = false) {
|
|
113
113
|
return withSpan({
|
|
114
|
-
name: "
|
|
114
|
+
name: "mcp.discoverTools",
|
|
115
115
|
tracer: tracers.mcp,
|
|
116
116
|
attributes: { "mcp.server_id": serverId },
|
|
117
117
|
}, async (span) => {
|
|
@@ -461,21 +461,14 @@ export class ToolDiscoveryService extends EventEmitter {
|
|
|
461
461
|
// clean resolve and could never open for a tool that fails this way.
|
|
462
462
|
let isErrorResultDetected = false;
|
|
463
463
|
const result = await circuitBreaker.execute(async (recordResolvedFailure) => {
|
|
464
|
-
return mcpTracer.startActiveSpan("
|
|
464
|
+
return mcpTracer.startActiveSpan("mcp.callTool", {
|
|
465
465
|
kind: SpanKind.CLIENT,
|
|
466
466
|
attributes: {
|
|
467
467
|
"mcp.server_id": serverId,
|
|
468
468
|
"mcp.tool_name": toolName,
|
|
469
469
|
"mcp.timeout_ms": effectiveTimeout,
|
|
470
|
-
// Curator P1-4: Langfuse observations rely on ai.*/gen_ai.*
|
|
471
|
-
// attributes for tool name and I/O previews. Provide them so
|
|
472
|
-
// the SPAN observation in Langfuse is legible without
|
|
473
|
-
// timestamp-joining against the parent ai.toolCall. Redact
|
|
474
|
-
// parameters via the existing secret-stripping helper so
|
|
475
|
-
// tokens/credentials/paths don't leave the process.
|
|
476
470
|
"ai.tool.name": toolName,
|
|
477
|
-
"
|
|
478
|
-
"gen_ai.request": safeJsonStringify({
|
|
471
|
+
"mcp.request": safeJsonStringify({
|
|
479
472
|
name: toolName,
|
|
480
473
|
arguments: redactForPreview(effectiveParameters),
|
|
481
474
|
}, 2048),
|
|
@@ -535,12 +528,7 @@ export class ToolDiscoveryService extends EventEmitter {
|
|
|
535
528
|
}
|
|
536
529
|
}
|
|
537
530
|
// ── end normalization ─────────────────────────────────────────
|
|
538
|
-
|
|
539
|
-
// large payloads use the compact surrogate instead of the raw
|
|
540
|
-
// result (avoids redundant stringify + memory hit on payloads
|
|
541
|
-
// that were specifically externalized to Redis). Redact via the
|
|
542
|
-
// same secret-stripping path used for request parameters.
|
|
543
|
-
callSpan.setAttribute("gen_ai.response", safeJsonStringify(redactForPreview(resultForPreview), 2048));
|
|
531
|
+
callSpan.setAttribute("mcp.response", safeJsonStringify(redactForPreview(resultForPreview), 2048));
|
|
544
532
|
return resultForReturn;
|
|
545
533
|
}
|
|
546
534
|
catch (err) {
|
package/dist/mcp/toolRegistry.js
CHANGED
|
@@ -288,14 +288,11 @@ export class MCPToolRegistry extends MCPRegistry {
|
|
|
288
288
|
}
|
|
289
289
|
}
|
|
290
290
|
return withSpan({
|
|
291
|
-
name: "
|
|
291
|
+
name: "tool.registry.execute",
|
|
292
292
|
tracer: tracers.mcp,
|
|
293
293
|
attributes: {
|
|
294
|
-
|
|
294
|
+
"tool.name": toolName,
|
|
295
295
|
[ATTR.MCP_SERVER_ID]: preResolvedServerId || "builtin",
|
|
296
|
-
// Curator P1-3: registry-level wrapper — duplicates ai.toolCall in
|
|
297
|
-
// Langfuse. Retained for OTel/metrics; skipped for Langfuse export.
|
|
298
|
-
"langfuse.internal": true,
|
|
299
296
|
},
|
|
300
297
|
}, async (span) => {
|
|
301
298
|
try {
|
|
@@ -91,7 +91,7 @@ export function createMemoryRetrievalTools(memoryManager, artifactStore) {
|
|
|
91
91
|
"search starts there; use `nextSearchOffset` to continue."),
|
|
92
92
|
}),
|
|
93
93
|
execute: async (args) => withSpan({
|
|
94
|
-
name: "
|
|
94
|
+
name: "memory.retrieve_context",
|
|
95
95
|
tracer: tracers.memory,
|
|
96
96
|
attributes: {
|
|
97
97
|
"memory.operation": args.artifactId
|
package/dist/neurolink.d.ts
CHANGED
|
@@ -229,9 +229,6 @@ export declare class NeuroLink {
|
|
|
229
229
|
private decisionHookTimeoutMs?;
|
|
230
230
|
private skillsManagerInstance?;
|
|
231
231
|
private skillsConfig?;
|
|
232
|
-
/**
|
|
233
|
-
* Extract and set Langfuse context from options with proper async scoping
|
|
234
|
-
*/
|
|
235
232
|
private setLangfuseContextFromOptions;
|
|
236
233
|
private createMetricsTraceContext;
|
|
237
234
|
private enforceSessionBudget;
|
|
@@ -369,6 +366,7 @@ export declare class NeuroLink {
|
|
|
369
366
|
* @throws {Error} When HITL configuration is invalid (if enabled)
|
|
370
367
|
*/
|
|
371
368
|
private observabilityConfig?;
|
|
369
|
+
private telemetryHeld;
|
|
372
370
|
private metricsAggregator;
|
|
373
371
|
private analyticsService;
|
|
374
372
|
/**
|
|
@@ -547,10 +545,8 @@ export declare class NeuroLink {
|
|
|
547
545
|
* Setup event handlers for external server manager
|
|
548
546
|
*/
|
|
549
547
|
private setupExternalServerEventHandlers;
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
*/
|
|
553
|
-
private initializeLangfuse;
|
|
548
|
+
private holdTelemetry;
|
|
549
|
+
private releaseTelemetryHold;
|
|
554
550
|
/**
|
|
555
551
|
* Log constructor completion with final state summary
|
|
556
552
|
*/
|
|
@@ -676,12 +672,12 @@ export declare class NeuroLink {
|
|
|
676
672
|
*/
|
|
677
673
|
getObservabilityConfig(): ObservabilityConfig | undefined;
|
|
678
674
|
/**
|
|
679
|
-
*
|
|
680
|
-
*
|
|
675
|
+
* @description Reports whether any tracing backend is active.
|
|
676
|
+
* @returns {boolean} `true` when OpenTelemetry is initialized or a Langfuse exporter is running.
|
|
681
677
|
*/
|
|
682
678
|
isTelemetryEnabled(): boolean;
|
|
683
679
|
/**
|
|
684
|
-
* Get comprehensive telemetry status including Langfuse
|
|
680
|
+
* Get comprehensive telemetry status including Langfuse and OpenTelemetry state
|
|
685
681
|
*/
|
|
686
682
|
getTelemetryStatus(): {
|
|
687
683
|
enabled: boolean;
|
|
@@ -695,15 +691,6 @@ export declare class NeuroLink {
|
|
|
695
691
|
endpoint?: string;
|
|
696
692
|
serviceName?: string;
|
|
697
693
|
};
|
|
698
|
-
exporters?: Array<{
|
|
699
|
-
name: string;
|
|
700
|
-
enabled: boolean;
|
|
701
|
-
healthy: boolean;
|
|
702
|
-
pendingSpans: number;
|
|
703
|
-
lastExportTime?: string;
|
|
704
|
-
latencyMs?: number;
|
|
705
|
-
errors?: string[];
|
|
706
|
-
}>;
|
|
707
694
|
};
|
|
708
695
|
/**
|
|
709
696
|
* Get aggregated observability metrics (latency, tokens, cost, success rate)
|
|
@@ -773,10 +760,9 @@ export declare class NeuroLink {
|
|
|
773
760
|
*/
|
|
774
761
|
private estimateCostFromUsage;
|
|
775
762
|
/**
|
|
776
|
-
* Handle generation:end
|
|
777
|
-
*
|
|
778
|
-
*
|
|
779
|
-
* Stream analytics are owned here (not stream:complete) to avoid duplicates.
|
|
763
|
+
* Handle generation:end: records advanced analytics for every generation
|
|
764
|
+
* and the metrics span for a non-streamed one. A streamed generation gets
|
|
765
|
+
* its span from stream:complete / stream:error instead.
|
|
780
766
|
*/
|
|
781
767
|
private handleGenerationEndMetrics;
|
|
782
768
|
/**
|
|
@@ -903,6 +889,7 @@ export declare class NeuroLink {
|
|
|
903
889
|
* so every log call beneath it is attributable to this instance.
|
|
904
890
|
*/
|
|
905
891
|
private generateInInstanceScope;
|
|
892
|
+
private runGenerateTurn;
|
|
906
893
|
private fireConsumerOnErrorIfNotFired;
|
|
907
894
|
/**
|
|
908
895
|
* Curator P2-3: wraps a generate/stream call with the fallback
|
|
@@ -1213,6 +1200,7 @@ export declare class NeuroLink {
|
|
|
1213
1200
|
* are covered.
|
|
1214
1201
|
*/
|
|
1215
1202
|
private streamInInstanceScope;
|
|
1203
|
+
private runStreamTurn;
|
|
1216
1204
|
/**
|
|
1217
1205
|
* Curator P2-3 / Reviewer Finding #2: stream-fallback that also covers
|
|
1218
1206
|
* errors thrown during async iteration (e.g. LiteLLM throwing inside
|
|
@@ -1288,6 +1276,9 @@ export declare class NeuroLink {
|
|
|
1288
1276
|
private validateStreamRequestOptions;
|
|
1289
1277
|
private maybeHandleWorkflowStreamRequest;
|
|
1290
1278
|
private runStandardStreamRequest;
|
|
1279
|
+
private drainStandardStreamOnce;
|
|
1280
|
+
private drainStandardStream;
|
|
1281
|
+
private settleStandardStreamDrain;
|
|
1291
1282
|
/** Wrap one provider stream with incremental TTS synthesis. */
|
|
1292
1283
|
private createIncrementalTTSStream;
|
|
1293
1284
|
/** Prevent provider fallback streams from duplicating outer streaming TTS. */
|
|
@@ -3085,10 +3076,8 @@ export declare class NeuroLink {
|
|
|
3085
3076
|
*
|
|
3086
3077
|
* Worker mode is the framework-provided version of the config block every
|
|
3087
3078
|
* consumer used to copy by hand: conversation memory OFF, orchestration
|
|
3088
|
-
* OFF, observability inherited from this instance
|
|
3089
|
-
*
|
|
3090
|
-
* (worker spans join the host's tracer without duplicate Langfuse
|
|
3091
|
-
* exports), credentials inherited, the host's tool registry shared (so
|
|
3079
|
+
* OFF, observability inherited from this instance (worker spans join the
|
|
3080
|
+
* host's tracer provider), credentials inherited, the host's tool registry shared (so
|
|
3092
3081
|
* worker tool calls reuse the host's connections), and an internal log
|
|
3093
3082
|
* bridge attached with a caller-supplied tag.
|
|
3094
3083
|
*
|