@superblocksteam/telemetry 2.0.83-next.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 (227) hide show
  1. package/LICENSE.txt +87 -0
  2. package/README.md +155 -0
  3. package/dist/browser/index.d.ts +8 -0
  4. package/dist/browser/index.d.ts.map +1 -0
  5. package/dist/browser/index.js +19 -0
  6. package/dist/browser/index.js.map +1 -0
  7. package/dist/browser/init.d.ts +75 -0
  8. package/dist/browser/init.d.ts.map +1 -0
  9. package/dist/browser/init.js +169 -0
  10. package/dist/browser/init.js.map +1 -0
  11. package/dist/browser/resilient-exporter.d.ts +43 -0
  12. package/dist/browser/resilient-exporter.d.ts.map +1 -0
  13. package/dist/browser/resilient-exporter.js +88 -0
  14. package/dist/browser/resilient-exporter.js.map +1 -0
  15. package/dist/common/contracts/tier2-traces.d.ts +75 -0
  16. package/dist/common/contracts/tier2-traces.d.ts.map +1 -0
  17. package/dist/common/contracts/tier2-traces.js +186 -0
  18. package/dist/common/contracts/tier2-traces.js.map +1 -0
  19. package/dist/common/deployment-type.d.ts +18 -0
  20. package/dist/common/deployment-type.d.ts.map +1 -0
  21. package/dist/common/deployment-type.js +30 -0
  22. package/dist/common/deployment-type.js.map +1 -0
  23. package/dist/common/guardrails.d.ts +116 -0
  24. package/dist/common/guardrails.d.ts.map +1 -0
  25. package/dist/common/guardrails.js +189 -0
  26. package/dist/common/guardrails.js.map +1 -0
  27. package/dist/common/index.d.ts +16 -0
  28. package/dist/common/index.d.ts.map +1 -0
  29. package/dist/common/index.js +32 -0
  30. package/dist/common/index.js.map +1 -0
  31. package/dist/common/log-sanitizer.d.ts +78 -0
  32. package/dist/common/log-sanitizer.d.ts.map +1 -0
  33. package/dist/common/log-sanitizer.js +340 -0
  34. package/dist/common/log-sanitizer.js.map +1 -0
  35. package/dist/common/policy-evaluator.d.ts +103 -0
  36. package/dist/common/policy-evaluator.d.ts.map +1 -0
  37. package/dist/common/policy-evaluator.js +200 -0
  38. package/dist/common/policy-evaluator.js.map +1 -0
  39. package/dist/common/resource.d.ts +62 -0
  40. package/dist/common/resource.d.ts.map +1 -0
  41. package/dist/common/resource.js +106 -0
  42. package/dist/common/resource.js.map +1 -0
  43. package/dist/common/tier-hints.d.ts +182 -0
  44. package/dist/common/tier-hints.d.ts.map +1 -0
  45. package/dist/common/tier-hints.js +209 -0
  46. package/dist/common/tier-hints.js.map +1 -0
  47. package/dist/index.d.ts +43 -0
  48. package/dist/index.d.ts.map +1 -0
  49. package/dist/index.js +76 -0
  50. package/dist/index.js.map +1 -0
  51. package/dist/lint/forbidden-attributes.d.ts +149 -0
  52. package/dist/lint/forbidden-attributes.d.ts.map +1 -0
  53. package/dist/lint/forbidden-attributes.js +214 -0
  54. package/dist/lint/forbidden-attributes.js.map +1 -0
  55. package/dist/lint/index.d.ts +9 -0
  56. package/dist/lint/index.d.ts.map +1 -0
  57. package/dist/lint/index.js +16 -0
  58. package/dist/lint/index.js.map +1 -0
  59. package/dist/llmobs/index.d.ts +22 -0
  60. package/dist/llmobs/index.d.ts.map +1 -0
  61. package/dist/llmobs/index.js +29 -0
  62. package/dist/llmobs/index.js.map +1 -0
  63. package/dist/llmobs/tier1-exporter.d.ts +146 -0
  64. package/dist/llmobs/tier1-exporter.d.ts.map +1 -0
  65. package/dist/llmobs/tier1-exporter.js +196 -0
  66. package/dist/llmobs/tier1-exporter.js.map +1 -0
  67. package/dist/llmobs/tier2-summarizer.d.ts +268 -0
  68. package/dist/llmobs/tier2-summarizer.d.ts.map +1 -0
  69. package/dist/llmobs/tier2-summarizer.js +650 -0
  70. package/dist/llmobs/tier2-summarizer.js.map +1 -0
  71. package/dist/node/exporters/resilient-exporter.d.ts +77 -0
  72. package/dist/node/exporters/resilient-exporter.d.ts.map +1 -0
  73. package/dist/node/exporters/resilient-exporter.js +129 -0
  74. package/dist/node/exporters/resilient-exporter.js.map +1 -0
  75. package/dist/node/index.d.ts +11 -0
  76. package/dist/node/index.d.ts.map +1 -0
  77. package/dist/node/index.js +24 -0
  78. package/dist/node/index.js.map +1 -0
  79. package/dist/node/init.d.ts +75 -0
  80. package/dist/node/init.d.ts.map +1 -0
  81. package/dist/node/init.js +245 -0
  82. package/dist/node/init.js.map +1 -0
  83. package/dist/node/log-processor.d.ts +83 -0
  84. package/dist/node/log-processor.d.ts.map +1 -0
  85. package/dist/node/log-processor.js +266 -0
  86. package/dist/node/log-processor.js.map +1 -0
  87. package/dist/node/metrics-client.d.ts +66 -0
  88. package/dist/node/metrics-client.d.ts.map +1 -0
  89. package/dist/node/metrics-client.js +193 -0
  90. package/dist/node/metrics-client.js.map +1 -0
  91. package/dist/node/traced-socket.d.ts +76 -0
  92. package/dist/node/traced-socket.d.ts.map +1 -0
  93. package/dist/node/traced-socket.js +261 -0
  94. package/dist/node/traced-socket.js.map +1 -0
  95. package/dist/testing/in-memory-exporter.d.ts +179 -0
  96. package/dist/testing/in-memory-exporter.d.ts.map +1 -0
  97. package/dist/testing/in-memory-exporter.js +254 -0
  98. package/dist/testing/in-memory-exporter.js.map +1 -0
  99. package/dist/testing/index.d.ts +8 -0
  100. package/dist/testing/index.d.ts.map +1 -0
  101. package/dist/testing/index.js +19 -0
  102. package/dist/testing/index.js.map +1 -0
  103. package/dist/testing/test-init.d.ts +80 -0
  104. package/dist/testing/test-init.d.ts.map +1 -0
  105. package/dist/testing/test-init.js +144 -0
  106. package/dist/testing/test-init.js.map +1 -0
  107. package/dist/types/index.d.ts +40 -0
  108. package/dist/types/index.d.ts.map +1 -0
  109. package/dist/types/index.js +23 -0
  110. package/dist/types/index.js.map +1 -0
  111. package/dist/types/policy.d.ts +92 -0
  112. package/dist/types/policy.d.ts.map +1 -0
  113. package/dist/types/policy.js +125 -0
  114. package/dist/types/policy.js.map +1 -0
  115. package/dist-esm/browser/index.d.ts +8 -0
  116. package/dist-esm/browser/index.d.ts.map +1 -0
  117. package/dist-esm/browser/index.js +9 -0
  118. package/dist-esm/browser/index.js.map +1 -0
  119. package/dist-esm/browser/init.d.ts +75 -0
  120. package/dist-esm/browser/init.d.ts.map +1 -0
  121. package/dist-esm/browser/init.js +162 -0
  122. package/dist-esm/browser/init.js.map +1 -0
  123. package/dist-esm/browser/resilient-exporter.d.ts +43 -0
  124. package/dist-esm/browser/resilient-exporter.d.ts.map +1 -0
  125. package/dist-esm/browser/resilient-exporter.js +84 -0
  126. package/dist-esm/browser/resilient-exporter.js.map +1 -0
  127. package/dist-esm/common/contracts/tier2-traces.d.ts +75 -0
  128. package/dist-esm/common/contracts/tier2-traces.d.ts.map +1 -0
  129. package/dist-esm/common/contracts/tier2-traces.js +178 -0
  130. package/dist-esm/common/contracts/tier2-traces.js.map +1 -0
  131. package/dist-esm/common/deployment-type.d.ts +18 -0
  132. package/dist-esm/common/deployment-type.d.ts.map +1 -0
  133. package/dist-esm/common/deployment-type.js +27 -0
  134. package/dist-esm/common/deployment-type.js.map +1 -0
  135. package/dist-esm/common/guardrails.d.ts +116 -0
  136. package/dist-esm/common/guardrails.d.ts.map +1 -0
  137. package/dist-esm/common/guardrails.js +179 -0
  138. package/dist-esm/common/guardrails.js.map +1 -0
  139. package/dist-esm/common/index.d.ts +16 -0
  140. package/dist-esm/common/index.d.ts.map +1 -0
  141. package/dist-esm/common/index.js +16 -0
  142. package/dist-esm/common/index.js.map +1 -0
  143. package/dist-esm/common/log-sanitizer.d.ts +78 -0
  144. package/dist-esm/common/log-sanitizer.d.ts.map +1 -0
  145. package/dist-esm/common/log-sanitizer.js +331 -0
  146. package/dist-esm/common/log-sanitizer.js.map +1 -0
  147. package/dist-esm/common/policy-evaluator.d.ts +103 -0
  148. package/dist-esm/common/policy-evaluator.d.ts.map +1 -0
  149. package/dist-esm/common/policy-evaluator.js +196 -0
  150. package/dist-esm/common/policy-evaluator.js.map +1 -0
  151. package/dist-esm/common/resource.d.ts +62 -0
  152. package/dist-esm/common/resource.d.ts.map +1 -0
  153. package/dist-esm/common/resource.js +100 -0
  154. package/dist-esm/common/resource.js.map +1 -0
  155. package/dist-esm/common/tier-hints.d.ts +182 -0
  156. package/dist-esm/common/tier-hints.d.ts.map +1 -0
  157. package/dist-esm/common/tier-hints.js +199 -0
  158. package/dist-esm/common/tier-hints.js.map +1 -0
  159. package/dist-esm/index.d.ts +43 -0
  160. package/dist-esm/index.d.ts.map +1 -0
  161. package/dist-esm/index.js +53 -0
  162. package/dist-esm/index.js.map +1 -0
  163. package/dist-esm/lint/forbidden-attributes.d.ts +149 -0
  164. package/dist-esm/lint/forbidden-attributes.d.ts.map +1 -0
  165. package/dist-esm/lint/forbidden-attributes.js +209 -0
  166. package/dist-esm/lint/forbidden-attributes.js.map +1 -0
  167. package/dist-esm/lint/index.d.ts +9 -0
  168. package/dist-esm/lint/index.d.ts.map +1 -0
  169. package/dist-esm/lint/index.js +9 -0
  170. package/dist-esm/lint/index.js.map +1 -0
  171. package/dist-esm/llmobs/index.d.ts +22 -0
  172. package/dist-esm/llmobs/index.d.ts.map +1 -0
  173. package/dist-esm/llmobs/index.js +22 -0
  174. package/dist-esm/llmobs/index.js.map +1 -0
  175. package/dist-esm/llmobs/tier1-exporter.d.ts +146 -0
  176. package/dist-esm/llmobs/tier1-exporter.d.ts.map +1 -0
  177. package/dist-esm/llmobs/tier1-exporter.js +190 -0
  178. package/dist-esm/llmobs/tier1-exporter.js.map +1 -0
  179. package/dist-esm/llmobs/tier2-summarizer.d.ts +268 -0
  180. package/dist-esm/llmobs/tier2-summarizer.d.ts.map +1 -0
  181. package/dist-esm/llmobs/tier2-summarizer.js +646 -0
  182. package/dist-esm/llmobs/tier2-summarizer.js.map +1 -0
  183. package/dist-esm/node/exporters/resilient-exporter.d.ts +77 -0
  184. package/dist-esm/node/exporters/resilient-exporter.d.ts.map +1 -0
  185. package/dist-esm/node/exporters/resilient-exporter.js +125 -0
  186. package/dist-esm/node/exporters/resilient-exporter.js.map +1 -0
  187. package/dist-esm/node/index.d.ts +11 -0
  188. package/dist-esm/node/index.d.ts.map +1 -0
  189. package/dist-esm/node/index.js +11 -0
  190. package/dist-esm/node/index.js.map +1 -0
  191. package/dist-esm/node/init.d.ts +75 -0
  192. package/dist-esm/node/init.d.ts.map +1 -0
  193. package/dist-esm/node/init.js +239 -0
  194. package/dist-esm/node/init.js.map +1 -0
  195. package/dist-esm/node/log-processor.d.ts +83 -0
  196. package/dist-esm/node/log-processor.d.ts.map +1 -0
  197. package/dist-esm/node/log-processor.js +261 -0
  198. package/dist-esm/node/log-processor.js.map +1 -0
  199. package/dist-esm/node/metrics-client.d.ts +66 -0
  200. package/dist-esm/node/metrics-client.d.ts.map +1 -0
  201. package/dist-esm/node/metrics-client.js +189 -0
  202. package/dist-esm/node/metrics-client.js.map +1 -0
  203. package/dist-esm/node/traced-socket.d.ts +76 -0
  204. package/dist-esm/node/traced-socket.d.ts.map +1 -0
  205. package/dist-esm/node/traced-socket.js +257 -0
  206. package/dist-esm/node/traced-socket.js.map +1 -0
  207. package/dist-esm/testing/in-memory-exporter.d.ts +179 -0
  208. package/dist-esm/testing/in-memory-exporter.d.ts.map +1 -0
  209. package/dist-esm/testing/in-memory-exporter.js +248 -0
  210. package/dist-esm/testing/in-memory-exporter.js.map +1 -0
  211. package/dist-esm/testing/index.d.ts +8 -0
  212. package/dist-esm/testing/index.d.ts.map +1 -0
  213. package/dist-esm/testing/index.js +8 -0
  214. package/dist-esm/testing/index.js.map +1 -0
  215. package/dist-esm/testing/test-init.d.ts +80 -0
  216. package/dist-esm/testing/test-init.d.ts.map +1 -0
  217. package/dist-esm/testing/test-init.js +137 -0
  218. package/dist-esm/testing/test-init.js.map +1 -0
  219. package/dist-esm/types/index.d.ts +40 -0
  220. package/dist-esm/types/index.d.ts.map +1 -0
  221. package/dist-esm/types/index.js +7 -0
  222. package/dist-esm/types/index.js.map +1 -0
  223. package/dist-esm/types/policy.d.ts +92 -0
  224. package/dist-esm/types/policy.d.ts.map +1 -0
  225. package/dist-esm/types/policy.js +122 -0
  226. package/dist-esm/types/policy.js.map +1 -0
  227. package/package.json +101 -0
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Telemetry ESLint Rules
3
+ *
4
+ * Lint rules for enforcing telemetry best practices:
5
+ * - no-forbidden-attributes: Prevents Tier 1 data in Tier 2 paths
6
+ * - no-direct-otel-sdk: Enforces use of telemetry bootstrap
7
+ */
8
+ export { noForbiddenTelemetryAttributes, noDirectOtelSdk, telemetryRules, FORBIDDEN_ATTRIBUTE_PATTERNS, } from './forbidden-attributes.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/lint/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,8BAA8B,EAC9B,eAAe,EACf,cAAc,EACd,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Telemetry ESLint Rules
3
+ *
4
+ * Lint rules for enforcing telemetry best practices:
5
+ * - no-forbidden-attributes: Prevents Tier 1 data in Tier 2 paths
6
+ * - no-direct-otel-sdk: Enforces use of telemetry bootstrap
7
+ */
8
+ export { noForbiddenTelemetryAttributes, noDirectOtelSdk, telemetryRules, FORBIDDEN_ATTRIBUTE_PATTERNS, } from './forbidden-attributes.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/lint/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EACL,8BAA8B,EAC9B,eAAe,EACf,cAAc,EACd,4BAA4B,GAC7B,MAAM,2BAA2B,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * LLMObs Tiered Telemetry
3
+ *
4
+ * This module provides tiered telemetry for LLMObs (LLM Observability) data:
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import {
9
+ * createTier1LLMObsExporter,
10
+ * LLMObsTier2Summarizer,
11
+ * } from '@superblocksteam/telemetry/llmobs';
12
+ *
13
+ * // Tier 1: Local storage
14
+ * const { exporter, store } = createTier1LLMObsExporter();
15
+ *
16
+ * // Tier 2: Summarize for OTEL-aligned metrics
17
+ * const summarizer = new LLMObsTier2Summarizer(metricsClient);
18
+ * ```
19
+ */
20
+ export { Tier1LLMObsExporter, InMemoryLLMObsStore, createTier1LLMObsExporter, type LLMObsLocalStore, } from './tier1-exporter.js';
21
+ export { LLMObsTier2Summarizer, type LLMSpanSummary, type ToolSpanSummary, type LLMErrorCategory, type LLMFinishReason, type LLMProvider, type LLMRequestMetricLabels, type TokenMetricLabels, type ToolCallMetricLabels, type Tier2MetricsClient, } from './tier2-summarizer.js';
22
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/llmobs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,EACzB,KAAK,gBAAgB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,qBAAqB,EACrB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,eAAe,EACpB,KAAK,WAAW,EAChB,KAAK,sBAAsB,EAC3B,KAAK,iBAAiB,EACtB,KAAK,oBAAoB,EACzB,KAAK,kBAAkB,GACxB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,22 @@
1
+ /**
2
+ * LLMObs Tiered Telemetry
3
+ *
4
+ * This module provides tiered telemetry for LLMObs (LLM Observability) data:
5
+ *
6
+ * @example
7
+ * ```typescript
8
+ * import {
9
+ * createTier1LLMObsExporter,
10
+ * LLMObsTier2Summarizer,
11
+ * } from '@superblocksteam/telemetry/llmobs';
12
+ *
13
+ * // Tier 1: Local storage
14
+ * const { exporter, store } = createTier1LLMObsExporter();
15
+ *
16
+ * // Tier 2: Summarize for OTEL-aligned metrics
17
+ * const summarizer = new LLMObsTier2Summarizer(metricsClient);
18
+ * ```
19
+ */
20
+ export { Tier1LLMObsExporter, InMemoryLLMObsStore, createTier1LLMObsExporter, } from './tier1-exporter.js';
21
+ export { LLMObsTier2Summarizer, } from './tier2-summarizer.js';
22
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/llmobs/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,yBAAyB,GAE1B,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,qBAAqB,GAUtB,MAAM,uBAAuB,CAAC"}
@@ -0,0 +1,146 @@
1
+ /**
2
+ * Tier 1 LLMObs Exporter
3
+ *
4
+ * Stores full-fidelity LLMObs spans locally for debugging.
5
+ * These spans contain prompts, code, tool IO - NEVER exported for cloud-prem.
6
+ *
7
+ * For cloud deployments, Tier 1 data can be exported (same trust boundary).
8
+ * For cloud-prem deployments, Tier 1 data stays local only.
9
+ */
10
+ import type { SpanExporter, ReadableSpan } from '@opentelemetry/sdk-trace-base';
11
+ import type { ExportResult } from '@opentelemetry/core';
12
+ /**
13
+ * Storage interface for Tier 1 LLMObs spans.
14
+ *
15
+ * Provides queryable access for local debugging.
16
+ * Implementation can be in-memory, filesystem, or local database.
17
+ */
18
+ export interface LLMObsLocalStore {
19
+ /**
20
+ * Store a span for later retrieval.
21
+ *
22
+ * @param span - The span to store
23
+ */
24
+ store(span: ReadableSpan): void;
25
+ /**
26
+ * Query spans by session ID.
27
+ *
28
+ * @param sessionId - Session ID to query
29
+ * @returns Matching spans
30
+ */
31
+ query(sessionId: string): ReadableSpan[];
32
+ /**
33
+ * Clear all stored spans.
34
+ */
35
+ clear(): void;
36
+ /**
37
+ * Get the count of stored spans.
38
+ */
39
+ size(): number;
40
+ }
41
+ /**
42
+ * In-memory implementation of LLMObsLocalStore.
43
+ *
44
+ * Suitable for development and short-lived processes.
45
+ * Spans are automatically evicted when limits are reached.
46
+ */
47
+ export declare class InMemoryLLMObsStore implements LLMObsLocalStore {
48
+ private readonly spans;
49
+ private readonly maxSpansPerSession;
50
+ private readonly maxSessions;
51
+ private totalSpanCount;
52
+ /**
53
+ * Create an in-memory LLMObs store.
54
+ *
55
+ * @param options - Configuration options
56
+ * @param options.maxSpansPerSession - Maximum spans to retain per session (default: 1000)
57
+ * @param options.maxSessions - Maximum sessions to retain (default: 100)
58
+ */
59
+ constructor(options?: {
60
+ maxSpansPerSession?: number;
61
+ maxSessions?: number;
62
+ });
63
+ store(span: ReadableSpan): void;
64
+ query(sessionId: string): ReadableSpan[];
65
+ clear(): void;
66
+ size(): number;
67
+ /**
68
+ * Get all session IDs.
69
+ *
70
+ * @returns Array of session IDs
71
+ */
72
+ getSessions(): string[];
73
+ /**
74
+ * Extract session ID from span attributes.
75
+ */
76
+ private getSessionId;
77
+ }
78
+ /**
79
+ * Tier 1 LLMObs Exporter.
80
+ *
81
+ * Exports LLMObs spans to local storage only.
82
+ * These spans contain full fidelity debugging data (prompts, code, tool IO).
83
+ * NEVER exported to external backends in cloud-prem deployments.
84
+ *
85
+ * @example
86
+ * ```typescript
87
+ * const store = new InMemoryLLMObsStore();
88
+ * const exporter = new Tier1LLMObsExporter(store);
89
+ *
90
+ * // Later, query for debugging
91
+ * const spans = store.query(sessionId);
92
+ * ```
93
+ */
94
+ export declare class Tier1LLMObsExporter implements SpanExporter {
95
+ private readonly localStore;
96
+ private readonly debugLogging;
97
+ private isShutdown;
98
+ /**
99
+ * Create a Tier 1 LLMObs exporter.
100
+ *
101
+ * @param localStore - Storage for local spans
102
+ * @param options - Configuration options
103
+ * @param options.debugLogging - Enable debug logging (default: false)
104
+ */
105
+ constructor(localStore: LLMObsLocalStore, options?: {
106
+ debugLogging?: boolean;
107
+ });
108
+ /**
109
+ * Export spans to local storage.
110
+ *
111
+ * @param spans - Spans to export
112
+ * @param resultCallback - Callback with export result
113
+ */
114
+ export(spans: ReadableSpan[], resultCallback: (result: ExportResult) => void): void;
115
+ /**
116
+ * Shutdown the exporter.
117
+ */
118
+ shutdown(): Promise<void>;
119
+ /**
120
+ * Force flush (no-op for local storage).
121
+ */
122
+ forceFlush(): Promise<void>;
123
+ /**
124
+ * Check if a span is an LLMObs span.
125
+ */
126
+ private isLLMObsSpan;
127
+ /**
128
+ * Get span duration in milliseconds.
129
+ */
130
+ private getDurationMs;
131
+ }
132
+ /**
133
+ * Create a Tier 1 LLMObs exporter with in-memory storage.
134
+ *
135
+ * @param options - Configuration options
136
+ * @returns Exporter and store instances
137
+ */
138
+ export declare function createTier1LLMObsExporter(options?: {
139
+ maxSpansPerSession?: number;
140
+ maxSessions?: number;
141
+ debugLogging?: boolean;
142
+ }): {
143
+ exporter: Tier1LLMObsExporter;
144
+ store: InMemoryLLMObsStore;
145
+ };
146
+ //# sourceMappingURL=tier1-exporter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier1-exporter.d.ts","sourceRoot":"","sources":["../../src/llmobs/tier1-exporter.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD;;;;;GAKG;AACH,MAAM,WAAW,gBAAgB;IAC/B;;;;OAIG;IACH,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI,CAAC;IAEhC;;;;;OAKG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE,CAAC;IAEzC;;OAEG;IACH,KAAK,IAAI,IAAI,CAAC;IAEd;;OAEG;IACH,IAAI,IAAI,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,qBAAa,mBAAoB,YAAW,gBAAgB;IAC1D,OAAO,CAAC,QAAQ,CAAC,KAAK,CAA0C;IAChE,OAAO,CAAC,QAAQ,CAAC,kBAAkB,CAAS;IAC5C,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,cAAc,CAAK;IAE3B;;;;;;OAMG;gBACS,OAAO,GAAE;QAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAO;IAK/E,KAAK,CAAC,IAAI,EAAE,YAAY,GAAG,IAAI;IA4B/B,KAAK,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,EAAE;IAIxC,KAAK,IAAI,IAAI;IAKb,IAAI,IAAI,MAAM;IAId;;;;OAIG;IACH,WAAW,IAAI,MAAM,EAAE;IAIvB;;OAEG;IACH,OAAO,CAAC,YAAY;CAOrB;AAED;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,mBAAoB,YAAW,YAAY;IACtD,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAmB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,UAAU,CAAS;IAE3B;;;;;;OAMG;gBAED,UAAU,EAAE,gBAAgB,EAC5B,OAAO,GAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAA;KAAO;IAM1C;;;;;OAKG;IACH,MAAM,CACJ,KAAK,EAAE,YAAY,EAAE,EACrB,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAC7C,IAAI;IAyBP;;OAEG;IACG,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;IAI/B;;OAEG;IACG,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC;IAIjC;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB;;OAEG;IACH,OAAO,CAAC,aAAa;CAKtB;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,CAAC,EAAE;IAClD,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB,GAAG;IAAE,QAAQ,EAAE,mBAAmB,CAAC;IAAC,KAAK,EAAE,mBAAmB,CAAA;CAAE,CAShE"}
@@ -0,0 +1,190 @@
1
+ /**
2
+ * Tier 1 LLMObs Exporter
3
+ *
4
+ * Stores full-fidelity LLMObs spans locally for debugging.
5
+ * These spans contain prompts, code, tool IO - NEVER exported for cloud-prem.
6
+ *
7
+ * For cloud deployments, Tier 1 data can be exported (same trust boundary).
8
+ * For cloud-prem deployments, Tier 1 data stays local only.
9
+ */
10
+ import { ExportResultCode } from '@opentelemetry/core';
11
+ /**
12
+ * In-memory implementation of LLMObsLocalStore.
13
+ *
14
+ * Suitable for development and short-lived processes.
15
+ * Spans are automatically evicted when limits are reached.
16
+ */
17
+ export class InMemoryLLMObsStore {
18
+ spans = new Map();
19
+ maxSpansPerSession;
20
+ maxSessions;
21
+ totalSpanCount = 0;
22
+ /**
23
+ * Create an in-memory LLMObs store.
24
+ *
25
+ * @param options - Configuration options
26
+ * @param options.maxSpansPerSession - Maximum spans to retain per session (default: 1000)
27
+ * @param options.maxSessions - Maximum sessions to retain (default: 100)
28
+ */
29
+ constructor(options = {}) {
30
+ this.maxSpansPerSession = options.maxSpansPerSession ?? 1000;
31
+ this.maxSessions = options.maxSessions ?? 100;
32
+ }
33
+ store(span) {
34
+ const sessionId = this.getSessionId(span) || 'default';
35
+ // Create session if doesn't exist
36
+ if (!this.spans.has(sessionId)) {
37
+ // Evict oldest session if at capacity
38
+ if (this.spans.size >= this.maxSessions) {
39
+ const oldestSession = this.spans.keys().next().value;
40
+ if (oldestSession) {
41
+ const evictedSpans = this.spans.get(oldestSession)?.length ?? 0;
42
+ this.totalSpanCount -= evictedSpans;
43
+ this.spans.delete(oldestSession);
44
+ }
45
+ }
46
+ this.spans.set(sessionId, []);
47
+ }
48
+ const sessionSpans = this.spans.get(sessionId);
49
+ sessionSpans.push(span);
50
+ this.totalSpanCount++;
51
+ // Evict oldest spans in session if at capacity
52
+ if (sessionSpans.length > this.maxSpansPerSession) {
53
+ sessionSpans.shift();
54
+ this.totalSpanCount--;
55
+ }
56
+ }
57
+ query(sessionId) {
58
+ return this.spans.get(sessionId) ?? [];
59
+ }
60
+ clear() {
61
+ this.spans.clear();
62
+ this.totalSpanCount = 0;
63
+ }
64
+ size() {
65
+ return this.totalSpanCount;
66
+ }
67
+ /**
68
+ * Get all session IDs.
69
+ *
70
+ * @returns Array of session IDs
71
+ */
72
+ getSessions() {
73
+ return Array.from(this.spans.keys());
74
+ }
75
+ /**
76
+ * Extract session ID from span attributes.
77
+ */
78
+ getSessionId(span) {
79
+ return (span.attributes['llmobs.session_id'] ||
80
+ span.attributes['session.id'] ||
81
+ span.attributes['session_id']);
82
+ }
83
+ }
84
+ /**
85
+ * Tier 1 LLMObs Exporter.
86
+ *
87
+ * Exports LLMObs spans to local storage only.
88
+ * These spans contain full fidelity debugging data (prompts, code, tool IO).
89
+ * NEVER exported to external backends in cloud-prem deployments.
90
+ *
91
+ * @example
92
+ * ```typescript
93
+ * const store = new InMemoryLLMObsStore();
94
+ * const exporter = new Tier1LLMObsExporter(store);
95
+ *
96
+ * // Later, query for debugging
97
+ * const spans = store.query(sessionId);
98
+ * ```
99
+ */
100
+ export class Tier1LLMObsExporter {
101
+ localStore;
102
+ debugLogging;
103
+ isShutdown = false;
104
+ /**
105
+ * Create a Tier 1 LLMObs exporter.
106
+ *
107
+ * @param localStore - Storage for local spans
108
+ * @param options - Configuration options
109
+ * @param options.debugLogging - Enable debug logging (default: false)
110
+ */
111
+ constructor(localStore, options = {}) {
112
+ this.localStore = localStore;
113
+ this.debugLogging = options.debugLogging ?? false;
114
+ }
115
+ /**
116
+ * Export spans to local storage.
117
+ *
118
+ * @param spans - Spans to export
119
+ * @param resultCallback - Callback with export result
120
+ */
121
+ export(spans, resultCallback) {
122
+ if (this.isShutdown) {
123
+ resultCallback({ code: ExportResultCode.FAILED, error: new Error('Exporter is shutdown') });
124
+ return;
125
+ }
126
+ for (const span of spans) {
127
+ // Only store LLMObs-related spans
128
+ if (this.isLLMObsSpan(span)) {
129
+ this.localStore.store(span);
130
+ if (this.debugLogging) {
131
+ console.debug('[LLMObs Tier 1]', span.name, {
132
+ traceId: span.spanContext().traceId,
133
+ duration: this.getDurationMs(span),
134
+ hasInput: !!span.attributes['llmobs.input'],
135
+ hasOutput: !!span.attributes['llmobs.output'],
136
+ });
137
+ }
138
+ }
139
+ }
140
+ resultCallback({ code: ExportResultCode.SUCCESS });
141
+ }
142
+ /**
143
+ * Shutdown the exporter.
144
+ */
145
+ async shutdown() {
146
+ this.isShutdown = true;
147
+ }
148
+ /**
149
+ * Force flush (no-op for local storage).
150
+ */
151
+ async forceFlush() {
152
+ // No-op for local storage
153
+ }
154
+ /**
155
+ * Check if a span is an LLMObs span.
156
+ */
157
+ isLLMObsSpan(span) {
158
+ return (span.name.startsWith('ai.') ||
159
+ span.name.startsWith('llmobs.') ||
160
+ span.name.startsWith('llm.') ||
161
+ span.name.startsWith('tool.') ||
162
+ span.name.startsWith('clark.') ||
163
+ !!span.attributes['llmobs.span_kind']);
164
+ }
165
+ /**
166
+ * Get span duration in milliseconds.
167
+ */
168
+ getDurationMs(span) {
169
+ const [startSecs, startNanos] = span.startTime;
170
+ const [endSecs, endNanos] = span.endTime;
171
+ return (endSecs - startSecs) * 1000 + (endNanos - startNanos) / 1e6;
172
+ }
173
+ }
174
+ /**
175
+ * Create a Tier 1 LLMObs exporter with in-memory storage.
176
+ *
177
+ * @param options - Configuration options
178
+ * @returns Exporter and store instances
179
+ */
180
+ export function createTier1LLMObsExporter(options) {
181
+ const store = new InMemoryLLMObsStore({
182
+ maxSpansPerSession: options?.maxSpansPerSession,
183
+ maxSessions: options?.maxSessions,
184
+ });
185
+ const exporter = new Tier1LLMObsExporter(store, {
186
+ debugLogging: options?.debugLogging,
187
+ });
188
+ return { exporter, store };
189
+ }
190
+ //# sourceMappingURL=tier1-exporter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tier1-exporter.js","sourceRoot":"","sources":["../../src/llmobs/tier1-exporter.ts"],"names":[],"mappings":"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"}