@prefactor/core 0.1.0

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 (43) hide show
  1. package/dist/config.d.ts +259 -0
  2. package/dist/config.d.ts.map +1 -0
  3. package/dist/config.js +110 -0
  4. package/dist/config.js.map +1 -0
  5. package/dist/index.cjs +642 -0
  6. package/dist/index.cjs.map +17 -0
  7. package/dist/index.d.ts +10 -0
  8. package/dist/index.d.ts.map +1 -0
  9. package/dist/index.js +610 -0
  10. package/dist/index.js.map +17 -0
  11. package/dist/tracing/context.d.ts +53 -0
  12. package/dist/tracing/context.d.ts.map +1 -0
  13. package/dist/tracing/context.js +66 -0
  14. package/dist/tracing/context.js.map +1 -0
  15. package/dist/tracing/span.d.ts +68 -0
  16. package/dist/tracing/span.d.ts.map +1 -0
  17. package/dist/tracing/span.js +21 -0
  18. package/dist/tracing/span.js.map +1 -0
  19. package/dist/tracing/tracer.d.ts +100 -0
  20. package/dist/tracing/tracer.d.ts.map +1 -0
  21. package/dist/tracing/tracer.js +151 -0
  22. package/dist/tracing/tracer.js.map +1 -0
  23. package/dist/transport/base.d.ts +38 -0
  24. package/dist/transport/base.d.ts.map +1 -0
  25. package/dist/transport/base.js +2 -0
  26. package/dist/transport/base.js.map +1 -0
  27. package/dist/transport/http.d.ts +90 -0
  28. package/dist/transport/http.d.ts.map +1 -0
  29. package/dist/transport/http.js +399 -0
  30. package/dist/transport/http.js.map +1 -0
  31. package/dist/transport/stdio.d.ts +48 -0
  32. package/dist/transport/stdio.d.ts.map +1 -0
  33. package/dist/transport/stdio.js +71 -0
  34. package/dist/transport/stdio.js.map +1 -0
  35. package/dist/utils/logging.d.ts +29 -0
  36. package/dist/utils/logging.d.ts.map +1 -0
  37. package/dist/utils/logging.js +71 -0
  38. package/dist/utils/logging.js.map +1 -0
  39. package/dist/utils/serialization.d.ts +24 -0
  40. package/dist/utils/serialization.d.ts.map +1 -0
  41. package/dist/utils/serialization.js +60 -0
  42. package/dist/utils/serialization.js.map +1 -0
  43. package/package.json +36 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/transport/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C;;;;;;GAMG;AACH,MAAM,WAAW,SAAS;IACxB;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC;IAEvB;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAElD;;OAEG;IACH,kBAAkB,IAAI,IAAI,CAAC;IAE3B;;OAEG;IACH,mBAAmB,IAAI,IAAI,CAAC;IAE5B;;;;OAIG;IACH,KAAK,IAAI,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/B"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/transport/base.ts"],"names":[],"mappings":""}
