@juspay/neurolink 9.24.0 → 9.25.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 (219) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/dist/adapters/tts/googleTTSHandler.js +26 -1
  3. package/dist/adapters/video/vertexVideoHandler.js +23 -17
  4. package/dist/cli/commands/config.d.ts +3 -3
  5. package/dist/cli/commands/observability.d.ts +53 -0
  6. package/dist/cli/commands/observability.js +453 -0
  7. package/dist/cli/commands/telemetry.d.ts +63 -0
  8. package/dist/cli/commands/telemetry.js +689 -0
  9. package/dist/cli/factories/commandFactory.js +29 -15
  10. package/dist/cli/parser.js +6 -9
  11. package/dist/cli/utils/formatters.d.ts +13 -0
  12. package/dist/cli/utils/formatters.js +23 -0
  13. package/dist/constants/contextWindows.js +6 -0
  14. package/dist/constants/enums.d.ts +6 -0
  15. package/dist/constants/enums.js +8 -2
  16. package/dist/context/budgetChecker.js +75 -48
  17. package/dist/context/contextCompactor.js +135 -127
  18. package/dist/core/baseProvider.d.ts +5 -0
  19. package/dist/core/baseProvider.js +117 -110
  20. package/dist/core/conversationMemoryInitializer.js +7 -4
  21. package/dist/core/conversationMemoryManager.d.ts +2 -0
  22. package/dist/core/conversationMemoryManager.js +6 -2
  23. package/dist/core/modules/GenerationHandler.d.ts +2 -2
  24. package/dist/core/modules/GenerationHandler.js +12 -12
  25. package/dist/evaluation/ragasEvaluator.js +39 -19
  26. package/dist/evaluation/scoring.js +46 -20
  27. package/dist/features/ppt/presentationOrchestrator.js +23 -0
  28. package/dist/features/ppt/slideGenerator.js +13 -0
  29. package/dist/features/ppt/slideRenderers.d.ts +1 -1
  30. package/dist/features/ppt/slideRenderers.js +6 -4
  31. package/dist/features/ppt/slideTypeInference.d.ts +1 -1
  32. package/dist/features/ppt/slideTypeInference.js +75 -73
  33. package/dist/files/fileTools.d.ts +6 -6
  34. package/dist/index.d.ts +46 -12
  35. package/dist/index.js +79 -17
  36. package/dist/lib/adapters/tts/googleTTSHandler.js +26 -1
  37. package/dist/lib/adapters/video/vertexVideoHandler.js +23 -17
  38. package/dist/lib/constants/contextWindows.js +6 -0
  39. package/dist/lib/constants/enums.d.ts +6 -0
  40. package/dist/lib/constants/enums.js +8 -2
  41. package/dist/lib/context/budgetChecker.js +75 -48
  42. package/dist/lib/context/contextCompactor.js +135 -127
  43. package/dist/lib/core/baseProvider.d.ts +5 -0
  44. package/dist/lib/core/baseProvider.js +117 -110
  45. package/dist/lib/core/conversationMemoryInitializer.js +7 -4
  46. package/dist/lib/core/conversationMemoryManager.d.ts +2 -0
  47. package/dist/lib/core/conversationMemoryManager.js +6 -2
  48. package/dist/lib/core/modules/GenerationHandler.d.ts +2 -2
  49. package/dist/lib/core/modules/GenerationHandler.js +12 -12
  50. package/dist/lib/evaluation/ragasEvaluator.js +39 -19
  51. package/dist/lib/evaluation/scoring.js +46 -20
  52. package/dist/lib/features/ppt/presentationOrchestrator.js +23 -0
  53. package/dist/lib/features/ppt/slideGenerator.js +13 -0
  54. package/dist/lib/features/ppt/slideRenderers.d.ts +1 -1
  55. package/dist/lib/features/ppt/slideRenderers.js +6 -4
  56. package/dist/lib/features/ppt/slideTypeInference.d.ts +1 -1
  57. package/dist/lib/features/ppt/slideTypeInference.js +75 -73
  58. package/dist/lib/files/fileTools.d.ts +6 -6
  59. package/dist/lib/index.d.ts +46 -12
  60. package/dist/lib/index.js +79 -17
  61. package/dist/lib/mcp/httpRateLimiter.js +39 -12
  62. package/dist/lib/mcp/httpRetryHandler.js +22 -1
  63. package/dist/lib/mcp/mcpClientFactory.js +13 -15
  64. package/dist/lib/memory/memoryRetrievalTools.js +22 -0
  65. package/dist/lib/neurolink.d.ts +64 -72
  66. package/dist/lib/neurolink.js +1007 -564
  67. package/dist/lib/observability/exporterRegistry.d.ts +152 -0
  68. package/dist/lib/observability/exporterRegistry.js +414 -0
  69. package/dist/lib/observability/exporters/arizeExporter.d.ts +32 -0
  70. package/dist/lib/observability/exporters/arizeExporter.js +139 -0
  71. package/dist/lib/observability/exporters/baseExporter.d.ts +117 -0
  72. package/dist/lib/observability/exporters/baseExporter.js +191 -0
  73. package/dist/lib/observability/exporters/braintrustExporter.d.ts +30 -0
  74. package/dist/lib/observability/exporters/braintrustExporter.js +155 -0
  75. package/dist/lib/observability/exporters/datadogExporter.d.ts +37 -0
  76. package/dist/lib/observability/exporters/datadogExporter.js +197 -0
  77. package/dist/lib/observability/exporters/index.d.ts +13 -0
  78. package/dist/lib/observability/exporters/index.js +14 -0
  79. package/dist/lib/observability/exporters/laminarExporter.d.ts +48 -0
  80. package/dist/lib/observability/exporters/laminarExporter.js +303 -0
  81. package/dist/lib/observability/exporters/langfuseExporter.d.ts +47 -0
  82. package/dist/lib/observability/exporters/langfuseExporter.js +204 -0
  83. package/dist/lib/observability/exporters/langsmithExporter.d.ts +26 -0
  84. package/dist/lib/observability/exporters/langsmithExporter.js +124 -0
  85. package/dist/lib/observability/exporters/otelExporter.d.ts +39 -0
  86. package/dist/lib/observability/exporters/otelExporter.js +165 -0
  87. package/dist/lib/observability/exporters/posthogExporter.d.ts +48 -0
  88. package/dist/lib/observability/exporters/posthogExporter.js +288 -0
  89. package/dist/lib/observability/exporters/sentryExporter.d.ts +32 -0
  90. package/dist/lib/observability/exporters/sentryExporter.js +166 -0
  91. package/dist/lib/observability/index.d.ts +25 -0
  92. package/dist/lib/observability/index.js +32 -0
  93. package/dist/lib/observability/metricsAggregator.d.ts +260 -0
  94. package/dist/lib/observability/metricsAggregator.js +557 -0
  95. package/dist/lib/observability/otelBridge.d.ts +49 -0
  96. package/dist/lib/observability/otelBridge.js +132 -0
  97. package/dist/lib/observability/retryPolicy.d.ts +192 -0
  98. package/dist/lib/observability/retryPolicy.js +384 -0
  99. package/dist/lib/observability/sampling/index.d.ts +4 -0
  100. package/dist/lib/observability/sampling/index.js +5 -0
  101. package/dist/lib/observability/sampling/samplers.d.ts +116 -0
  102. package/dist/lib/observability/sampling/samplers.js +217 -0
  103. package/dist/lib/observability/spanProcessor.d.ts +129 -0
  104. package/dist/lib/observability/spanProcessor.js +304 -0
  105. package/dist/lib/observability/tokenTracker.d.ts +156 -0
  106. package/dist/lib/observability/tokenTracker.js +414 -0
  107. package/dist/lib/observability/types/exporterTypes.d.ts +250 -0
  108. package/dist/lib/observability/types/exporterTypes.js +6 -0
  109. package/dist/lib/observability/types/index.d.ts +6 -0
  110. package/dist/lib/observability/types/index.js +5 -0
  111. package/dist/lib/observability/types/spanTypes.d.ts +244 -0
  112. package/dist/lib/observability/types/spanTypes.js +93 -0
  113. package/dist/lib/observability/utils/index.d.ts +4 -0
  114. package/dist/lib/observability/utils/index.js +5 -0
  115. package/dist/lib/observability/utils/safeMetadata.d.ts +10 -0
  116. package/dist/lib/observability/utils/safeMetadata.js +26 -0
  117. package/dist/lib/observability/utils/spanSerializer.d.ts +115 -0
  118. package/dist/lib/observability/utils/spanSerializer.js +291 -0
  119. package/dist/lib/providers/amazonSagemaker.d.ts +5 -4
  120. package/dist/lib/providers/amazonSagemaker.js +3 -4
  121. package/dist/lib/providers/googleVertex.d.ts +7 -0
  122. package/dist/lib/providers/googleVertex.js +76 -2
  123. package/dist/lib/rag/pipeline/RAGPipeline.d.ts +0 -5
  124. package/dist/lib/rag/pipeline/RAGPipeline.js +122 -87
  125. package/dist/lib/rag/ragIntegration.js +30 -0
  126. package/dist/lib/rag/retrieval/hybridSearch.js +22 -0
  127. package/dist/lib/server/abstract/baseServerAdapter.js +51 -19
  128. package/dist/lib/server/middleware/common.js +44 -12
  129. package/dist/lib/services/server/ai/observability/instrumentation.d.ts +2 -2
  130. package/dist/lib/services/server/ai/observability/instrumentation.js +10 -5
  131. package/dist/lib/types/conversationMemoryInterface.d.ts +2 -0
  132. package/dist/lib/types/modelTypes.d.ts +18 -18
  133. package/dist/lib/types/providers.d.ts +5 -0
  134. package/dist/lib/utils/pricing.js +25 -1
  135. package/dist/lib/utils/ttsProcessor.js +74 -59
  136. package/dist/lib/workflow/config.d.ts +36 -36
  137. package/dist/lib/workflow/core/ensembleExecutor.js +10 -0
  138. package/dist/lib/workflow/core/judgeScorer.js +20 -2
  139. package/dist/lib/workflow/core/workflowRunner.js +34 -1
  140. package/dist/mcp/httpRateLimiter.js +39 -12
  141. package/dist/mcp/httpRetryHandler.js +22 -1
  142. package/dist/mcp/mcpClientFactory.js +13 -15
  143. package/dist/memory/memoryRetrievalTools.js +22 -0
  144. package/dist/neurolink.d.ts +64 -72
  145. package/dist/neurolink.js +1007 -564
  146. package/dist/observability/FEATURE-STATUS.md +269 -0
  147. package/dist/observability/exporterRegistry.d.ts +152 -0
  148. package/dist/observability/exporterRegistry.js +413 -0
  149. package/dist/observability/exporters/arizeExporter.d.ts +32 -0
  150. package/dist/observability/exporters/arizeExporter.js +138 -0
  151. package/dist/observability/exporters/baseExporter.d.ts +117 -0
  152. package/dist/observability/exporters/baseExporter.js +190 -0
  153. package/dist/observability/exporters/braintrustExporter.d.ts +30 -0
  154. package/dist/observability/exporters/braintrustExporter.js +154 -0
  155. package/dist/observability/exporters/datadogExporter.d.ts +37 -0
  156. package/dist/observability/exporters/datadogExporter.js +196 -0
  157. package/dist/observability/exporters/index.d.ts +13 -0
  158. package/dist/observability/exporters/index.js +13 -0
  159. package/dist/observability/exporters/laminarExporter.d.ts +48 -0
  160. package/dist/observability/exporters/laminarExporter.js +302 -0
  161. package/dist/observability/exporters/langfuseExporter.d.ts +47 -0
  162. package/dist/observability/exporters/langfuseExporter.js +203 -0
  163. package/dist/observability/exporters/langsmithExporter.d.ts +26 -0
  164. package/dist/observability/exporters/langsmithExporter.js +123 -0
  165. package/dist/observability/exporters/otelExporter.d.ts +39 -0
  166. package/dist/observability/exporters/otelExporter.js +164 -0
  167. package/dist/observability/exporters/posthogExporter.d.ts +48 -0
  168. package/dist/observability/exporters/posthogExporter.js +287 -0
  169. package/dist/observability/exporters/sentryExporter.d.ts +32 -0
  170. package/dist/observability/exporters/sentryExporter.js +165 -0
  171. package/dist/observability/index.d.ts +25 -0
  172. package/dist/observability/index.js +31 -0
  173. package/dist/observability/metricsAggregator.d.ts +260 -0
  174. package/dist/observability/metricsAggregator.js +556 -0
  175. package/dist/observability/otelBridge.d.ts +49 -0
  176. package/dist/observability/otelBridge.js +131 -0
  177. package/dist/observability/retryPolicy.d.ts +192 -0
  178. package/dist/observability/retryPolicy.js +383 -0
  179. package/dist/observability/sampling/index.d.ts +4 -0
  180. package/dist/observability/sampling/index.js +4 -0
  181. package/dist/observability/sampling/samplers.d.ts +116 -0
  182. package/dist/observability/sampling/samplers.js +216 -0
  183. package/dist/observability/spanProcessor.d.ts +129 -0
  184. package/dist/observability/spanProcessor.js +303 -0
  185. package/dist/observability/tokenTracker.d.ts +156 -0
  186. package/dist/observability/tokenTracker.js +413 -0
  187. package/dist/observability/types/exporterTypes.d.ts +250 -0
  188. package/dist/observability/types/exporterTypes.js +5 -0
  189. package/dist/observability/types/index.d.ts +6 -0
  190. package/dist/observability/types/index.js +4 -0
  191. package/dist/observability/types/spanTypes.d.ts +244 -0
  192. package/dist/observability/types/spanTypes.js +92 -0
  193. package/dist/observability/utils/index.d.ts +4 -0
  194. package/dist/observability/utils/index.js +4 -0
  195. package/dist/observability/utils/safeMetadata.d.ts +10 -0
  196. package/dist/observability/utils/safeMetadata.js +25 -0
  197. package/dist/observability/utils/spanSerializer.d.ts +115 -0
  198. package/dist/observability/utils/spanSerializer.js +290 -0
  199. package/dist/providers/amazonSagemaker.d.ts +5 -4
  200. package/dist/providers/amazonSagemaker.js +3 -4
  201. package/dist/providers/googleVertex.d.ts +7 -0
  202. package/dist/providers/googleVertex.js +76 -2
  203. package/dist/rag/pipeline/RAGPipeline.d.ts +0 -5
  204. package/dist/rag/pipeline/RAGPipeline.js +122 -87
  205. package/dist/rag/ragIntegration.js +30 -0
  206. package/dist/rag/retrieval/hybridSearch.js +22 -0
  207. package/dist/server/abstract/baseServerAdapter.js +51 -19
  208. package/dist/server/middleware/common.js +44 -12
  209. package/dist/services/server/ai/observability/instrumentation.d.ts +2 -2
  210. package/dist/services/server/ai/observability/instrumentation.js +10 -5
  211. package/dist/types/conversationMemoryInterface.d.ts +2 -0
  212. package/dist/types/providers.d.ts +5 -0
  213. package/dist/utils/pricing.js +25 -1
  214. package/dist/utils/ttsProcessor.js +74 -59
  215. package/dist/workflow/config.d.ts +52 -52
  216. package/dist/workflow/core/ensembleExecutor.js +10 -0
  217. package/dist/workflow/core/judgeScorer.js +20 -2
  218. package/dist/workflow/core/workflowRunner.js +34 -1
  219. package/package.json +1 -1
