@vinhnt-sdk/trace 0.4.1 → 0.4.3
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/README.md +183 -0
- package/dist/index.d.ts +4 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/otlp-exporter.d.ts +141 -0
- package/dist/otlp-exporter.d.ts.map +1 -0
- package/dist/otlp-exporter.js +238 -0
- package/dist/otlp-exporter.js.map +1 -0
- package/dist/telemetry.d.ts +27 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +15 -0
- package/dist/telemetry.js.map +1 -1
- package/package.json +10 -9
package/README.md
ADDED
|
@@ -0,0 +1,183 @@
|
|
|
1
|
+
# @vinhnt-sdk/trace
|
|
2
|
+
|
|
3
|
+
> Version: 0.4.3 | Status: STABLE
|
|
4
|
+
|
|
5
|
+
Observability for vinhnt-sdk — OpenTelemetry-compatible spans, timeline replay, telemetry aggregation, and cost tracking.
|
|
6
|
+
|
|
7
|
+
## Install
|
|
8
|
+
|
|
9
|
+
`ash
|
|
10
|
+
# npm
|
|
11
|
+
npm install @vinhnt-sdk/trace
|
|
12
|
+
|
|
13
|
+
# pnpm (monorepo)
|
|
14
|
+
pnpm add @vinhnt-sdk/trace
|
|
15
|
+
`
|
|
16
|
+
|
|
17
|
+
## Features
|
|
18
|
+
|
|
19
|
+
- **SpanRecorder** — Record and query OpenTelemetry-compatible spans
|
|
20
|
+
- **Timeline** — Build transcripts from run events for replay
|
|
21
|
+
- **CostMeter** — Track token usage and calculate costs per model
|
|
22
|
+
- **ContextPressure** — Monitor context window utilization
|
|
23
|
+
- **TelemetryProvider** — Interface for custom telemetry backends
|
|
24
|
+
- **OTLP exporter** — `createOtlpSpanExporter` ships spans to any OTLP/HTTP collector (optional)
|
|
25
|
+
- **DEFAULT_MODEL_PRICING** — Built-in pricing for common models
|
|
26
|
+
|
|
27
|
+
## Quick Start
|
|
28
|
+
|
|
29
|
+
` ypescript
|
|
30
|
+
import {
|
|
31
|
+
SpanRecorder, createSpan, endSpan,
|
|
32
|
+
CostMeter, calculateCost, DEFAULT_MODEL_PRICING,
|
|
33
|
+
Timeline, buildTranscript,
|
|
34
|
+
} from "@vinhnt-sdk/trace";
|
|
35
|
+
|
|
36
|
+
// Create and record spans
|
|
37
|
+
const recorder = new SpanRecorder();
|
|
38
|
+
const span = createSpan({ name: "llm-call", kind: "client" });
|
|
39
|
+
recorder.record(span);
|
|
40
|
+
|
|
41
|
+
// ... do work ...
|
|
42
|
+
|
|
43
|
+
endSpan(span, { status: "ok" });
|
|
44
|
+
|
|
45
|
+
// Calculate costs
|
|
46
|
+
const meter = new CostMeter();
|
|
47
|
+
meter.record({
|
|
48
|
+
inputTokens: 1000,
|
|
49
|
+
outputTokens: 500,
|
|
50
|
+
model: "gpt-4o",
|
|
51
|
+
});
|
|
52
|
+
console.log(meter.totalCost); // Cost in USD
|
|
53
|
+
|
|
54
|
+
// Build transcript from events
|
|
55
|
+
const transcript = buildTranscript(events);
|
|
56
|
+
console.log(transcript);
|
|
57
|
+
`
|
|
58
|
+
|
|
59
|
+
## API Reference
|
|
60
|
+
|
|
61
|
+
### Tracing
|
|
62
|
+
|
|
63
|
+
| Export | Type | Description |
|
|
64
|
+
|--------|------|-------------|
|
|
65
|
+
| SpanRecorder | Class | Record and query spans |
|
|
66
|
+
| createSpan | Function | Create a new span |
|
|
67
|
+
| endSpan | Function | End a span with status |
|
|
68
|
+
| ddSpanEvent | Function | Add an event to a span |
|
|
69
|
+
| generateTraceId | Function | Generate a unique trace ID |
|
|
70
|
+
|
|
71
|
+
### Span Types
|
|
72
|
+
|
|
73
|
+
| Export | Type | Description |
|
|
74
|
+
|--------|------|-------------|
|
|
75
|
+
| Span | Interface | A single trace span |
|
|
76
|
+
| SpanKind | Type | Span type (client, server, internal) |
|
|
77
|
+
| SpanStatus | Type | Span completion status |
|
|
78
|
+
| SpanEvent | Interface | Event within a span |
|
|
79
|
+
| SpanNode | Interface | Span tree node |
|
|
80
|
+
| TraceContext | Interface | Trace propagation context |
|
|
81
|
+
|
|
82
|
+
### Timeline
|
|
83
|
+
|
|
84
|
+
| Export | Type | Description |
|
|
85
|
+
|--------|------|-------------|
|
|
86
|
+
| Timeline | Class | Build and query run timelines |
|
|
87
|
+
| uildTranscript | Function | Build transcript from events |
|
|
88
|
+
| TimelineEvent | Interface | Event in a timeline |
|
|
89
|
+
| TranscriptEntry | Interface | Transcript line item |
|
|
90
|
+
|
|
91
|
+
### Telemetry
|
|
92
|
+
|
|
93
|
+
| Export | Type | Description |
|
|
94
|
+
|--------|------|-------------|
|
|
95
|
+
| CostMeter | Class | Track token costs |
|
|
96
|
+
| calculateCost | Function | Calculate cost from tokens |
|
|
97
|
+
| calculateContextPressure | Function | Calculate context utilization |
|
|
98
|
+
| DEFAULT_MODEL_PRICING | Constant | Default pricing for common models |
|
|
99
|
+
| ConsoleTelemetryProvider | Class | Console-based telemetry output |
|
|
100
|
+
|
|
101
|
+
### Telemetry Types
|
|
102
|
+
|
|
103
|
+
| Export | Type | Description |
|
|
104
|
+
|--------|------|-------------|
|
|
105
|
+
| UsageStats | Interface | Token usage statistics |
|
|
106
|
+
| ModelPricing | Interface | Per-1M-token pricing |
|
|
107
|
+
| ContextPressure | Interface | Context window utilization |
|
|
108
|
+
| TelemetryProvider | Interface | Custom telemetry backend |
|
|
109
|
+
|
|
110
|
+
### OTLP Export (P1-9)
|
|
111
|
+
|
|
112
|
+
| Export | Type | Description |
|
|
113
|
+
|--------|------|-------------|
|
|
114
|
+
| createOtlpSpanExporter | Function | OTLP/HTTP JSON exporter (config or env endpoint) |
|
|
115
|
+
| resolveOtlpEndpoint | Function | Resolve endpoint from config / `OTEL_EXPORTER_OTLP_*` |
|
|
116
|
+
| mapSpanToOtlp | Function | Map custom `Span` → OTLP JSON span |
|
|
117
|
+
| buildOtlpExportRequest | Function | Wrap spans into `ExportTraceServiceRequest` |
|
|
118
|
+
| SpanExporter | Interface | `export(spans)` / `shutdown()` seam |
|
|
119
|
+
|
|
120
|
+
Endpoint resolution (first match wins):
|
|
121
|
+
|
|
122
|
+
1. `config.endpoint`
|
|
123
|
+
2. `OTEL_EXPORTER_OTLP_TRACES_ENDPOINT`
|
|
124
|
+
3. `OTEL_EXPORTER_OTLP_ENDPOINT` + `/v1/traces`
|
|
125
|
+
|
|
126
|
+
Headers: `OTEL_EXPORTER_OTLP_HEADERS` (`k1=v1,k2=v2`) merged with `config.headers`.
|
|
127
|
+
Resource: `config.resourceAttributes` (default `service.name=vinhnt-sdk`, override via `OTEL_SERVICE_NAME` in attributes).
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
import { createOtlpSpanExporter, SpanRecorder } from "@vinhnt-sdk/trace";
|
|
131
|
+
|
|
132
|
+
const recorder = new SpanRecorder();
|
|
133
|
+
// ... record spans ...
|
|
134
|
+
|
|
135
|
+
const exporter = createOtlpSpanExporter({
|
|
136
|
+
endpoint: "http://localhost:4318/v1/traces", // or set env only
|
|
137
|
+
resourceAttributes: { "service.name": "my-agent", "deployment.environment": "dev" },
|
|
138
|
+
});
|
|
139
|
+
await exporter.export(recorder.getSpans());
|
|
140
|
+
await exporter.shutdown();
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
No exporter is created unless you call `createOtlpSpanExporter` — default telemetry path unchanged.
|
|
144
|
+
|
|
145
|
+
## Usage Examples
|
|
146
|
+
|
|
147
|
+
### Cost Tracking
|
|
148
|
+
|
|
149
|
+
` ypescript
|
|
150
|
+
import { CostMeter, DEFAULT_MODEL_PRICING } from "@vinhnt-sdk/trace";
|
|
151
|
+
|
|
152
|
+
const meter = new CostMeter();
|
|
153
|
+
|
|
154
|
+
// Track usage across multiple calls
|
|
155
|
+
meter.record({ inputTokens: 1000, outputTokens: 500, model: "gpt-4o" });
|
|
156
|
+
meter.record({ inputTokens: 2000, outputTokens: 1000, model: "gpt-4o-mini" });
|
|
157
|
+
|
|
158
|
+
console.log(meter.totalCost); // Total cost in USD
|
|
159
|
+
`
|
|
160
|
+
|
|
161
|
+
### Custom Telemetry Provider
|
|
162
|
+
|
|
163
|
+
` ypescript
|
|
164
|
+
import type { TelemetryProvider } from "@vinhnt-sdk/trace";
|
|
165
|
+
|
|
166
|
+
const customProvider: TelemetryProvider = {
|
|
167
|
+
name: "datadog",
|
|
168
|
+
async recordSpan(span) {
|
|
169
|
+
await sendToDatadog(span);
|
|
170
|
+
},
|
|
171
|
+
async recordUsage(usage) {
|
|
172
|
+
await sendMetricsToDatadog(usage);
|
|
173
|
+
},
|
|
174
|
+
};
|
|
175
|
+
`
|
|
176
|
+
|
|
177
|
+
## Dependencies
|
|
178
|
+
|
|
179
|
+
- @vinhnt-sdk/schema >=0.5.0
|
|
180
|
+
|
|
181
|
+
## License
|
|
182
|
+
|
|
183
|
+
MIT
|
package/dist/index.d.ts
CHANGED
|
@@ -11,6 +11,8 @@ export { SpanRecorder, createSpan, endSpan, addSpanEvent, generateTraceId, } fro
|
|
|
11
11
|
export type { Span, SpanKind, SpanStatus, SpanEvent, SpanNode, TraceContext } from "./tracing.js";
|
|
12
12
|
export { Timeline, buildTranscript } from "./timeline.js";
|
|
13
13
|
export type { TimelineEvent, TimelineEventType, TranscriptEntry } from "./timeline.js";
|
|
14
|
-
export { CostMeter, calculateCost, calculateContextPressure, DEFAULT_MODEL_PRICING, MODEL_PRICING } from "./telemetry.js";
|
|
15
|
-
export type { UsageStats, ModelPricing, ContextPressure } from "./telemetry.js";
|
|
14
|
+
export { CostMeter, calculateCost, calculateContextPressure, DEFAULT_MODEL_PRICING, MODEL_PRICING, ConsoleTelemetryProvider } from "./telemetry.js";
|
|
15
|
+
export type { UsageStats, ModelPricing, ContextPressure, TelemetryProvider } from "./telemetry.js";
|
|
16
|
+
export { createOtlpSpanExporter, resolveOtlpEndpoint, parseOtlpHeaders, mapSpanToOtlp, buildOtlpExportRequest, toOtlpAnyValue, toOtlpAttributes, toOtlpId, msToUnixNano, OTLP_SPAN_KIND, OTLP_STATUS_OK, OTLP_STATUS_ERROR, OTLP_STATUS_UNSET, } from "./otlp-exporter.js";
|
|
17
|
+
export type { OtlpExporterConfig, SpanExporter, FetchLike, OtlpAnyValue, OtlpKeyValue, OtlpSpan, OtlpSpanEvent, OtlpSpanStatus, OtlpResourceSpans, OtlpExportTraceRequest, } from "./otlp-exporter.js";
|
|
16
18
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAC/C,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGlG,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGvF,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,EACL,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAC/C,eAAe,GAChB,MAAM,cAAc,CAAC;AACtB,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAGlG,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAC1D,YAAY,EAAE,aAAa,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGvF,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AACpJ,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,eAAe,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAGnG,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAC5B,YAAY,EACV,kBAAkB,EAClB,YAAY,EACZ,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,cAAc,EACd,iBAAiB,EACjB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -12,5 +12,7 @@ export { SpanRecorder, createSpan, endSpan, addSpanEvent, generateTraceId, } fro
|
|
|
12
12
|
// ── Timeline ──
|
|
13
13
|
export { Timeline, buildTranscript } from "./timeline.js";
|
|
14
14
|
// ── Telemetry ──
|
|
15
|
-
export { CostMeter, calculateCost, calculateContextPressure, DEFAULT_MODEL_PRICING, MODEL_PRICING } from "./telemetry.js";
|
|
15
|
+
export { CostMeter, calculateCost, calculateContextPressure, DEFAULT_MODEL_PRICING, MODEL_PRICING, ConsoleTelemetryProvider } from "./telemetry.js";
|
|
16
|
+
// ── OTLP export (P1-9) ──
|
|
17
|
+
export { createOtlpSpanExporter, resolveOtlpEndpoint, parseOtlpHeaders, mapSpanToOtlp, buildOtlpExportRequest, toOtlpAnyValue, toOtlpAttributes, toOtlpId, msToUnixNano, OTLP_SPAN_KIND, OTLP_STATUS_OK, OTLP_STATUS_ERROR, OTLP_STATUS_UNSET, } from "./otlp-exporter.js";
|
|
16
18
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gBAAgB;AAChB,OAAO,EACL,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAC/C,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,iBAAiB;AACjB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAG1D,kBAAkB;AAClB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,gBAAgB;AAChB,OAAO,EACL,YAAY,EAAE,UAAU,EAAE,OAAO,EAAE,YAAY,EAC/C,eAAe,GAChB,MAAM,cAAc,CAAC;AAGtB,iBAAiB;AACjB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAG1D,kBAAkB;AAClB,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,wBAAwB,EAAE,qBAAqB,EAAE,aAAa,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;AAGpJ,2BAA2B;AAC3B,OAAO,EACL,sBAAsB,EACtB,mBAAmB,EACnB,gBAAgB,EAChB,aAAa,EACb,sBAAsB,EACtB,cAAc,EACd,gBAAgB,EAChB,QAAQ,EACR,YAAY,EACZ,cAAc,EACd,cAAc,EACd,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OTLP/HTTP span exporter — maps custom Span → OTLP ExportTraceServiceRequest.
|
|
3
|
+
*
|
|
4
|
+
* Zero hard deps: pure JSON encoding over fetch (no @opentelemetry/* runtime dep).
|
|
5
|
+
* Endpoint/headers/service name resolved from config first, then standard OTEL env vars.
|
|
6
|
+
* Default path (no createOtlpSpanExporter call) remains unchanged — no-op / console telemetry.
|
|
7
|
+
*
|
|
8
|
+
* Env (read unless overridden in config):
|
|
9
|
+
* OTEL_EXPORTER_OTLP_TRACES_ENDPOINT full URL for /v1/traces
|
|
10
|
+
* OTEL_EXPORTER_OTLP_ENDPOINT base URL → <base>/v1/traces
|
|
11
|
+
* OTEL_EXPORTER_OTLP_HEADERS k1=v1,k2=v2
|
|
12
|
+
* OTEL_SERVICE_NAME resource attribute service.name
|
|
13
|
+
*/
|
|
14
|
+
import type { Span } from "./tracing.js";
|
|
15
|
+
/** Minimal fetch shape (injectable for tests / custom runtimes). */
|
|
16
|
+
export type FetchLike = (input: string, init?: RequestInit) => Promise<Response>;
|
|
17
|
+
/** Config for createOtlpSpanExporter — all fields optional; env fills gaps. */
|
|
18
|
+
export interface OtlpExporterConfig {
|
|
19
|
+
/** Full OTLP/HTTP traces endpoint (overrides env). */
|
|
20
|
+
endpoint?: string;
|
|
21
|
+
/** Extra HTTP headers merged over env headers. */
|
|
22
|
+
headers?: Record<string, string>;
|
|
23
|
+
/** Resource attributes (service.name etc.). */
|
|
24
|
+
resourceAttributes?: Record<string, unknown>;
|
|
25
|
+
/** Export timeout in ms (default 10000). */
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
/** Instrumentation scope name (default @vinhnt-sdk/trace). */
|
|
28
|
+
scopeName?: string;
|
|
29
|
+
/** Instrumentation scope version. */
|
|
30
|
+
scopeVersion?: string;
|
|
31
|
+
/** Env source for resolution (default process.env). Injectable for tests. */
|
|
32
|
+
env?: Record<string, string | undefined>;
|
|
33
|
+
/** Custom fetch (default globalThis.fetch). */
|
|
34
|
+
fetch?: FetchLike;
|
|
35
|
+
}
|
|
36
|
+
/** Span exporter seam — default path stays no-op unless an exporter is wired. */
|
|
37
|
+
export interface SpanExporter {
|
|
38
|
+
export(spans: readonly Span[]): Promise<void>;
|
|
39
|
+
shutdown(): Promise<void>;
|
|
40
|
+
}
|
|
41
|
+
export type OtlpAnyValue = {
|
|
42
|
+
stringValue: string;
|
|
43
|
+
} | {
|
|
44
|
+
boolValue: boolean;
|
|
45
|
+
} | {
|
|
46
|
+
intValue: string;
|
|
47
|
+
} | {
|
|
48
|
+
doubleValue: number;
|
|
49
|
+
} | {
|
|
50
|
+
arrayValue: {
|
|
51
|
+
values: OtlpAnyValue[];
|
|
52
|
+
};
|
|
53
|
+
} | {
|
|
54
|
+
kvlistValue: {
|
|
55
|
+
values: Array<{
|
|
56
|
+
key: string;
|
|
57
|
+
value: OtlpAnyValue;
|
|
58
|
+
}>;
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
export interface OtlpKeyValue {
|
|
62
|
+
key: string;
|
|
63
|
+
value: OtlpAnyValue;
|
|
64
|
+
}
|
|
65
|
+
export interface OtlpSpanEvent {
|
|
66
|
+
timeUnixNano: string;
|
|
67
|
+
name: string;
|
|
68
|
+
attributes?: OtlpKeyValue[];
|
|
69
|
+
}
|
|
70
|
+
export interface OtlpSpanStatus {
|
|
71
|
+
code: number;
|
|
72
|
+
message?: string;
|
|
73
|
+
}
|
|
74
|
+
export interface OtlpSpan {
|
|
75
|
+
traceId: string;
|
|
76
|
+
spanId: string;
|
|
77
|
+
parentSpanId?: string;
|
|
78
|
+
name: string;
|
|
79
|
+
kind: number;
|
|
80
|
+
startTimeUnixNano: string;
|
|
81
|
+
endTimeUnixNano: string;
|
|
82
|
+
attributes: OtlpKeyValue[];
|
|
83
|
+
events: OtlpSpanEvent[];
|
|
84
|
+
status: OtlpSpanStatus;
|
|
85
|
+
}
|
|
86
|
+
export interface OtlpResourceSpans {
|
|
87
|
+
resource: {
|
|
88
|
+
attributes: OtlpKeyValue[];
|
|
89
|
+
};
|
|
90
|
+
scopeSpans: Array<{
|
|
91
|
+
scope: {
|
|
92
|
+
name: string;
|
|
93
|
+
version?: string;
|
|
94
|
+
};
|
|
95
|
+
spans: OtlpSpan[];
|
|
96
|
+
}>;
|
|
97
|
+
}
|
|
98
|
+
export interface OtlpExportTraceRequest {
|
|
99
|
+
resourceSpans: OtlpResourceSpans[];
|
|
100
|
+
}
|
|
101
|
+
/** OTLP span kind codes (proto Span.Kind). */
|
|
102
|
+
export declare const OTLP_SPAN_KIND: Record<string, number>;
|
|
103
|
+
/** OTLP status codes (proto Status.StatusCode). */
|
|
104
|
+
export declare const OTLP_STATUS_OK = 1;
|
|
105
|
+
export declare const OTLP_STATUS_ERROR = 2;
|
|
106
|
+
export declare const OTLP_STATUS_UNSET = 0;
|
|
107
|
+
/**
|
|
108
|
+
* Resolve OTLP traces endpoint: config.endpoint > OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
|
|
109
|
+
* > OTEL_EXPORTER_OTLP_ENDPOINT + "/v1/traces". Returns undefined if none set.
|
|
110
|
+
*/
|
|
111
|
+
export declare function resolveOtlpEndpoint(config?: Pick<OtlpExporterConfig, "endpoint" | "env">): string | undefined;
|
|
112
|
+
/** Parse OTEL_EXPORTER_OTLP_HEADERS format `k1=v1,k2=v2`. */
|
|
113
|
+
export declare function parseOtlpHeaders(raw: string | undefined): Record<string, string>;
|
|
114
|
+
/** Deterministic FNV-1a → hex string of `length` chars (span/trace id wire form). */
|
|
115
|
+
export declare function toOtlpId(id: string, length: number): string;
|
|
116
|
+
/** Convert ms epoch → OTLP timeUnixNano string. */
|
|
117
|
+
export declare function msToUnixNano(ms: number): string;
|
|
118
|
+
/** Map a JS value to OTLP AnyValue. */
|
|
119
|
+
export declare function toOtlpAnyValue(value: unknown): OtlpAnyValue;
|
|
120
|
+
/** Convert attributes record → OTLP key-value list. */
|
|
121
|
+
export declare function toOtlpAttributes(attributes: Record<string, unknown>): OtlpKeyValue[];
|
|
122
|
+
/** Map a custom Span → OTLP JSON span. Exported for unit tests / custom pipelines. */
|
|
123
|
+
export declare function mapSpanToOtlp(span: Span): OtlpSpan;
|
|
124
|
+
/** Build full ExportTraceServiceRequest body. */
|
|
125
|
+
export declare function buildOtlpExportRequest(spans: readonly Span[], config?: Pick<OtlpExporterConfig, "resourceAttributes" | "scopeName" | "scopeVersion">): OtlpExportTraceRequest;
|
|
126
|
+
/**
|
|
127
|
+
* Create an OTLP/HTTP span exporter (JSON encoding).
|
|
128
|
+
*
|
|
129
|
+
* @throws ConfigurationError if no endpoint in config or env.
|
|
130
|
+
*
|
|
131
|
+
* @example
|
|
132
|
+
* ```typescript
|
|
133
|
+
* const exporter = createOtlpSpanExporter({
|
|
134
|
+
* endpoint: "http://localhost:4318/v1/traces",
|
|
135
|
+
* });
|
|
136
|
+
* await exporter.export(recorder.getSpans());
|
|
137
|
+
* await exporter.shutdown();
|
|
138
|
+
* ```
|
|
139
|
+
*/
|
|
140
|
+
export declare function createOtlpSpanExporter(config?: OtlpExporterConfig): SpanExporter;
|
|
141
|
+
//# sourceMappingURL=otlp-exporter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otlp-exporter.d.ts","sourceRoot":"","sources":["../src/otlp-exporter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,238 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OTLP/HTTP span exporter — maps custom Span → OTLP ExportTraceServiceRequest.
|
|
3
|
+
*
|
|
4
|
+
* Zero hard deps: pure JSON encoding over fetch (no @opentelemetry/* runtime dep).
|
|
5
|
+
* Endpoint/headers/service name resolved from config first, then standard OTEL env vars.
|
|
6
|
+
* Default path (no createOtlpSpanExporter call) remains unchanged — no-op / console telemetry.
|
|
7
|
+
*
|
|
8
|
+
* Env (read unless overridden in config):
|
|
9
|
+
* OTEL_EXPORTER_OTLP_TRACES_ENDPOINT full URL for /v1/traces
|
|
10
|
+
* OTEL_EXPORTER_OTLP_ENDPOINT base URL → <base>/v1/traces
|
|
11
|
+
* OTEL_EXPORTER_OTLP_HEADERS k1=v1,k2=v2
|
|
12
|
+
* OTEL_SERVICE_NAME resource attribute service.name
|
|
13
|
+
*/
|
|
14
|
+
import { ConfigurationError, NetworkError } from "@vinhnt-sdk/schema";
|
|
15
|
+
/** OTLP span kind codes (proto Span.Kind). */
|
|
16
|
+
export const OTLP_SPAN_KIND = {
|
|
17
|
+
internal: 1,
|
|
18
|
+
server: 2,
|
|
19
|
+
client: 3,
|
|
20
|
+
producer: 4,
|
|
21
|
+
consumer: 5,
|
|
22
|
+
};
|
|
23
|
+
/** OTLP status codes (proto Status.StatusCode). */
|
|
24
|
+
export const OTLP_STATUS_OK = 1;
|
|
25
|
+
export const OTLP_STATUS_ERROR = 2;
|
|
26
|
+
export const OTLP_STATUS_UNSET = 0;
|
|
27
|
+
const DEFAULT_TIMEOUT_MS = 10_000;
|
|
28
|
+
const DEFAULT_SCOPE_NAME = "@vinhnt-sdk/trace";
|
|
29
|
+
/**
|
|
30
|
+
* Resolve OTLP traces endpoint: config.endpoint > OTEL_EXPORTER_OTLP_TRACES_ENDPOINT
|
|
31
|
+
* > OTEL_EXPORTER_OTLP_ENDPOINT + "/v1/traces". Returns undefined if none set.
|
|
32
|
+
*/
|
|
33
|
+
export function resolveOtlpEndpoint(config) {
|
|
34
|
+
const env = config?.env ?? (typeof process !== "undefined" ? process.env : undefined);
|
|
35
|
+
if (config?.endpoint)
|
|
36
|
+
return config.endpoint;
|
|
37
|
+
const traces = env?.OTEL_EXPORTER_OTLP_TRACES_ENDPOINT;
|
|
38
|
+
if (traces)
|
|
39
|
+
return traces;
|
|
40
|
+
const base = env?.OTEL_EXPORTER_OTLP_ENDPOINT;
|
|
41
|
+
if (base) {
|
|
42
|
+
return base.endsWith("/v1/traces") ? base : `${base.replace(/\/+$/, "")}/v1/traces`;
|
|
43
|
+
}
|
|
44
|
+
return undefined;
|
|
45
|
+
}
|
|
46
|
+
/** Parse OTEL_EXPORTER_OTLP_HEADERS format `k1=v1,k2=v2`. */
|
|
47
|
+
export function parseOtlpHeaders(raw) {
|
|
48
|
+
if (!raw)
|
|
49
|
+
return {};
|
|
50
|
+
const out = {};
|
|
51
|
+
for (const pair of raw.split(",")) {
|
|
52
|
+
const eq = pair.indexOf("=");
|
|
53
|
+
if (eq <= 0)
|
|
54
|
+
continue;
|
|
55
|
+
const key = pair.slice(0, eq).trim();
|
|
56
|
+
const value = pair.slice(eq + 1).trim();
|
|
57
|
+
if (key)
|
|
58
|
+
out[key] = value;
|
|
59
|
+
}
|
|
60
|
+
return out;
|
|
61
|
+
}
|
|
62
|
+
/** Deterministic FNV-1a → hex string of `length` chars (span/trace id wire form). */
|
|
63
|
+
export function toOtlpId(id, length) {
|
|
64
|
+
let hex = "";
|
|
65
|
+
let seed = 0x811c9dc5;
|
|
66
|
+
let round = 0;
|
|
67
|
+
while (hex.length < length) {
|
|
68
|
+
let h = seed;
|
|
69
|
+
const input = `${id}#${round++}`;
|
|
70
|
+
for (let i = 0; i < input.length; i++) {
|
|
71
|
+
h ^= input.charCodeAt(i);
|
|
72
|
+
h = Math.imul(h, 0x01000193) >>> 0;
|
|
73
|
+
}
|
|
74
|
+
hex += (h >>> 0).toString(16).padStart(8, "0");
|
|
75
|
+
seed = (h ^ 0x9e3779b9) >>> 0;
|
|
76
|
+
}
|
|
77
|
+
return hex.slice(0, length);
|
|
78
|
+
}
|
|
79
|
+
/** Convert ms epoch → OTLP timeUnixNano string. */
|
|
80
|
+
export function msToUnixNano(ms) {
|
|
81
|
+
return `${BigInt(Math.max(0, Math.trunc(ms))) * 1000000n}`;
|
|
82
|
+
}
|
|
83
|
+
/** Map a JS value to OTLP AnyValue. */
|
|
84
|
+
export function toOtlpAnyValue(value) {
|
|
85
|
+
if (value === null || value === undefined)
|
|
86
|
+
return { stringValue: "" };
|
|
87
|
+
if (typeof value === "string")
|
|
88
|
+
return { stringValue: value };
|
|
89
|
+
if (typeof value === "boolean")
|
|
90
|
+
return { boolValue: value };
|
|
91
|
+
if (typeof value === "number") {
|
|
92
|
+
return Number.isInteger(value) && Number.isSafeInteger(value)
|
|
93
|
+
? { intValue: String(value) }
|
|
94
|
+
: { doubleValue: value };
|
|
95
|
+
}
|
|
96
|
+
if (typeof value === "bigint")
|
|
97
|
+
return { intValue: value.toString() };
|
|
98
|
+
if (Array.isArray(value)) {
|
|
99
|
+
return { arrayValue: { values: value.map(toOtlpAnyValue) } };
|
|
100
|
+
}
|
|
101
|
+
if (typeof value === "object") {
|
|
102
|
+
const values = Object.entries(value).map(([key, v]) => ({ key, value: toOtlpAnyValue(v) }));
|
|
103
|
+
return { kvlistValue: { values } };
|
|
104
|
+
}
|
|
105
|
+
return { stringValue: String(value) };
|
|
106
|
+
}
|
|
107
|
+
/** Convert attributes record → OTLP key-value list. */
|
|
108
|
+
export function toOtlpAttributes(attributes) {
|
|
109
|
+
return Object.entries(attributes).map(([key, value]) => ({
|
|
110
|
+
key,
|
|
111
|
+
value: toOtlpAnyValue(value),
|
|
112
|
+
}));
|
|
113
|
+
}
|
|
114
|
+
function mapStatus(status) {
|
|
115
|
+
if (status === "ok")
|
|
116
|
+
return { code: OTLP_STATUS_OK };
|
|
117
|
+
if (status === "" || status === "unset")
|
|
118
|
+
return { code: OTLP_STATUS_UNSET };
|
|
119
|
+
// error | cancelled | timeout | custom → ERROR with message
|
|
120
|
+
const result = { code: OTLP_STATUS_ERROR };
|
|
121
|
+
if (status !== "error")
|
|
122
|
+
result.message = status;
|
|
123
|
+
return result;
|
|
124
|
+
}
|
|
125
|
+
/** Map a custom Span → OTLP JSON span. Exported for unit tests / custom pipelines. */
|
|
126
|
+
export function mapSpanToOtlp(span) {
|
|
127
|
+
const endMs = span.endTimeMs > 0 ? span.endTimeMs : span.startTimeMs;
|
|
128
|
+
const out = {
|
|
129
|
+
traceId: toOtlpId(span.traceId ?? span.id, 32),
|
|
130
|
+
spanId: toOtlpId(span.id, 16),
|
|
131
|
+
name: span.name,
|
|
132
|
+
kind: OTLP_SPAN_KIND[span.kind] ?? OTLP_SPAN_KIND.internal,
|
|
133
|
+
startTimeUnixNano: msToUnixNano(span.startTimeMs),
|
|
134
|
+
endTimeUnixNano: msToUnixNano(endMs),
|
|
135
|
+
attributes: toOtlpAttributes(span.attributes),
|
|
136
|
+
events: span.events.map((event) => ({
|
|
137
|
+
timeUnixNano: msToUnixNano(event.timestampMs),
|
|
138
|
+
name: event.name,
|
|
139
|
+
attributes: toOtlpAttributes(event.attributes),
|
|
140
|
+
})),
|
|
141
|
+
status: mapStatus(span.status),
|
|
142
|
+
};
|
|
143
|
+
if (span.parentId) {
|
|
144
|
+
out.parentSpanId = toOtlpId(span.parentId, 16);
|
|
145
|
+
}
|
|
146
|
+
return out;
|
|
147
|
+
}
|
|
148
|
+
/** Build full ExportTraceServiceRequest body. */
|
|
149
|
+
export function buildOtlpExportRequest(spans, config) {
|
|
150
|
+
const resourceAttrs = {
|
|
151
|
+
...(config?.resourceAttributes ?? {}),
|
|
152
|
+
};
|
|
153
|
+
if (resourceAttrs["service.name"] === undefined) {
|
|
154
|
+
resourceAttrs["service.name"] = "vinhnt-sdk";
|
|
155
|
+
}
|
|
156
|
+
const scope = {
|
|
157
|
+
name: config?.scopeName ?? DEFAULT_SCOPE_NAME,
|
|
158
|
+
};
|
|
159
|
+
if (config?.scopeVersion !== undefined) {
|
|
160
|
+
scope.version = config.scopeVersion;
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
resourceSpans: [
|
|
164
|
+
{
|
|
165
|
+
resource: { attributes: toOtlpAttributes(resourceAttrs) },
|
|
166
|
+
scopeSpans: [
|
|
167
|
+
{
|
|
168
|
+
scope,
|
|
169
|
+
spans: spans.map(mapSpanToOtlp),
|
|
170
|
+
},
|
|
171
|
+
],
|
|
172
|
+
},
|
|
173
|
+
],
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Create an OTLP/HTTP span exporter (JSON encoding).
|
|
178
|
+
*
|
|
179
|
+
* @throws ConfigurationError if no endpoint in config or env.
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```typescript
|
|
183
|
+
* const exporter = createOtlpSpanExporter({
|
|
184
|
+
* endpoint: "http://localhost:4318/v1/traces",
|
|
185
|
+
* });
|
|
186
|
+
* await exporter.export(recorder.getSpans());
|
|
187
|
+
* await exporter.shutdown();
|
|
188
|
+
* ```
|
|
189
|
+
*/
|
|
190
|
+
export function createOtlpSpanExporter(config = {}) {
|
|
191
|
+
const endpoint = resolveOtlpEndpoint(config);
|
|
192
|
+
if (!endpoint) {
|
|
193
|
+
throw new ConfigurationError("OTLP endpoint not configured: set config.endpoint, OTEL_EXPORTER_OTLP_TRACES_ENDPOINT, or OTEL_EXPORTER_OTLP_ENDPOINT");
|
|
194
|
+
}
|
|
195
|
+
const env = config.env ?? (typeof process !== "undefined" ? process.env : undefined);
|
|
196
|
+
const headers = {
|
|
197
|
+
"content-type": "application/json",
|
|
198
|
+
...parseOtlpHeaders(env?.OTEL_EXPORTER_OTLP_HEADERS),
|
|
199
|
+
...(config.headers ?? {}),
|
|
200
|
+
};
|
|
201
|
+
const timeoutMs = config.timeoutMs ?? DEFAULT_TIMEOUT_MS;
|
|
202
|
+
const fetchImpl = config.fetch ??
|
|
203
|
+
((input, init) => {
|
|
204
|
+
if (typeof globalThis.fetch !== "function") {
|
|
205
|
+
throw new NetworkError("globalThis.fetch is not available; pass config.fetch");
|
|
206
|
+
}
|
|
207
|
+
return globalThis.fetch(input, init);
|
|
208
|
+
});
|
|
209
|
+
let closed = false;
|
|
210
|
+
return {
|
|
211
|
+
async export(spans) {
|
|
212
|
+
if (closed)
|
|
213
|
+
return;
|
|
214
|
+
if (spans.length === 0)
|
|
215
|
+
return;
|
|
216
|
+
const body = JSON.stringify(buildOtlpExportRequest(spans, config));
|
|
217
|
+
let response;
|
|
218
|
+
try {
|
|
219
|
+
response = await fetchImpl(endpoint, {
|
|
220
|
+
method: "POST",
|
|
221
|
+
headers,
|
|
222
|
+
body,
|
|
223
|
+
signal: AbortSignal.timeout(timeoutMs),
|
|
224
|
+
});
|
|
225
|
+
}
|
|
226
|
+
catch (cause) {
|
|
227
|
+
throw new NetworkError(`OTLP export failed: ${String(cause)}`, { cause });
|
|
228
|
+
}
|
|
229
|
+
if (!response.ok) {
|
|
230
|
+
throw new NetworkError(`OTLP export failed: HTTP ${response.status} ${response.statusText}`);
|
|
231
|
+
}
|
|
232
|
+
},
|
|
233
|
+
async shutdown() {
|
|
234
|
+
closed = true;
|
|
235
|
+
},
|
|
236
|
+
};
|
|
237
|
+
}
|
|
238
|
+
//# sourceMappingURL=otlp-exporter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"otlp-exporter.js","sourceRoot":"","sources":["../src/otlp-exporter.ts"],"names":[],"mappings":"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"}
|
package/dist/telemetry.d.ts
CHANGED
|
@@ -75,4 +75,31 @@ export interface ContextPressure {
|
|
|
75
75
|
* Calculate context pressure.
|
|
76
76
|
*/
|
|
77
77
|
export declare function calculateContextPressure(currentTokens: number, maxTokens: number, compactThreshold?: number): ContextPressure;
|
|
78
|
+
/**
|
|
79
|
+
* Telemetry provider interface — export telemetry data to external systems.
|
|
80
|
+
*
|
|
81
|
+
* Inspired by Vercel AI SDK's telemetry pattern.
|
|
82
|
+
*/
|
|
83
|
+
export interface TelemetryProvider {
|
|
84
|
+
exportTrace(trace: {
|
|
85
|
+
traceId: string;
|
|
86
|
+
spans: Array<{
|
|
87
|
+
spanId: string;
|
|
88
|
+
name: string;
|
|
89
|
+
startTime: number;
|
|
90
|
+
endTime?: number;
|
|
91
|
+
attributes?: Record<string, unknown>;
|
|
92
|
+
}>;
|
|
93
|
+
}): Promise<void> | void;
|
|
94
|
+
exportMetric(metric: {
|
|
95
|
+
name: string;
|
|
96
|
+
value: number;
|
|
97
|
+
unit: string;
|
|
98
|
+
attributes?: Record<string, unknown>;
|
|
99
|
+
}): Promise<void> | void;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Default telemetry provider — logs to console.
|
|
103
|
+
*/
|
|
104
|
+
export declare const ConsoleTelemetryProvider: TelemetryProvider;
|
|
78
105
|
//# sourceMappingURL=telemetry.d.ts.map
|
package/dist/telemetry.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACzB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wCAAwC;AACxC,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAO9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,8BAAwB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,YAA8B,GACtC,MAAM,CAIR;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;gBAEhD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAIvD,iCAAiC;IACjC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU;IAe/E,sBAAsB;IACtB,QAAQ,IAAI,UAAU;IAUtB,0BAA0B;IAC1B,iBAAiB,IAAI,MAAM;IAI3B,8BAA8B;IAC9B,aAAa,IAAI,SAAS,UAAU,EAAE;IAItC,sBAAsB;IACtB,KAAK,IAAI,IAAI;CAKd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,gBAAgB,SAAM,GACrB,eAAe,CAQjB"}
|
|
1
|
+
{"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,8CAA8C;AAC9C,MAAM,WAAW,UAAU;IACzB,4BAA4B;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,YAAY,EAAE,MAAM,CAAC;IACrB,oCAAoC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,4BAA4B;IAC5B,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,wCAAwC;AACxC,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,UAAU,EAAE,MAAM,CAAC;IACnB,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;CACrB;AAQD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAO9D,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,aAAa,8BAAwB,CAAC;AAEnD;;GAEG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,OAAO,GAAE,YAA8B,GACtC,MAAM,CAIR;AAED;;;;;GAKG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,UAAU,CAAK;IACvB,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAoB;IAC/C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA+B;gBAEhD,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAIvD,iCAAiC;IACjC,MAAM,CAAC,WAAW,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU;IAe/E,sBAAsB;IACtB,QAAQ,IAAI,UAAU;IAUtB,0BAA0B;IAC1B,iBAAiB,IAAI,MAAM;IAI3B,8BAA8B;IAC9B,aAAa,IAAI,SAAS,UAAU,EAAE;IAItC,sBAAsB;IACtB,KAAK,IAAI,IAAI;CAKd;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,6BAA6B;IAC7B,aAAa,EAAE,MAAM,CAAC;IACtB,6BAA6B;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,+CAA+C;IAC/C,QAAQ,EAAE,MAAM,CAAC;IACjB,wCAAwC;IACxC,aAAa,EAAE,OAAO,CAAC;IACvB,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC7C;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,MAAM,EACjB,gBAAgB,SAAM,GACrB,eAAe,CAQjB;AAED;;;;GAIG;AACH,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,KAAK,EAAE;QACjB,OAAO,EAAE,MAAM,CAAC;QAChB,KAAK,EAAE,KAAK,CAAC;YACX,MAAM,EAAE,MAAM,CAAC;YACf,IAAI,EAAE,MAAM,CAAC;YACb,SAAS,EAAE,MAAM,CAAC;YAClB,OAAO,CAAC,EAAE,MAAM,CAAC;YACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;SACtC,CAAC,CAAC;KACJ,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;IACzB,YAAY,CAAC,MAAM,EAAE;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACtC,GAAG,OAAO,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC;CAC1B;AAED;;GAEG;AACH,eAAO,MAAM,wBAAwB,EAAE,iBAWtC,CAAC"}
|
package/dist/telemetry.js
CHANGED
|
@@ -98,4 +98,19 @@ export function calculateContextPressure(currentTokens, maxTokens, compactThresh
|
|
|
98
98
|
shouldCompact: pressure >= compactThreshold,
|
|
99
99
|
};
|
|
100
100
|
}
|
|
101
|
+
/**
|
|
102
|
+
* Default telemetry provider — logs to console.
|
|
103
|
+
*/
|
|
104
|
+
export const ConsoleTelemetryProvider = {
|
|
105
|
+
exportTrace(trace) {
|
|
106
|
+
if (typeof console !== "undefined") {
|
|
107
|
+
console.log("[trace]", trace);
|
|
108
|
+
}
|
|
109
|
+
},
|
|
110
|
+
exportMetric(metric) {
|
|
111
|
+
if (typeof console !== "undefined") {
|
|
112
|
+
console.log("[metric]", metric);
|
|
113
|
+
}
|
|
114
|
+
},
|
|
115
|
+
};
|
|
101
116
|
//# sourceMappingURL=telemetry.js.map
|
package/dist/telemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@vinhnt-sdk/trace",
|
|
3
|
-
"version": "0.4.
|
|
4
|
-
"description": "Observability
|
|
3
|
+
"version": "0.4.3",
|
|
4
|
+
"description": "Observability - OpenTelemetry spans, timeline replay, telemetry aggregation",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"main": "./dist/index.js",
|
|
@@ -42,17 +42,18 @@
|
|
|
42
42
|
"publishConfig": {
|
|
43
43
|
"access": "public"
|
|
44
44
|
},
|
|
45
|
-
"dependencies": {
|
|
46
|
-
"@vinhnt-sdk/schema": "0.4.1"
|
|
47
|
-
},
|
|
48
|
-
"devDependencies": {
|
|
49
|
-
"vitest": "^3.2.7"
|
|
50
|
-
},
|
|
51
45
|
"scripts": {
|
|
52
46
|
"build": "tsc -b",
|
|
53
47
|
"typecheck": "tsc --noEmit",
|
|
54
48
|
"clean": "node -e \"try{require('fs').rmSync('dist',{recursive:true,force:true})}catch(e){}\" && node -e \"try{require('fs').rmSync('tsconfig.tsbuildinfo',{force:true})}catch(e){}\"",
|
|
49
|
+
"prepublishOnly": "pnpm build",
|
|
55
50
|
"test": "vitest run",
|
|
56
51
|
"lint": "eslint ."
|
|
52
|
+
},
|
|
53
|
+
"dependencies": {
|
|
54
|
+
"@vinhnt-sdk/schema": "0.5.9"
|
|
55
|
+
},
|
|
56
|
+
"devDependencies": {
|
|
57
|
+
"vitest": "^3.2.7"
|
|
57
58
|
}
|
|
58
|
-
}
|
|
59
|
+
}
|