@@ -0,0 +1,90 @@
1
+ import type { HttpTransportConfig } from '../config.js';
2
+ import type { Span } from '../tracing/span.js';
3
+ import type { Transport } from './base.js';
4
+ /**
5
+ * HTTP transport sends spans to a remote API endpoint.
6
+ *
7
+ * Features:
8
+ * - Queue-based async processing
9
+ * - Exponential backoff retry logic
10
+ * - Span ID mapping (SDK ID → backend ID)
11
+ * - Agent instance lifecycle management
12
+ * - Graceful shutdown with timeout
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const transport = new HttpTransport({
17
+ * apiUrl: 'https://api.prefactor.ai',
18
+ * apiToken: process.env.PREFACTOR_API_TOKEN!,
19
+ * });
20
+ * ```
21
+ */
22
+ export declare class HttpTransport implements Transport {
23
+ private config;
24
+ private queue;
25
+ private processing;
26
+ private closed;
27
+ private agentInstanceId;
28
+ private spanIdMap;
29
+ constructor(config: HttpTransportConfig);
30
+ /**
31
+ * Emit a span (adds to queue for async processing)
32
+ *
33
+ * @param span - The span to emit
34
+ */
35
+ emit(span: Span): void;
36
+ /**
37
+ * Finish a previously emitted span (for AGENT spans)
38
+ *
39
+ * @param spanId - ID of the span to finish
40
+ * @param endTime - End time in milliseconds since Unix epoch
41
+ */
42
+ finishSpan(spanId: string, endTime: number): void;
43
+ /**
44
+ * Signal the start of an agent instance execution
45
+ */
46
+ startAgentInstance(): void;
47
+ /**
48
+ * Signal the completion of an agent instance execution
49
+ */
50
+ finishAgentInstance(): void;
51
+ /**
52
+ * Start background queue processing
53
+ */
54
+ private startProcessing;
55
+ /**
56
+ * Send a span to the API
57
+ */
58
+ private sendSpan;
59
+ /**
60
+ * Transform span to backend API format with nested details/payload structure
61
+ */
62
+ private transformSpanToApiFormat;
63
+ /**
64
+ * Get default schema (v1.0.0) with span schemas for all supported types
65
+ */
66
+ private getDefaultSchema;
67
+ /**
68
+ * Ensure an agent instance is registered
69
+ */
70
+ private ensureAgentRegistered;
71
+ /**
72
+ * Start agent instance execution
73
+ */
74
+ private startAgentInstanceHttp;
75
+ /**
76
+ * Finish agent instance execution
77
+ */
78
+ private finishAgentInstanceHttp;
79
+ /**
80
+ * Finish a span via HTTP
81
+ */
82
+ private finishSpanHttp;
83
+ /**
84
+ * Close the transport and wait for queue to drain
85
+ *
86
+ * @returns Promise that resolves when transport is closed
87
+ */
88
+ close(): Promise<void>;
89
+ }
90
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACxD,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAY3C;;;;;;;;;;;;;;;;;GAiBG;AACH,qBAAa,aAAc,YAAW,SAAS;IAOjC,OAAO,CAAC,MAAM;IAN1B,OAAO,CAAC,KAAK,CAAmB;IAChC,OAAO,CAAC,UAAU,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,SAAS,CAA6B;gBAE1B,MAAM,EAAE,mBAAmB;IAI/C;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAOtB;;;;;OAKG;IACH,UAAU,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI;IAQjD;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAO1B;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAO3B;;OAEG;YACW,eAAe;IAwC7B;;OAEG;YACW,QAAQ;IAmDtB;;OAEG;IACH,OAAO,CAAC,wBAAwB;IAmDhC;;OAEG;IACH,OAAO,CAAC,gBAAgB;IA4BxB;;OAEG;YACW,qBAAqB;IA6DnC;;OAEG;YACW,sBAAsB;IA6BpC;;OAEG;YACW,uBAAuB;IA2BrC;;OAEG;YACW,cAAc;IA4B5B;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAc7B"}
@@ -0,0 +1,399 @@
1
+ import { getLogger } from '../utils/logging.js';
2
+ const logger = getLogger('http-transport');
3
+ /**
4
+ * HTTP transport sends spans to a remote API endpoint.
5
+ *
6
+ * Features:
7
+ * - Queue-based async processing
8
+ * - Exponential backoff retry logic
9
+ * - Span ID mapping (SDK ID → backend ID)
10
+ * - Agent instance lifecycle management
11
+ * - Graceful shutdown with timeout
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const transport = new HttpTransport({
16
+ * apiUrl: 'https://api.prefactor.ai',
17
+ * apiToken: process.env.PREFACTOR_API_TOKEN!,
18
+ * });
19
+ * ```
20
+ */
21
+ export class HttpTransport {
22
+ config;
23
+ queue = [];
24
+ processing = false;
25
+ closed = false;
26
+ agentInstanceId = null;
27
+ spanIdMap = new Map();
28
+ constructor(config) {
29
+ this.config = config;
30
+ this.startProcessing();
31
+ }
32
+ /**
33
+ * Emit a span (adds to queue for async processing)
34
+ *
35
+ * @param span - The span to emit
36
+ */
37
+ emit(span) {
38
+ if (this.closed) {
39
+ return;
40
+ }
41
+ this.queue.push({ type: 'span', data: span });
42
+ }
43
+ /**
44
+ * Finish a previously emitted span (for AGENT spans)
45
+ *
46
+ * @param spanId - ID of the span to finish
47
+ * @param endTime - End time in milliseconds since Unix epoch
48
+ */
49
+ finishSpan(spanId, endTime) {
50
+ if (this.closed) {
51
+ return;
52
+ }
53
+ const timestamp = new Date(endTime).toISOString();
54
+ this.queue.push({ type: 'finish_span', data: { spanId, timestamp } });
55
+ }
56
+ /**
57
+ * Signal the start of an agent instance execution
58
+ */
59
+ startAgentInstance() {
60
+ if (this.closed) {
61
+ return;
62
+ }
63
+ this.queue.push({ type: 'start_agent', data: null });
64
+ }
65
+ /**
66
+ * Signal the completion of an agent instance execution
67
+ */
68
+ finishAgentInstance() {
69
+ if (this.closed) {
70
+ return;
71
+ }
72
+ this.queue.push({ type: 'finish_agent', data: null });
73
+ }
74
+ /**
75
+ * Start background queue processing
76
+ */
77
+ async startProcessing() {
78
+ this.processing = true;
79
+ while (!this.closed || this.queue.length > 0) {
80
+ if (this.queue.length === 0) {
81
+ await new Promise((resolve) => setTimeout(resolve, 100));
82
+ continue;
83
+ }
84
+ const item = this.queue.shift();
85
+ if (!item)
86
+ continue;
87
+ try {
88
+ // Ensure agent is registered before processing spans
89
+ if (!this.agentInstanceId && item.type !== 'start_agent') {
90
+ await this.ensureAgentRegistered();
91
+ }
92
+ switch (item.type) {
93
+ case 'span':
94
+ await this.sendSpan(item.data);
95
+ break;
96
+ case 'finish_span':
97
+ await this.finishSpanHttp(item.data);
98
+ break;
99
+ case 'start_agent':
100
+ await this.startAgentInstanceHttp();
101
+ break;
102
+ case 'finish_agent':
103
+ await this.finishAgentInstanceHttp();
104
+ break;
105
+ }
106
+ }
107
+ catch (error) {
108
+ logger.error('Error processing queue item:', error);
109
+ }
110
+ }
111
+ this.processing = false;
112
+ }
113
+ /**
114
+ * Send a span to the API
115
+ */
116
+ async sendSpan(span, retry = 0) {
117
+ const url = `${this.config.apiUrl}/api/v1/agent_spans`;
118
+ const payload = this.transformSpanToApiFormat(span);
119
+ try {
120
+ const response = await fetch(url, {
121
+ method: 'POST',
122
+ headers: {
123
+ Authorization: `Bearer ${this.config.apiToken}`,
124
+ 'Content-Type': 'application/json',
125
+ },
126
+ body: JSON.stringify(payload),
127
+ signal: AbortSignal.timeout(this.config.requestTimeout),
128
+ });
129
+ if (response.ok) {
130
+ const data = (await response.json());
131
+ const backendSpanId = data?.details?.id;
132
+ if (backendSpanId) {
133
+ this.spanIdMap.set(span.spanId, backendSpanId);
134
+ }
135
+ return;
136
+ }
137
+ // Retry on server errors or rate limiting
138
+ if ((response.status >= 500 || response.status === 429) && retry < this.config.maxRetries) {
139
+ const delay = Math.min(this.config.initialRetryDelay * this.config.retryMultiplier ** retry, this.config.maxRetryDelay);
140
+ logger.debug(`Retrying span send after ${delay}ms (attempt ${retry + 1})`);
141
+ await new Promise((resolve) => setTimeout(resolve, delay));
142
+ return this.sendSpan(span, retry + 1);
143
+ }
144
+ logger.error(`Failed to send span: ${response.status} ${response.statusText}`);
145
+ }
146
+ catch (error) {
147
+ logger.error('Error sending span:', error);
148
+ // Retry on network errors
149
+ if (retry < this.config.maxRetries) {
150
+ const delay = Math.min(this.config.initialRetryDelay * this.config.retryMultiplier ** retry, this.config.maxRetryDelay);
151
+ await new Promise((resolve) => setTimeout(resolve, delay));
152
+ return this.sendSpan(span, retry + 1);
153
+ }
154
+ }
155
+ }
156
+ /**
157
+ * Transform span to backend API format with nested details/payload structure
158
+ */
159
+ transformSpanToApiFormat(span) {
160
+ const startedAt = new Date(span.startTime).toISOString();
161
+ const finishedAt = span.endTime ? new Date(span.endTime).toISOString() : null;
162
+ // Build payload with span data
163
+ const payload = {
164
+ span_id: span.spanId,
165
+ trace_id: span.traceId,
166
+ name: span.name,
167
+ status: span.status,
168
+ inputs: span.inputs,
169
+ outputs: span.outputs,
170
+ metadata: span.metadata,
171
+ tags: span.tags,
172
+ token_usage: null,
173
+ error: null,
174
+ };
175
+ // Add optional token_usage
176
+ if (span.tokenUsage) {
177
+ payload.token_usage = {
178
+ prompt_tokens: span.tokenUsage.promptTokens,
179
+ completion_tokens: span.tokenUsage.completionTokens,
180
+ total_tokens: span.tokenUsage.totalTokens,
181
+ };
182
+ }
183
+ // Add optional error
184
+ if (span.error) {
185
+ payload.error = {
186
+ error_type: span.error.errorType,
187
+ message: span.error.message,
188
+ stacktrace: span.error.stacktrace,
189
+ };
190
+ }
191
+ // Resolve parent span ID to backend ID
192
+ const parentSpanId = span.parentSpanId ? (this.spanIdMap.get(span.parentSpanId) ?? null) : null;
193
+ return {
194
+ details: {
195
+ agent_instance_id: this.agentInstanceId,
196
+ schema_name: span.spanType,
197
+ payload,
198
+ parent_span_id: parentSpanId,
199
+ started_at: startedAt,
200
+ finished_at: finishedAt,
201
+ },
202
+ };
203
+ }
204
+ /**
205
+ * Get default schema (v1.0.0) with span schemas for all supported types
206
+ */
207
+ getDefaultSchema() {
208
+ return {
209
+ external_identifier: '1.0.0',
210
+ span_schemas: {
211
+ agent: {
212
+ type: 'object',
213
+ properties: { type: { type: 'string', const: 'agent' } },
214
+ },
215
+ llm: {
216
+ type: 'object',
217
+ properties: { type: { type: 'string', const: 'llm' } },
218
+ },
219
+ tool: {
220
+ type: 'object',
221
+ properties: { type: { type: 'string', const: 'tool' } },
222
+ },
223
+ chain: {
224
+ type: 'object',
225
+ properties: { type: { type: 'string', const: 'chain' } },
226
+ },
227
+ retriever: {
228
+ type: 'object',
229
+ properties: { type: { type: 'string', const: 'retriever' } },
230
+ },
231
+ },
232
+ };
233
+ }
234
+ /**
235
+ * Ensure an agent instance is registered
236
+ */
237
+ async ensureAgentRegistered() {
238
+ if (this.agentInstanceId) {
239
+ return;
240
+ }
241
+ const url = `${this.config.apiUrl}/api/v1/agent_instance/register`;
242
+ const payload = {};
243
+ if (this.config.agentId)
244
+ payload.agent_id = this.config.agentId;
245
+ if (this.config.agentVersion) {
246
+ payload.agent_version = {
247
+ external_identifier: this.config.agentVersion,
248
+ name: this.config.agentName || 'Agent',
249
+ description: this.config.agentDescription || '',
250
+ };
251
+ }
252
+ // Schema handling - four modes:
253
+ // 1. skipSchema=true: No schema in payload (pre-registered on backend)
254
+ // 2. agentSchema provided: Use full custom schema object
255
+ // 3. agentSchemaVersion provided: Use version identifier only
256
+ // 4. None of above: Use default v1.0.0 schema
257
+ if (this.config.skipSchema) {
258
+ logger.debug('Skipping schema in registration (skipSchema=true)');
259
+ // Do not add agent_schema_version key
260
+ }
261
+ else if (this.config.agentSchema) {
262
+ logger.debug('Using custom agent schema');
263
+ payload.agent_schema_version = this.config.agentSchema;
264
+ }
265
+ else if (this.config.agentSchemaVersion) {
266
+ logger.debug(`Using schema version: ${this.config.agentSchemaVersion}`);
267
+ payload.agent_schema_version = {
268
+ external_identifier: this.config.agentSchemaVersion,
269
+ };
270
+ }
271
+ else {
272
+ logger.debug('Using default hardcoded schema (v1.0.0)');
273
+ payload.agent_schema_version = this.getDefaultSchema();
274
+ }
275
+ try {
276
+ const response = await fetch(url, {
277
+ method: 'POST',
278
+ headers: {
279
+ Authorization: `Bearer ${this.config.apiToken}`,
280
+ 'Content-Type': 'application/json',
281
+ },
282
+ body: JSON.stringify(payload),
283
+ signal: AbortSignal.timeout(this.config.requestTimeout),
284
+ });
285
+ if (response.ok) {
286
+ const data = (await response.json());
287
+ this.agentInstanceId = data?.details?.id ?? null;
288
+ logger.debug(`Registered agent instance: ${this.agentInstanceId}`);
289
+ }
290
+ else {
291
+ logger.error(`Failed to register agent: ${response.status} ${response.statusText}`);
292
+ }
293
+ }
294
+ catch (error) {
295
+ logger.error('Error registering agent:', error);
296
+ }
297
+ }
298
+ /**
299
+ * Start agent instance execution
300
+ */
301
+ async startAgentInstanceHttp() {
302
+ await this.ensureAgentRegistered();
303
+ if (!this.agentInstanceId) {
304
+ logger.error('Cannot start agent instance: not registered');
305
+ return;
306
+ }
307
+ const url = `${this.config.apiUrl}/api/v1/agent_instance/${this.agentInstanceId}/start`;
308
+ try {
309
+ const response = await fetch(url, {
310
+ method: 'POST',
311
+ headers: {
312
+ Authorization: `Bearer ${this.config.apiToken}`,
313
+ 'Content-Type': 'application/json',
314
+ },
315
+ body: JSON.stringify({}),
316
+ signal: AbortSignal.timeout(this.config.requestTimeout),
317
+ });
318
+ if (!response.ok) {
319
+ logger.error(`Failed to start agent instance: ${response.status} ${response.statusText}`);
320
+ }
321
+ }
322
+ catch (error) {
323
+ logger.error('Error starting agent instance:', error);
324
+ }
325
+ }
326
+ /**
327
+ * Finish agent instance execution
328
+ */
329
+ async finishAgentInstanceHttp() {
330
+ if (!this.agentInstanceId) {
331
+ logger.error('Cannot finish agent instance: not registered');
332
+ return;
333
+ }
334
+ const url = `${this.config.apiUrl}/api/v1/agent_instance/${this.agentInstanceId}/finish`;
335
+ try {
336
+ const response = await fetch(url, {
337
+ method: 'POST',
338
+ headers: {
339
+ Authorization: `Bearer ${this.config.apiToken}`,
340
+ 'Content-Type': 'application/json',
341
+ },
342
+ body: JSON.stringify({}),
343
+ signal: AbortSignal.timeout(this.config.requestTimeout),
344
+ });
345
+ if (!response.ok) {
346
+ logger.error(`Failed to finish agent instance: ${response.status} ${response.statusText}`);
347
+ }
348
+ }
349
+ catch (error) {
350
+ logger.error('Error finishing agent instance:', error);
351
+ }
352
+ }
353
+ /**
354
+ * Finish a span via HTTP
355
+ */
356
+ async finishSpanHttp(data) {
357
+ const backendSpanId = this.spanIdMap.get(data.spanId);
358
+ if (!backendSpanId) {
359
+ logger.warn(`Cannot finish span ${data.spanId}: backend ID not found`);
360
+ return;
361
+ }
362
+ const url = `${this.config.apiUrl}/api/v1/agent_spans/${backendSpanId}/finish`;
363
+ try {
364
+ const response = await fetch(url, {
365
+ method: 'POST',
366
+ headers: {
367
+ Authorization: `Bearer ${this.config.apiToken}`,
368
+ 'Content-Type': 'application/json',
369
+ },
370
+ body: JSON.stringify({ timestamp: data.timestamp }),
371
+ signal: AbortSignal.timeout(this.config.requestTimeout),
372
+ });
373
+ if (!response.ok) {
374
+ logger.error(`Failed to finish span: ${response.status} ${response.statusText}`);
375
+ }
376
+ }
377
+ catch (error) {
378
+ logger.error('Error finishing span:', error);
379
+ }
380
+ }
381
+ /**
382
+ * Close the transport and wait for queue to drain
383
+ *
384
+ * @returns Promise that resolves when transport is closed
385
+ */
386
+ async close() {
387
+ this.closed = true;
388
+ // Wait for queue to drain (with timeout)
389
+ const timeout = 10000;
390
+ const start = Date.now();
391
+ while (this.processing && Date.now() - start < timeout) {
392
+ await new Promise((resolve) => setTimeout(resolve, 100));
393
+ }
394
+ if (this.processing) {
395
+ logger.warn('Transport closed with pending queue items');
396
+ }
397
+ }
398
+ }
399
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/transport/http.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import type { Span } from '../tracing/span.js';
2
+ import type { Transport } from './base.js';
3
+ /**
4
+ * STDIO transport emits spans as newline-delimited JSON to stdout.
5
+ *
6
+ * This is the default transport and requires no configuration.
7
+ * It's useful for local development and for piping span data to other tools.
8
+ *
9
+ * Features:
10
+ * - Newline-delimited JSON output
11
+ * - Promise-based write locking for ordering
12
+ * - Graceful error handling
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * const transport = new StdioTransport();
17
+ * const tracer = new Tracer(transport);
18
+ * ```
19
+ */
20
+ export declare class StdioTransport implements Transport {
21
+ private closed;
22
+ private writeLock;
23
+ /**
24
+ * Emit a span to stdout as JSON
25
+ *
26
+ * @param span - The span to emit
27
+ */
28
+ emit(span: Span): void;
29
+ /**
30
+ * No-op for stdio transport (not applicable)
31
+ */
32
+ finishSpan(): void;
33
+ /**
34
+ * No-op for stdio transport (not applicable)
35
+ */
36
+ startAgentInstance(): void;
37
+ /**
38
+ * No-op for stdio transport (not applicable)
39
+ */
40
+ finishAgentInstance(): void;
41
+ /**
42
+ * Close the transport and wait for pending writes to complete
43
+ *
44
+ * @returns Promise that resolves when all writes are complete
45
+ */
46
+ close(): Promise<void>;
47
+ }
48
+ //# sourceMappingURL=stdio.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.d.ts","sourceRoot":"","sources":["../../src/transport/stdio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAE/C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAE3C;;;;;;;;;;;;;;;;GAgBG;AACH,qBAAa,cAAe,YAAW,SAAS;IAC9C,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,SAAS,CAAqB;IAEtC;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,IAAI,GAAG,IAAI;IAiBtB;;OAEG;IACH,UAAU,IAAI,IAAI;IAIlB;;OAEG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;IACH,mBAAmB,IAAI,IAAI;IAI3B;;;;OAIG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAI7B"}
@@ -0,0 +1,71 @@
1
+ import { serializeValue } from '../utils/serialization.js';
2
+ /**
3
+ * STDIO transport emits spans as newline-delimited JSON to stdout.
4
+ *
5
+ * This is the default transport and requires no configuration.
6
+ * It's useful for local development and for piping span data to other tools.
7
+ *
8
+ * Features:
9
+ * - Newline-delimited JSON output
10
+ * - Promise-based write locking for ordering
11
+ * - Graceful error handling
12
+ *
13
+ * @example
14
+ * ```typescript
15
+ * const transport = new StdioTransport();
16
+ * const tracer = new Tracer(transport);
17
+ * ```
18
+ */
19
+ export class StdioTransport {
20
+ closed = false;
21
+ writeLock = Promise.resolve();
22
+ /**
23
+ * Emit a span to stdout as JSON
24
+ *
25
+ * @param span - The span to emit
26
+ */
27
+ emit(span) {
28
+ if (this.closed) {
29
+ return;
30
+ }
31
+ // Queue write to maintain ordering
32
+ this.writeLock = this.writeLock.then(async () => {
33
+ try {
34
+ const serialized = serializeValue(span);
35
+ const json = JSON.stringify(serialized);
36
+ await Bun.write(Bun.stdout, `${json}\n`);
37
+ }
38
+ catch (error) {
39
+ console.error('Failed to emit span to stdout:', error);
40
+ }
41
+ });
42
+ }
43
+ /**
44
+ * No-op for stdio transport (not applicable)
45
+ */
46
+ finishSpan() {
47
+ // No-op for stdio transport
48
+ }
49
+ /**
50
+ * No-op for stdio transport (not applicable)
51
+ */
52
+ startAgentInstance() {
53
+ // No-op for stdio transport
54
+ }
55
+ /**
56
+ * No-op for stdio transport (not applicable)
57
+ */
58
+ finishAgentInstance() {
59
+ // No-op for stdio transport
60
+ }
61
+ /**
62
+ * Close the transport and wait for pending writes to complete
63
+ *
64
+ * @returns Promise that resolves when all writes are complete
65
+ */
66
+ async close() {
67
+ this.closed = true;
68
+ await this.writeLock;
69
+ }
70
+ }
71
+ //# sourceMappingURL=stdio.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stdio.js","sourceRoot":"","sources":["../../src/transport/stdio.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAG3D;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,OAAO,cAAc;IACjB,MAAM,GAAG,KAAK,CAAC;IACf,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC;IAEtC;;;;OAIG;IACH,IAAI,CAAC,IAAU;QACb,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAChB,OAAO;QACT,CAAC;QAED,mCAAmC;QACnC,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE;YAC9C,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC;gBACxC,MAAM,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,CAAC;YAC3C,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACf,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;YACzD,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC;IAED;;OAEG;IACH,UAAU;QACR,4BAA4B;IAC9B,CAAC;IAED;;OAEG;IACH,kBAAkB;QAChB,4BAA4B;IAC9B,CAAC;IAED;;OAEG;IACH,mBAAmB;QACjB,4BAA4B;IAC9B,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,KAAK;QACT,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,MAAM,IAAI,CAAC,SAAS,CAAC;IACvB,CAAC;CACF"}
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Logger class for the Prefactor SDK
3
+ */
4
+ declare class Logger {
5
+ private namespace;
6
+ private static level;
7
+ constructor(namespace: string);
8
+ debug(message: string, ...args: unknown[]): void;
9
+ info(message: string, ...args: unknown[]): void;
10
+ warn(message: string, ...args: unknown[]): void;
11
+ error(message: string, ...args: unknown[]): void;
12
+ /**
13
+ * Set the global log level
14
+ */
15
+ static setLevel(level: 'debug' | 'info' | 'warn' | 'error'): void;
16
+ }
17
+ /**
18
+ * Get a logger instance for a specific namespace
19
+ *
20
+ * @param namespace - The namespace for this logger
21
+ * @returns Logger instance
22
+ */
23
+ export declare function getLogger(namespace: string): Logger;
24
+ /**
25
+ * Configure logging based on environment variables
26
+ */
27
+ export declare function configureLogging(): void;
28
+ export {};
29
+ //# sourceMappingURL=logging.d.ts.map