@@ -0,0 +1,244 @@
1
+ /**
2
+ * AI-specific span types and data structures
3
+ * Following OpenTelemetry GenAI semantic conventions
4
+ */
5
+ /**
6
+ * Span types for AI operations
7
+ * Following Mastra's span categorization and OTel GenAI conventions
8
+ */
9
+ export declare enum SpanType {
10
+ /** Agent execution run (reserved for future multi-agent support) */
11
+ AGENT_RUN = "agent.run",
12
+ /** Workflow step execution (reserved for future workflow engine) */
13
+ WORKFLOW_STEP = "workflow.step",
14
+ /** Tool/function call */
15
+ TOOL_CALL = "tool.call",
16
+ /** LLM generation request */
17
+ MODEL_GENERATION = "model.generation",
18
+ /** Embedding generation (reserved for future embedding API) */
19
+ EMBEDDING = "embedding",
20
+ /** Retrieval operation (reserved for future RAG support) */
21
+ RETRIEVAL = "retrieval",
22
+ /** Memory operation */
23
+ MEMORY = "memory",
24
+ /** Context compaction operation */
25
+ CONTEXT_COMPACTION = "context.compaction",
26
+ /** RAG pipeline operation */
27
+ RAG = "rag",
28
+ /** Evaluation/scoring operation */
29
+ EVALUATION = "evaluation",
30
+ /** MCP transport operation */
31
+ MCP_TRANSPORT = "mcp.transport",
32
+ /** Media generation (image/video) */
33
+ MEDIA_GENERATION = "media.generation",
34
+ /** PPT/presentation generation */
35
+ PPT_GENERATION = "ppt.generation",
36
+ /** Workflow execution */
37
+ WORKFLOW = "workflow",
38
+ /** TTS synthesis */
39
+ TTS = "tts",
40
+ /** Server adapter request */
41
+ SERVER_REQUEST = "server.request",
42
+ /** Custom span */
43
+ CUSTOM = "custom"
44
+ }
45
+ /**
46
+ * Span status codes (following OTel conventions)
47
+ */
48
+ export declare enum SpanStatus {
49
+ UNSET = 0,
50
+ OK = 1,
51
+ ERROR = 2
52
+ }
53
+ /**
54
+ * OpenTelemetry GenAI semantic conventions
55
+ * @see https://opentelemetry.io/docs/specs/semconv/gen-ai/
56
+ */
57
+ export declare const GENAI_ATTRIBUTES: {
58
+ readonly GEN_AI_SYSTEM: "gen_ai.system";
59
+ readonly GEN_AI_REQUEST_MODEL: "gen_ai.request.model";
60
+ readonly GEN_AI_RESPONSE_MODEL: "gen_ai.response.model";
61
+ readonly GEN_AI_USAGE_INPUT_TOKENS: "gen_ai.usage.input_tokens";
62
+ readonly GEN_AI_USAGE_OUTPUT_TOKENS: "gen_ai.usage.output_tokens";
63
+ readonly GEN_AI_USAGE_TOTAL_TOKENS: "gen_ai.usage.total_tokens";
64
+ readonly GEN_AI_REQUEST_TEMPERATURE: "gen_ai.request.temperature";
65
+ readonly GEN_AI_REQUEST_TOP_P: "gen_ai.request.top_p";
66
+ readonly GEN_AI_REQUEST_MAX_TOKENS: "gen_ai.request.max_tokens";
67
+ readonly GEN_AI_REQUEST_STOP_SEQUENCES: "gen_ai.request.stop_sequences";
68
+ readonly GEN_AI_RESPONSE_FINISH_REASON: "gen_ai.response.finish_reasons";
69
+ readonly GEN_AI_RESPONSE_ID: "gen_ai.response.id";
70
+ readonly GEN_AI_TOOL_NAME: "gen_ai.tool.name";
71
+ readonly GEN_AI_TOOL_CALL_ID: "gen_ai.tool.call_id";
72
+ readonly GEN_AI_PROMPT: "gen_ai.prompt";
73
+ readonly GEN_AI_COMPLETION: "gen_ai.completion";
74
+ };
75
+ /**
76
+ * Agent-specific conventions (emerging standard)
77
+ */
78
+ export declare const AGENT_ATTRIBUTES: {
79
+ readonly AGENT_NAME: "gen_ai.agent.name";
80
+ readonly AGENT_STEP_TYPE: "gen_ai.agent.step_type";
81
+ readonly AGENT_TOOL_CALLS: "gen_ai.agent.tool_calls";
82
+ readonly AGENT_MEMORY_ACCESS: "gen_ai.agent.memory_access";
83
+ readonly AGENT_REASONING_TRACE: "gen_ai.agent.reasoning_trace";
84
+ };
85
+ /**
86
+ * Span attributes with AI-specific fields
87
+ */
88
+ export type SpanAttributes = {
89
+ "service.name"?: string;
90
+ "service.version"?: string;
91
+ "deployment.environment"?: string;
92
+ "user.id"?: string;
93
+ "session.id"?: string;
94
+ "ai.provider"?: string;
95
+ "ai.model"?: string;
96
+ "ai.model.version"?: string;
97
+ "ai.tokens.input"?: number;
98
+ "ai.tokens.output"?: number;
99
+ "ai.tokens.total"?: number;
100
+ "ai.tokens.cache_read"?: number;
101
+ "ai.tokens.cache_creation"?: number;
102
+ "ai.tokens.reasoning"?: number;
103
+ "ai.cost.input"?: number;
104
+ "ai.cost.output"?: number;
105
+ "ai.cost.total"?: number;
106
+ "ai.cost.currency"?: string;
107
+ "ai.temperature"?: number;
108
+ "ai.max_tokens"?: number;
109
+ "ai.top_p"?: number;
110
+ "ai.stop_sequences"?: string[];
111
+ "tool.name"?: string;
112
+ "tool.server"?: string;
113
+ "tool.success"?: boolean;
114
+ "error.type"?: string;
115
+ "error.message"?: string;
116
+ "error.stack"?: string;
117
+ error?: boolean;
118
+ input?: unknown;
119
+ output?: unknown;
120
+ expected?: unknown;
121
+ scores?: Record<string, number>;
122
+ [key: string]: unknown;
123
+ };
124
+ /**
125
+ * Span event for recording discrete occurrences
126
+ */
127
+ export type SpanEvent = {
128
+ name: string;
129
+ timestamp: string;
130
+ attributes?: Record<string, unknown>;
131
+ };
132
+ /**
133
+ * Link to related span
134
+ */
135
+ export type SpanLink = {
136
+ traceId: string;
137
+ spanId: string;
138
+ attributes?: Record<string, unknown>;
139
+ };
140
+ /**
141
+ * Complete span data structure
142
+ */
143
+ export type SpanData = {
144
+ /** Unique span identifier */
145
+ spanId: string;
146
+ /** Trace identifier for distributed tracing */
147
+ traceId: string;
148
+ /** Parent span ID for nested operations */
149
+ parentSpanId?: string;
150
+ /** Span type category */
151
+ type: SpanType;
152
+ /** Human-readable span name */
153
+ name: string;
154
+ /** Start timestamp (ISO 8601) */
155
+ startTime: string;
156
+ /** End timestamp (ISO 8601) */
157
+ endTime?: string;
158
+ /** Duration in milliseconds */
159
+ durationMs?: number;
160
+ /** Span status */
161
+ status: SpanStatus;
162
+ /** Status message (for errors) */
163
+ statusMessage?: string;
164
+ /** Span attributes/tags */
165
+ attributes: SpanAttributes;
166
+ /** Events within the span */
167
+ events: SpanEvent[];
168
+ /** Links to related spans */
169
+ links: SpanLink[];
170
+ };
171
+ /**
172
+ * Langfuse-specific span format
173
+ */
174
+ export type LangfuseSpan = {
175
+ id: string;
176
+ traceId: string;
177
+ parentObservationId?: string;
178
+ name: string;
179
+ startTime: string;
180
+ endTime?: string;
181
+ metadata: Record<string, unknown>;
182
+ level: "DEBUG" | "DEFAULT" | "WARNING" | "ERROR";
183
+ statusMessage?: string;
184
+ input?: unknown;
185
+ output?: unknown;
186
+ usage?: {
187
+ promptTokens?: number;
188
+ completionTokens?: number;
189
+ totalTokens?: number;
190
+ };
191
+ };
192
+ /**
193
+ * LangSmith-specific run format
194
+ */
195
+ export type LangSmithRun = {
196
+ id: string;
197
+ trace_id: string;
198
+ parent_run_id?: string;
199
+ name: string;
200
+ run_type: "llm" | "chain" | "tool" | "retriever" | "embedding";
201
+ start_time: string;
202
+ end_time?: string;
203
+ extra: Record<string, unknown>;
204
+ error?: string;
205
+ inputs?: unknown;
206
+ outputs?: unknown;
207
+ tags?: string[];
208
+ };
209
+ /**
210
+ * OpenTelemetry span format
211
+ */
212
+ export type OtelSpan = {
213
+ traceId: string;
214
+ spanId: string;
215
+ parentSpanId?: string;
216
+ name: string;
217
+ kind: number;
218
+ startTimeUnixNano: number;
219
+ endTimeUnixNano?: number;
220
+ attributes: Array<{
221
+ key: string;
222
+ value: {
223
+ stringValue?: string;
224
+ intValue?: number;
225
+ boolValue?: boolean;
226
+ };
227
+ }>;
228
+ status: {
229
+ code: number;
230
+ message?: string;
231
+ };
232
+ events: Array<{
233
+ name: string;
234
+ timeUnixNano: number;
235
+ attributes: Array<{
236
+ key: string;
237
+ value: {
238
+ stringValue?: string;
239
+ intValue?: number;
240
+ boolValue?: boolean;
241
+ };
242
+ }>;
243
+ }>;
244
+ };
@@ -0,0 +1,93 @@
1
+ /**
2
+ * AI-specific span types and data structures
3
+ * Following OpenTelemetry GenAI semantic conventions
4
+ */
5
+ /**
6
+ * Span types for AI operations
7
+ * Following Mastra's span categorization and OTel GenAI conventions
8
+ */
9
+ export var SpanType;
10
+ (function (SpanType) {
11
+ /** Agent execution run (reserved for future multi-agent support) */
12
+ SpanType["AGENT_RUN"] = "agent.run";
13
+ /** Workflow step execution (reserved for future workflow engine) */
14
+ SpanType["WORKFLOW_STEP"] = "workflow.step";
15
+ /** Tool/function call */
16
+ SpanType["TOOL_CALL"] = "tool.call";
17
+ /** LLM generation request */
18
+ SpanType["MODEL_GENERATION"] = "model.generation";
19
+ /** Embedding generation (reserved for future embedding API) */
20
+ SpanType["EMBEDDING"] = "embedding";
21
+ /** Retrieval operation (reserved for future RAG support) */
22
+ SpanType["RETRIEVAL"] = "retrieval";
23
+ /** Memory operation */
24
+ SpanType["MEMORY"] = "memory";
25
+ /** Context compaction operation */
26
+ SpanType["CONTEXT_COMPACTION"] = "context.compaction";
27
+ /** RAG pipeline operation */
28
+ SpanType["RAG"] = "rag";
29
+ /** Evaluation/scoring operation */
30
+ SpanType["EVALUATION"] = "evaluation";
31
+ /** MCP transport operation */
32
+ SpanType["MCP_TRANSPORT"] = "mcp.transport";
33
+ /** Media generation (image/video) */
34
+ SpanType["MEDIA_GENERATION"] = "media.generation";
35
+ /** PPT/presentation generation */
36
+ SpanType["PPT_GENERATION"] = "ppt.generation";
37
+ /** Workflow execution */
38
+ SpanType["WORKFLOW"] = "workflow";
39
+ /** TTS synthesis */
40
+ SpanType["TTS"] = "tts";
41
+ /** Server adapter request */
42
+ SpanType["SERVER_REQUEST"] = "server.request";
43
+ /** Custom span */
44
+ SpanType["CUSTOM"] = "custom";
45
+ })(SpanType || (SpanType = {}));
46
+ /**
47
+ * Span status codes (following OTel conventions)
48
+ */
49
+ export var SpanStatus;
50
+ (function (SpanStatus) {
51
+ SpanStatus[SpanStatus["UNSET"] = 0] = "UNSET";
52
+ SpanStatus[SpanStatus["OK"] = 1] = "OK";
53
+ SpanStatus[SpanStatus["ERROR"] = 2] = "ERROR";
54
+ })(SpanStatus || (SpanStatus = {}));
55
+ /**
56
+ * OpenTelemetry GenAI semantic conventions
57
+ * @see https://opentelemetry.io/docs/specs/semconv/gen-ai/
58
+ */
59
+ export const GENAI_ATTRIBUTES = {
60
+ // System and model identification
61
+ GEN_AI_SYSTEM: "gen_ai.system",
62
+ GEN_AI_REQUEST_MODEL: "gen_ai.request.model",
63
+ GEN_AI_RESPONSE_MODEL: "gen_ai.response.model",
64
+ // Token usage
65
+ GEN_AI_USAGE_INPUT_TOKENS: "gen_ai.usage.input_tokens",
66
+ GEN_AI_USAGE_OUTPUT_TOKENS: "gen_ai.usage.output_tokens",
67
+ GEN_AI_USAGE_TOTAL_TOKENS: "gen_ai.usage.total_tokens",
68
+ // Request parameters
69
+ GEN_AI_REQUEST_TEMPERATURE: "gen_ai.request.temperature",
70
+ GEN_AI_REQUEST_TOP_P: "gen_ai.request.top_p",
71
+ GEN_AI_REQUEST_MAX_TOKENS: "gen_ai.request.max_tokens",
72
+ GEN_AI_REQUEST_STOP_SEQUENCES: "gen_ai.request.stop_sequences",
73
+ // Response metadata
74
+ GEN_AI_RESPONSE_FINISH_REASON: "gen_ai.response.finish_reasons",
75
+ GEN_AI_RESPONSE_ID: "gen_ai.response.id",
76
+ // Tool/function calling
77
+ GEN_AI_TOOL_NAME: "gen_ai.tool.name",
78
+ GEN_AI_TOOL_CALL_ID: "gen_ai.tool.call_id",
79
+ // Prompts and completions (optional, privacy-sensitive)
80
+ GEN_AI_PROMPT: "gen_ai.prompt",
81
+ GEN_AI_COMPLETION: "gen_ai.completion",
82
+ };
83
+ /**
84
+ * Agent-specific conventions (emerging standard)
85
+ */
86
+ export const AGENT_ATTRIBUTES = {
87
+ AGENT_NAME: "gen_ai.agent.name",
88
+ AGENT_STEP_TYPE: "gen_ai.agent.step_type",
89
+ AGENT_TOOL_CALLS: "gen_ai.agent.tool_calls",
90
+ AGENT_MEMORY_ACCESS: "gen_ai.agent.memory_access",
91
+ AGENT_REASONING_TRACE: "gen_ai.agent.reasoning_trace",
92
+ };
93
+ //# sourceMappingURL=spanTypes.js.map
@@ -0,0 +1,4 @@
1
+ /**
2
+ * Observability utilities exports
3
+ */
4
+ export { SpanSerializer } from "./spanSerializer.js";
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Observability utilities exports
3
+ */
4
+ export { SpanSerializer } from "./spanSerializer.js";
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1,10 @@
1
+ /**
2
+ * Safe metadata filtering for observability exporters.
3
+ *
4
+ * Only these attribute keys are forwarded to third-party backends as trace
5
+ * metadata. User prompts (input), LLM responses (output), error stacks, and
6
+ * any other potentially sensitive data are excluded to prevent PII leaks.
7
+ */
8
+ import type { SpanAttributes } from "../types/spanTypes.js";
9
+ export declare const SAFE_METADATA_KEYS: Set<string>;
10
+ export declare function filterSafeMetadata(attributes: SpanAttributes): Record<string, unknown>;
@@ -0,0 +1,26 @@
1
+ /**
2
+ * Safe metadata filtering for observability exporters.
3
+ *
4
+ * Only these attribute keys are forwarded to third-party backends as trace
5
+ * metadata. User prompts (input), LLM responses (output), error stacks, and
6
+ * any other potentially sensitive data are excluded to prevent PII leaks.
7
+ */
8
+ // Only ai.* keys are forwarded as metadata. Stream metrics (chunk_count,
9
+ // content_length) should be accessed via span attributes directly, not via
10
+ // metadata sent to third-party backends.
11
+ export const SAFE_METADATA_KEYS = new Set([
12
+ "ai.provider",
13
+ "ai.model",
14
+ "ai.temperature",
15
+ "ai.max_tokens",
16
+ ]);
17
+ export function filterSafeMetadata(attributes) {
18
+ const filtered = {};
19
+ for (const key of SAFE_METADATA_KEYS) {
20
+ if (attributes[key] !== undefined) {
21
+ filtered[key] = attributes[key];
22
+ }
23
+ }
24
+ return filtered;
25
+ }
26
+ //# sourceMappingURL=safeMetadata.js.map
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Utility class for span creation and serialization
3
+ * Handles conversion between NeuroLink's span format and platform-specific formats
4
+ */
5
+ import { type LangfuseSpan, type LangSmithRun, type OtelSpan, type SpanAttributes, type SpanData, SpanStatus, SpanType } from "../types/index.js";
6
+ /**
7
+ * Utility class for span creation and serialization
8
+ */
9
+ export declare class SpanSerializer {
10
+ /**
11
+ * Create a new span with generated IDs
12
+ */
13
+ static createSpan(type: SpanType, name: string, attributes?: Partial<SpanAttributes>, parentSpanId?: string, traceId?: string): SpanData;
14
+ /**
15
+ * End a span with status
16
+ */
17
+ static endSpan(span: SpanData, status?: SpanStatus, statusMessage?: string): SpanData;
18
+ /**
19
+ * Add event to span
20
+ */
21
+ static addEvent(span: SpanData, name: string, attributes?: Record<string, unknown>): SpanData;
22
+ /**
23
+ * Update span attributes
24
+ */
25
+ static updateAttributes(span: SpanData, attributes: Partial<SpanAttributes>): SpanData;
26
+ /**
27
+ * Serialize span to JSON for export
28
+ */
29
+ static toJSON(span: SpanData): string;
30
+ /**
31
+ * Instance method to serialize a span object to JSON string
32
+ * @param span - The span data to serialize (can be partial span data)
33
+ * @returns JSON string representation of the span
34
+ */
35
+ serialize(span: Partial<SpanData> | Record<string, unknown>): string;
36
+ /**
37
+ * Instance method to deserialize a JSON string to span data
38
+ * @param json - The JSON string to parse
39
+ * @returns Parsed span data
40
+ */
41
+ deserialize(json: string): SpanData;
42
+ /**
43
+ * Parse span from JSON
44
+ */
45
+ static fromJSON(json: string): SpanData;
46
+ /**
47
+ * Serialize span for Langfuse format
48
+ */
49
+ static toLangfuseFormat(span: SpanData): LangfuseSpan;
50
+ /**
51
+ * Serialize span for LangSmith format
52
+ */
53
+ static toLangSmithFormat(span: SpanData): LangSmithRun;
54
+ /**
55
+ * Serialize span for OpenTelemetry format
56
+ */
57
+ static toOtelFormat(span: SpanData): OtelSpan;
58
+ /**
59
+ * Convert value to OTel attribute value format
60
+ */
61
+ private static toOtelAttributeValue;
62
+ /**
63
+ * Map NeuroLink span type to LangSmith run type
64
+ */
65
+ private static mapSpanTypeToLangSmithRunType;
66
+ /**
67
+ * Extract tags from span attributes for LangSmith
68
+ */
69
+ private static extractTags;
70
+ /**
71
+ * Create a generation span with AI-specific attributes
72
+ */
73
+ static createGenerationSpan(params: {
74
+ provider: string;
75
+ model: string;
76
+ name?: string;
77
+ parentSpanId?: string;
78
+ traceId?: string;
79
+ temperature?: number;
80
+ maxTokens?: number;
81
+ input?: unknown;
82
+ userId?: string;
83
+ sessionId?: string;
84
+ }): SpanData;
85
+ /**
86
+ * Create a tool call span
87
+ */
88
+ static createToolCallSpan(params: {
89
+ toolName: string;
90
+ server?: string;
91
+ input?: unknown;
92
+ parentSpanId?: string;
93
+ traceId?: string;
94
+ }): SpanData;
95
+ /**
96
+ * Enrich span with token usage
97
+ */
98
+ static enrichWithTokenUsage(span: SpanData, usage: {
99
+ promptTokens?: number;
100
+ completionTokens?: number;
101
+ totalTokens?: number;
102
+ cacheCreationTokens?: number;
103
+ cacheReadTokens?: number;
104
+ reasoningTokens?: number;
105
+ }): SpanData;
106
+ /**
107
+ * Enrich span with cost information
108
+ */
109
+ static enrichWithCost(span: SpanData, cost: {
110
+ inputCost?: number;
111
+ outputCost?: number;
112
+ totalCost: number;
113
+ currency?: string;
114
+ }): SpanData;
115
+ }