@laikatest/sdk 0.2.0 → 0.2.2

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 CHANGED
@@ -4,24 +4,15 @@ Unified LaikaTest SDK for tracing and A/B testing. Single initialization for bot
4
4
 
5
5
  ## Why This Package?
6
6
 
7
- **Before** - confusing dual initialization:
8
- ```typescript
9
- import { initLaika } from '@laikatest/auto-otel';
10
- import { LaikaTest } from '@laikatest/js-client';
11
-
12
- initLaika({ apiKey: 'key', serviceName: 'app' }); // Tracing
13
- const client = new LaikaTest('key'); // Same key again?
14
- ```
7
+ The SDK provides a single, unified initialization for both tracing and A/B testing. No need to manage separate packages or duplicate configuration - one init call enables everything you need.
15
8
 
16
- **After** - single unified init:
17
9
  ```typescript
18
10
  import { LaikaTest } from '@laikatest/sdk';
19
11
 
20
12
  const laika = LaikaTest.init({
21
- apiKey: 'key',
22
- serviceName: 'app',
13
+ apiKey: 'your-api-key',
23
14
  });
24
- // Both tracing AND experiments enabled by default
15
+ // Both tracing and experiments enabled automatically
25
16
  ```
26
17
 
27
18
  ## Installation
@@ -35,10 +26,9 @@ npm install @laikatest/sdk
35
26
  ```typescript
36
27
  import { LaikaTest, setSessionId } from '@laikatest/sdk';
37
28
 
38
- // Initialize once - enables both tracing and experiments
29
+ // Initialize with just your API key - everything else is auto-detected
39
30
  const laika = LaikaTest.init({
40
31
  apiKey: process.env.LAIKA_API_KEY,
41
- serviceName: 'my-app',
42
32
  });
43
33
 
44
34
  // Set context for multi-turn conversations
@@ -71,7 +61,9 @@ await laika.shutdown();
71
61
  interface LaikaConfig {
72
62
  // Required
73
63
  apiKey: string; // Your LaikaTest API key
74
- serviceName: string; // Service name for traces
64
+
65
+ // Optional (smart defaults)
66
+ serviceName?: string; // Service name (auto-detected from package.json or directory name)
75
67
 
76
68
  // Feature toggles (both default: true)
77
69
  tracing?: boolean; // Enable OpenTelemetry tracing
@@ -97,6 +89,15 @@ interface LaikaConfig {
97
89
  }
98
90
  ```
99
91
 
92
+ ### Auto-Detection
93
+
94
+ The SDK automatically detects:
95
+ - **Service Name**: From `package.json` name field, or directory name as fallback
96
+ - **Environment**: From `NODE_ENV` environment variable (defaults to 'development')
97
+ - **Version**: From `package.json` version field
98
+
99
+ These are set as default properties and propagated to traces through the context system, making them available for filtering and analytics.
100
+
100
101
  ## Feature Toggles
101
102
 
102
103
  Enable only what you need:
@@ -105,14 +106,12 @@ Enable only what you need:
105
106
  // Tracing only (observability without experiments)
106
107
  const laika = LaikaTest.init({
107
108
  apiKey: 'key',
108
- serviceName: 'app',
109
109
  experiments: false,
110
110
  });
111
111
 
112
112
  // Experiments only (A/B testing without tracing)
113
113
  const laika = LaikaTest.init({
114
114
  apiKey: 'key',
115
- serviceName: 'app',
116
115
  tracing: false,
117
116
  });
118
117
 
@@ -155,6 +154,136 @@ setProperties({
155
154
  });
156
155
  ```
157
156
 
157
+ ## AI-Native Tracing
158
+
159
+ The SDK provides semantic helpers for common AI workflows like RAG pipelines and agent systems. These helpers automatically create properly-named spans with semantic attributes.
160
+
161
+ ### RAG Pipeline Example
162
+
163
+ ```typescript
164
+ import { trace } from '@laikatest/sdk';
165
+
166
+ const answer = await trace.rag('customer-qa', async () => {
167
+ // Step 1: Retrieve documents
168
+ const docs = await trace.retrieval('search', async () => {
169
+ return await vectorDB.search(query);
170
+ });
171
+
172
+ // Step 2: Rerank for relevance
173
+ const reranked = await trace.rerank('scoring', async () => {
174
+ return await reranker.rerank(docs, query);
175
+ });
176
+
177
+ // Step 3: Generate answer
178
+ const answer = await trace.generation('answer', async () => {
179
+ return await llm.generate(reranked, query);
180
+ });
181
+
182
+ return answer;
183
+ });
184
+ ```
185
+
186
+ ### Agent Workflow Example
187
+
188
+ ```typescript
189
+ import { trace } from '@laikatest/sdk';
190
+
191
+ await trace.agent('research-agent', async () => {
192
+ // Plan the next action
193
+ const plan = await trace.step('planning', async () => {
194
+ return await planNextAction(query);
195
+ });
196
+
197
+ // Execute tool
198
+ const results = await trace.tool('web-search', async () => {
199
+ return await searchTool.run(plan.query);
200
+ });
201
+
202
+ // Analyze results
203
+ return await trace.step('analysis', async () => {
204
+ return await analyzeResults(results);
205
+ });
206
+ });
207
+ ```
208
+
209
+ ### Available Helpers
210
+
211
+ **RAG Workflow:**
212
+ ```typescript
213
+ trace.rag(name, fn) // RAG pipeline wrapper
214
+ trace.retrieval(name, fn) // Document retrieval
215
+ trace.rerank(name, fn) // Document reranking
216
+ trace.embedding(name, fn) // Embedding generation
217
+ ```
218
+
219
+ **Agent Workflow:**
220
+ ```typescript
221
+ trace.agent(name, fn) // Agent wrapper
222
+ trace.tool(name, fn) // Tool execution
223
+ trace.step(name, fn) // Generic step
224
+ ```
225
+
226
+ **LLM Operations:**
227
+ ```typescript
228
+ trace.generation(name, fn) // LLM generation
229
+ trace.evaluation(name, fn) // Evaluation
230
+ ```
231
+
232
+ ### Complete Example
233
+
234
+ ```typescript
235
+ import { trace } from '@laikatest/sdk';
236
+
237
+ // RAG Pipeline
238
+ const answer = await trace.rag('support-qa', async () => {
239
+ // Step 1: Retrieve documents
240
+ const docs = await trace.retrieval('knowledge-base', async () => {
241
+ return await vectorDB.query(userQuestion, { topK: 5 });
242
+ });
243
+
244
+ // Step 2: Rerank for relevance
245
+ const reranked = await trace.rerank('relevance', async () => {
246
+ return await reranker.rerank(docs, userQuestion);
247
+ });
248
+
249
+ // Step 3: Generate answer
250
+ const answer = await trace.generation('answer', async () => {
251
+ return await openai.chat.completions.create({
252
+ model: 'gpt-4',
253
+ messages: buildPrompt(reranked, userQuestion)
254
+ });
255
+ });
256
+
257
+ return answer;
258
+ });
259
+
260
+ // Agent Workflow
261
+ await trace.agent('research-agent', async () => {
262
+ const plan = await trace.step('planning', async () => {
263
+ return await planNextAction(query);
264
+ });
265
+
266
+ const results = await trace.tool('web-search', async () => {
267
+ return await searchTool.run(plan.query);
268
+ });
269
+
270
+ return await trace.step('analysis', async () => {
271
+ return await analyzeResults(results);
272
+ });
273
+ });
274
+ ```
275
+
276
+ ### Span Naming
277
+
278
+ All helpers automatically create semantic span names:
279
+ - `trace.rag('customer-qa')` → Span: `rag.customer-qa`
280
+ - `trace.retrieval('search')` → Span: `retrieval.search`
281
+ - `trace.tool('web-search')` → Span: `tool.web-search`
282
+
283
+ Each span also includes:
284
+ - `laikatest.operation.type` - The operation type (rag, agent, tool, etc.)
285
+ - `laikatest.operation.name` - The user-provided name
286
+
158
287
  ## API Reference
159
288
 
160
289
  ### LaikaTest Class
@@ -250,20 +379,7 @@ app.use((req, res, next) => {
250
379
 
251
380
  ## Migration from Separate Packages
252
381
 
253
- ### Before (Two Packages)
254
-
255
- ```typescript
256
- import { initLaika, setSessionId } from '@laikatest/auto-otel';
257
- import { LaikaTest } from '@laikatest/js-client';
258
-
259
- initLaika({ apiKey: 'key', serviceName: 'app' });
260
- const client = new LaikaTest('key');
261
-
262
- setSessionId('conv-123');
263
- const prompt = await client.getExperimentPrompt('exp', { userId: 'u1' });
264
- ```
265
-
266
- ### After (Unified SDK)
382
+ If you're currently using `@laikatest/auto-otel` and `@laikatest/js-client` separately, you can migrate to the unified SDK:
267
383
 
268
384
  ```typescript
269
385
  import { LaikaTest, setSessionId } from '@laikatest/sdk';
package/dist/index.d.ts CHANGED
@@ -1,5 +1,7 @@
1
1
  export { LaikaTest } from './laika';
2
2
  export { LaikaConfig } from './types';
3
- export { setSessionId, getSessionId, clearSessionId, setUserId, getUserId, clearUserId, runWithContext, runWithContextAsync, setProperty, setProperties, getProperties, clearProperties, removeProperty, runWithProperties, runWithPropertiesAsync, shutdown, } from '@laikatest/auto-otel';
3
+ export { setSessionId, getSessionId, clearSessionId, setUserId, getUserId, clearUserId, runWithContext, runWithContextAsync, setProperty, setProperties, getProperties, clearProperties, removeProperty, runWithProperties, runWithPropertiesAsync, shutdown, withSpan, withSpanSync, } from '@laikatest/auto-otel';
4
4
  export { Prompt, LaikaServiceError, NetworkError, ValidationError, AuthenticationError, } from '@laikatest/js-client';
5
5
  export type { PromptContent, ScoreInput, ScoreType, ScoreSource, PushScoreOptions, PushScoreResponse, ClientOptions, GetPromptOptions, } from '@laikatest/js-client';
6
+ export { trace } from './trace';
7
+ export type { TraceCallback, TraceSyncCallback, OperationType } from './trace';
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.AuthenticationError = exports.ValidationError = exports.NetworkError = exports.LaikaServiceError = exports.Prompt = exports.shutdown = exports.runWithPropertiesAsync = exports.runWithProperties = exports.removeProperty = exports.clearProperties = exports.getProperties = exports.setProperties = exports.setProperty = exports.runWithContextAsync = exports.runWithContext = exports.clearUserId = exports.getUserId = exports.setUserId = exports.clearSessionId = exports.getSessionId = exports.setSessionId = exports.LaikaTest = void 0;
3
+ exports.trace = exports.AuthenticationError = exports.ValidationError = exports.NetworkError = exports.LaikaServiceError = exports.Prompt = exports.withSpanSync = exports.withSpan = exports.shutdown = exports.runWithPropertiesAsync = exports.runWithProperties = exports.removeProperty = exports.clearProperties = exports.getProperties = exports.setProperties = exports.setProperty = exports.runWithContextAsync = exports.runWithContext = exports.clearUserId = exports.getUserId = exports.setUserId = exports.clearSessionId = exports.getSessionId = exports.setSessionId = exports.LaikaTest = void 0;
4
4
  // Main class
5
5
  var laika_1 = require("./laika");
6
6
  Object.defineProperty(exports, "LaikaTest", { enumerable: true, get: function () { return laika_1.LaikaTest; } });
@@ -22,6 +22,8 @@ Object.defineProperty(exports, "removeProperty", { enumerable: true, get: functi
22
22
  Object.defineProperty(exports, "runWithProperties", { enumerable: true, get: function () { return auto_otel_1.runWithProperties; } });
23
23
  Object.defineProperty(exports, "runWithPropertiesAsync", { enumerable: true, get: function () { return auto_otel_1.runWithPropertiesAsync; } });
24
24
  Object.defineProperty(exports, "shutdown", { enumerable: true, get: function () { return auto_otel_1.shutdown; } });
25
+ Object.defineProperty(exports, "withSpan", { enumerable: true, get: function () { return auto_otel_1.withSpan; } });
26
+ Object.defineProperty(exports, "withSpanSync", { enumerable: true, get: function () { return auto_otel_1.withSpanSync; } });
25
27
  // Re-export from client for convenience
26
28
  var js_client_1 = require("@laikatest/js-client");
27
29
  Object.defineProperty(exports, "Prompt", { enumerable: true, get: function () { return js_client_1.Prompt; } });
@@ -29,4 +31,7 @@ Object.defineProperty(exports, "LaikaServiceError", { enumerable: true, get: fun
29
31
  Object.defineProperty(exports, "NetworkError", { enumerable: true, get: function () { return js_client_1.NetworkError; } });
30
32
  Object.defineProperty(exports, "ValidationError", { enumerable: true, get: function () { return js_client_1.ValidationError; } });
31
33
  Object.defineProperty(exports, "AuthenticationError", { enumerable: true, get: function () { return js_client_1.AuthenticationError; } });
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsYUFBYTtBQUNiLGlDQUFvQztBQUEzQixrR0FBQSxTQUFTLE9BQUE7QUFHbEIsMkNBQTJDO0FBQzNDLGtEQWlCOEI7QUFoQjVCLHlHQUFBLFlBQVksT0FBQTtBQUNaLHlHQUFBLFlBQVksT0FBQTtBQUNaLDJHQUFBLGNBQWMsT0FBQTtBQUNkLHNHQUFBLFNBQVMsT0FBQTtBQUNULHNHQUFBLFNBQVMsT0FBQTtBQUNULHdHQUFBLFdBQVcsT0FBQTtBQUNYLDJHQUFBLGNBQWMsT0FBQTtBQUNkLGdIQUFBLG1CQUFtQixPQUFBO0FBQ25CLHdHQUFBLFdBQVcsT0FBQTtBQUNYLDBHQUFBLGFBQWEsT0FBQTtBQUNiLDBHQUFBLGFBQWEsT0FBQTtBQUNiLDRHQUFBLGVBQWUsT0FBQTtBQUNmLDJHQUFBLGNBQWMsT0FBQTtBQUNkLDhHQUFBLGlCQUFpQixPQUFBO0FBQ2pCLG1IQUFBLHNCQUFzQixPQUFBO0FBQ3RCLHFHQUFBLFFBQVEsT0FBQTtBQUdWLHdDQUF3QztBQUN4QyxrREFNOEI7QUFMNUIsbUdBQUEsTUFBTSxPQUFBO0FBQ04sOEdBQUEsaUJBQWlCLE9BQUE7QUFDakIseUdBQUEsWUFBWSxPQUFBO0FBQ1osNEdBQUEsZUFBZSxPQUFBO0FBQ2YsZ0hBQUEsbUJBQW1CLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBNYWluIGNsYXNzXG5leHBvcnQgeyBMYWlrYVRlc3QgfSBmcm9tICcuL2xhaWthJztcbmV4cG9ydCB7IExhaWthQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIFJlLWV4cG9ydCBmcm9tIGF1dG8tb3RlbCBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7XG4gIHNldFNlc3Npb25JZCxcbiAgZ2V0U2Vzc2lvbklkLFxuICBjbGVhclNlc3Npb25JZCxcbiAgc2V0VXNlcklkLFxuICBnZXRVc2VySWQsXG4gIGNsZWFyVXNlcklkLFxuICBydW5XaXRoQ29udGV4dCxcbiAgcnVuV2l0aENvbnRleHRBc3luYyxcbiAgc2V0UHJvcGVydHksXG4gIHNldFByb3BlcnRpZXMsXG4gIGdldFByb3BlcnRpZXMsXG4gIGNsZWFyUHJvcGVydGllcyxcbiAgcmVtb3ZlUHJvcGVydHksXG4gIHJ1bldpdGhQcm9wZXJ0aWVzLFxuICBydW5XaXRoUHJvcGVydGllc0FzeW5jLFxuICBzaHV0ZG93bixcbn0gZnJvbSAnQGxhaWthdGVzdC9hdXRvLW90ZWwnO1xuXG4vLyBSZS1leHBvcnQgZnJvbSBjbGllbnQgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQge1xuICBQcm9tcHQsXG4gIExhaWthU2VydmljZUVycm9yLFxuICBOZXR3b3JrRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgQXV0aGVudGljYXRpb25FcnJvcixcbn0gZnJvbSAnQGxhaWthdGVzdC9qcy1jbGllbnQnO1xuXG4vLyBSZS1leHBvcnQgdHlwZXMgZnJvbSBjbGllbnRcbmV4cG9ydCB0eXBlIHtcbiAgUHJvbXB0Q29udGVudCxcbiAgU2NvcmVJbnB1dCxcbiAgU2NvcmVUeXBlLFxuICBTY29yZVNvdXJjZSxcbiAgUHVzaFNjb3JlT3B0aW9ucyxcbiAgUHVzaFNjb3JlUmVzcG9uc2UsXG4gIENsaWVudE9wdGlvbnMsXG4gIEdldFByb21wdE9wdGlvbnMsXG59IGZyb20gJ0BsYWlrYXRlc3QvanMtY2xpZW50JztcbiJdfQ==
34
+ // AI-native tracing API
35
+ var trace_1 = require("./trace");
36
+ Object.defineProperty(exports, "trace", { enumerable: true, get: function () { return trace_1.trace; } });
37
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsYUFBYTtBQUNiLGlDQUFvQztBQUEzQixrR0FBQSxTQUFTLE9BQUE7QUFHbEIsMkNBQTJDO0FBQzNDLGtEQW1COEI7QUFsQjVCLHlHQUFBLFlBQVksT0FBQTtBQUNaLHlHQUFBLFlBQVksT0FBQTtBQUNaLDJHQUFBLGNBQWMsT0FBQTtBQUNkLHNHQUFBLFNBQVMsT0FBQTtBQUNULHNHQUFBLFNBQVMsT0FBQTtBQUNULHdHQUFBLFdBQVcsT0FBQTtBQUNYLDJHQUFBLGNBQWMsT0FBQTtBQUNkLGdIQUFBLG1CQUFtQixPQUFBO0FBQ25CLHdHQUFBLFdBQVcsT0FBQTtBQUNYLDBHQUFBLGFBQWEsT0FBQTtBQUNiLDBHQUFBLGFBQWEsT0FBQTtBQUNiLDRHQUFBLGVBQWUsT0FBQTtBQUNmLDJHQUFBLGNBQWMsT0FBQTtBQUNkLDhHQUFBLGlCQUFpQixPQUFBO0FBQ2pCLG1IQUFBLHNCQUFzQixPQUFBO0FBQ3RCLHFHQUFBLFFBQVEsT0FBQTtBQUNSLHFHQUFBLFFBQVEsT0FBQTtBQUNSLHlHQUFBLFlBQVksT0FBQTtBQUdkLHdDQUF3QztBQUN4QyxrREFNOEI7QUFMNUIsbUdBQUEsTUFBTSxPQUFBO0FBQ04sOEdBQUEsaUJBQWlCLE9BQUE7QUFDakIseUdBQUEsWUFBWSxPQUFBO0FBQ1osNEdBQUEsZUFBZSxPQUFBO0FBQ2YsZ0hBQUEsbUJBQW1CLE9BQUE7QUFlckIsd0JBQXdCO0FBQ3hCLGlDQUFnQztBQUF2Qiw4RkFBQSxLQUFLLE9BQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBNYWluIGNsYXNzXG5leHBvcnQgeyBMYWlrYVRlc3QgfSBmcm9tICcuL2xhaWthJztcbmV4cG9ydCB7IExhaWthQ29uZmlnIH0gZnJvbSAnLi90eXBlcyc7XG5cbi8vIFJlLWV4cG9ydCBmcm9tIGF1dG8tb3RlbCBmb3IgY29udmVuaWVuY2VcbmV4cG9ydCB7XG4gIHNldFNlc3Npb25JZCxcbiAgZ2V0U2Vzc2lvbklkLFxuICBjbGVhclNlc3Npb25JZCxcbiAgc2V0VXNlcklkLFxuICBnZXRVc2VySWQsXG4gIGNsZWFyVXNlcklkLFxuICBydW5XaXRoQ29udGV4dCxcbiAgcnVuV2l0aENvbnRleHRBc3luYyxcbiAgc2V0UHJvcGVydHksXG4gIHNldFByb3BlcnRpZXMsXG4gIGdldFByb3BlcnRpZXMsXG4gIGNsZWFyUHJvcGVydGllcyxcbiAgcmVtb3ZlUHJvcGVydHksXG4gIHJ1bldpdGhQcm9wZXJ0aWVzLFxuICBydW5XaXRoUHJvcGVydGllc0FzeW5jLFxuICBzaHV0ZG93bixcbiAgd2l0aFNwYW4sXG4gIHdpdGhTcGFuU3luYyxcbn0gZnJvbSAnQGxhaWthdGVzdC9hdXRvLW90ZWwnO1xuXG4vLyBSZS1leHBvcnQgZnJvbSBjbGllbnQgZm9yIGNvbnZlbmllbmNlXG5leHBvcnQge1xuICBQcm9tcHQsXG4gIExhaWthU2VydmljZUVycm9yLFxuICBOZXR3b3JrRXJyb3IsXG4gIFZhbGlkYXRpb25FcnJvcixcbiAgQXV0aGVudGljYXRpb25FcnJvcixcbn0gZnJvbSAnQGxhaWthdGVzdC9qcy1jbGllbnQnO1xuXG4vLyBSZS1leHBvcnQgdHlwZXMgZnJvbSBjbGllbnRcbmV4cG9ydCB0eXBlIHtcbiAgUHJvbXB0Q29udGVudCxcbiAgU2NvcmVJbnB1dCxcbiAgU2NvcmVUeXBlLFxuICBTY29yZVNvdXJjZSxcbiAgUHVzaFNjb3JlT3B0aW9ucyxcbiAgUHVzaFNjb3JlUmVzcG9uc2UsXG4gIENsaWVudE9wdGlvbnMsXG4gIEdldFByb21wdE9wdGlvbnMsXG59IGZyb20gJ0BsYWlrYXRlc3QvanMtY2xpZW50JztcblxuLy8gQUktbmF0aXZlIHRyYWNpbmcgQVBJXG5leHBvcnQgeyB0cmFjZSB9IGZyb20gJy4vdHJhY2UnO1xuZXhwb3J0IHR5cGUgeyBUcmFjZUNhbGxiYWNrLCBUcmFjZVN5bmNDYWxsYmFjaywgT3BlcmF0aW9uVHlwZSB9IGZyb20gJy4vdHJhY2UnO1xuIl19
package/dist/laika.js CHANGED
@@ -20,13 +20,16 @@ class LaikaTest {
20
20
  */
21
21
  static init(config) {
22
22
  const instance = new LaikaTest();
23
+ // Derive OTLP endpoint from baseUrl if not explicitly set
24
+ const baseUrl = config.baseUrl || 'https://api.laikatest.com';
25
+ const endpoint = config.endpoint || `${baseUrl}/otel/v1/traces`;
23
26
  try {
24
27
  // Initialize tracing (if enabled, default: true)
25
28
  if (config.tracing !== false) {
26
29
  (0, auto_otel_1.initLaikaTest)({
27
30
  apiKey: config.apiKey,
28
31
  serviceName: config.serviceName,
29
- endpoint: config.endpoint,
32
+ endpoint: endpoint,
30
33
  captureContent: config.captureContent,
31
34
  debug: config.debug,
32
35
  sessionId: config.sessionId,
@@ -40,7 +43,7 @@ class LaikaTest {
40
43
  // Initialize experiments client (if enabled, default: true)
41
44
  if (config.experiments !== false) {
42
45
  instance.client = new js_client_1.LaikaTest(config.apiKey, {
43
- baseUrl: config.baseUrl,
46
+ baseUrl: baseUrl,
44
47
  timeout: config.timeout,
45
48
  cacheEnabled: config.cacheEnabled,
46
49
  cacheTTL: config.cacheTTL,
@@ -124,4 +127,4 @@ class LaikaTest {
124
127
  }
125
128
  }
126
129
  exports.LaikaTest = LaikaTest;
127
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFpa2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGFpa2EudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0RBQStEO0FBQy9ELG9EQUE4RjtBQUc5Rjs7O0dBR0c7QUFDSCxNQUFhLFNBQVM7SUFJcEI7UUFIUSxXQUFNLEdBQTJCLElBQUksQ0FBQztRQUN0QyxtQkFBYyxHQUFZLEtBQUssQ0FBQztJQUVqQixDQUFDO0lBRXhCOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFtQjtRQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBRWpDLElBQUksQ0FBQztZQUNILGlEQUFpRDtZQUNqRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQzdCLElBQUEseUJBQWEsRUFBQztvQkFDWixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07b0JBQ3JCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztvQkFDL0IsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUFRO29CQUN6QixjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWM7b0JBQ3JDLEtBQUssRUFBRSxNQUFNLENBQUMsS0FBSztvQkFDbkIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO29CQUMzQixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7b0JBQ2pDLE1BQU0sRUFBRSxNQUFNLENBQUMsTUFBTTtvQkFDckIsU0FBUyxFQUFFLE1BQU0sQ0FBQyxTQUFTO29CQUMzQixpQkFBaUIsRUFBRSxNQUFNLENBQUMsaUJBQWlCO2lCQUM1QyxDQUFDLENBQUM7Z0JBQ0gsUUFBUSxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUM7WUFDakMsQ0FBQztZQUVELDREQUE0RDtZQUM1RCxJQUFJLE1BQU0sQ0FBQyxXQUFXLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQ2pDLFFBQVEsQ0FBQyxNQUFNLEdBQUcsSUFBSSxxQkFBZSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUU7b0JBQ25ELE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDdkIsT0FBTyxFQUFFLE1BQU0sQ0FBQyxPQUFPO29CQUN2QixZQUFZLEVBQUUsTUFBTSxDQUFDLFlBQVk7b0JBQ2pDLFFBQVEsRUFBRSxNQUFNLENBQUMsUUFBUTtpQkFDMUIsQ0FBQyxDQUFDO1lBQ0wsQ0FBQztZQUVELE9BQU8sUUFBUSxDQUFDO1FBQ2xCLENBQUM7UUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1lBQ2YscUNBQXFDO1lBQ3JDLElBQUksUUFBUSxDQUFDLGNBQWMsRUFBRSxDQUFDO2dCQUM1QixJQUFBLG9CQUFRLEdBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUUsQ0FBQyxDQUFDLENBQUM7WUFDN0IsQ0FBQztZQUNELE1BQU0sS0FBSyxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxTQUFTLENBQ2IsVUFBa0IsRUFDbEIsT0FBMEI7UUFFMUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU8sQ0FBQyxTQUFTLENBQUksVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFFRDs7Ozs7Ozs7T0FRRztJQUNILEtBQUssQ0FBQyxtQkFBbUIsQ0FDdkIsZUFBdUIsRUFDdkIsT0FBaUM7UUFFakMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLE1BQU8sQ0FBQyxtQkFBbUIsQ0FBSSxlQUFlLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDdkUsQ0FBQztJQUVELDBDQUEwQztJQUMxQyxnQkFBZ0I7UUFDZCxPQUFPLElBQUksQ0FBQyxjQUFjLENBQUM7SUFDN0IsQ0FBQztJQUVELHFEQUFxRDtJQUNyRCxvQkFBb0I7UUFDbEIsT0FBTyxJQUFJLENBQUMsTUFBTSxLQUFLLElBQUksQ0FBQztJQUM5QixDQUFDO0lBRUQ7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLFFBQVE7UUFDWixNQUFNLE1BQU0sR0FBWSxFQUFFLENBQUM7UUFFM0IsSUFBSSxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDO2dCQUNILE1BQU0sSUFBQSxvQkFBUSxHQUFFLENBQUM7WUFDbkIsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFjLENBQUMsQ0FBQztZQUM5QixDQUFDO1FBQ0gsQ0FBQztRQUVELElBQUksSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2hCLElBQUksQ0FBQztnQkFDSCxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ3hCLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBYyxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLE1BQU0sQ0FBQyxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxxQ0FBcUMsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUMvRCxDQUFDO0lBQ0gsQ0FBQztJQUVELHlDQUF5QztJQUNqQyxZQUFZO1FBQ2xCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDakIsTUFBTSxJQUFJLEtBQUssQ0FDYiwyREFBMkQsQ0FDNUQsQ0FBQztRQUNKLENBQUM7SUFDSCxDQUFDO0NBQ0Y7QUFySUQsOEJBcUlDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgaW5pdExhaWthVGVzdCwgc2h1dGRvd24gfSBmcm9tICdAbGFpa2F0ZXN0L2F1dG8tb3RlbCc7XG5pbXBvcnQgeyBMYWlrYVRlc3QgYXMgTGFpa2FUZXN0Q2xpZW50LCBQcm9tcHQsIEdldFByb21wdE9wdGlvbnMgfSBmcm9tICdAbGFpa2F0ZXN0L2pzLWNsaWVudCc7XG5pbXBvcnQgeyBMYWlrYUNvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuXG4vKipcbiAqIFVuaWZpZWQgTGFpa2FUZXN0IFNESyBmb3IgdHJhY2luZyBhbmQgZXhwZXJpbWVudHMuXG4gKiBQcm92aWRlcyBhIHNpbmdsZSBlbnRyeSBwb2ludCBmb3IgYm90aCBvYnNlcnZhYmlsaXR5IGFuZCBBL0IgdGVzdGluZy5cbiAqL1xuZXhwb3J0IGNsYXNzIExhaWthVGVzdCB7XG4gIHByaXZhdGUgY2xpZW50OiBMYWlrYVRlc3RDbGllbnQgfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSB0cmFjaW5nRW5hYmxlZDogYm9vbGVhbiA9IGZhbHNlO1xuXG4gIHByaXZhdGUgY29uc3RydWN0b3IoKSB7fVxuXG4gIC8qKlxuICAgKiBJbml0aWFsaXplIExhaWthVGVzdCB3aXRoIHVuaWZpZWQgY29uZmlndXJhdGlvbi5cbiAgICogRW5hYmxlcyBib3RoIHRyYWNpbmcgYW5kIGV4cGVyaW1lbnRzIGJ5IGRlZmF1bHQuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBhcGlLZXkgb3Igc2VydmljZU5hbWUgaXMgbWlzc2luZy9pbnZhbGlkXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBPcGVuVGVsZW1ldHJ5IFNESyBmYWlscyB0byBzdGFydFxuICAgKi9cbiAgc3RhdGljIGluaXQoY29uZmlnOiBMYWlrYUNvbmZpZyk6IExhaWthVGVzdCB7XG4gICAgY29uc3QgaW5zdGFuY2UgPSBuZXcgTGFpa2FUZXN0KCk7XG5cbiAgICB0cnkge1xuICAgICAgLy8gSW5pdGlhbGl6ZSB0cmFjaW5nIChpZiBlbmFibGVkLCBkZWZhdWx0OiB0cnVlKVxuICAgICAgaWYgKGNvbmZpZy50cmFjaW5nICE9PSBmYWxzZSkge1xuICAgICAgICBpbml0TGFpa2FUZXN0KHtcbiAgICAgICAgICBhcGlLZXk6IGNvbmZpZy5hcGlLZXksXG4gICAgICAgICAgc2VydmljZU5hbWU6IGNvbmZpZy5zZXJ2aWNlTmFtZSxcbiAgICAgICAgICBlbmRwb2ludDogY29uZmlnLmVuZHBvaW50LFxuICAgICAgICAgIGNhcHR1cmVDb250ZW50OiBjb25maWcuY2FwdHVyZUNvbnRlbnQsXG4gICAgICAgICAgZGVidWc6IGNvbmZpZy5kZWJ1ZyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IGNvbmZpZy5zZXNzaW9uSWQsXG4gICAgICAgICAgZ2V0U2Vzc2lvbklkOiBjb25maWcuZ2V0U2Vzc2lvbklkLFxuICAgICAgICAgIHVzZXJJZDogY29uZmlnLnVzZXJJZCxcbiAgICAgICAgICBnZXRVc2VySWQ6IGNvbmZpZy5nZXRVc2VySWQsXG4gICAgICAgICAgZGVmYXVsdFByb3BlcnRpZXM6IGNvbmZpZy5kZWZhdWx0UHJvcGVydGllcyxcbiAgICAgICAgfSk7XG4gICAgICAgIGluc3RhbmNlLnRyYWNpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSW5pdGlhbGl6ZSBleHBlcmltZW50cyBjbGllbnQgKGlmIGVuYWJsZWQsIGRlZmF1bHQ6IHRydWUpXG4gICAgICBpZiAoY29uZmlnLmV4cGVyaW1lbnRzICE9PSBmYWxzZSkge1xuICAgICAgICBpbnN0YW5jZS5jbGllbnQgPSBuZXcgTGFpa2FUZXN0Q2xpZW50KGNvbmZpZy5hcGlLZXksIHtcbiAgICAgICAgICBiYXNlVXJsOiBjb25maWcuYmFzZVVybCxcbiAgICAgICAgICB0aW1lb3V0OiBjb25maWcudGltZW91dCxcbiAgICAgICAgICBjYWNoZUVuYWJsZWQ6IGNvbmZpZy5jYWNoZUVuYWJsZWQsXG4gICAgICAgICAgY2FjaGVUVEw6IGNvbmZpZy5jYWNoZVRUTCxcbiAgICAgICAgfSk7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBpbnN0YW5jZTtcbiAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgLy8gQ2xlYW51cCBhbnkgcGFydGlhbCBpbml0aWFsaXphdGlvblxuICAgICAgaWYgKGluc3RhbmNlLnRyYWNpbmdFbmFibGVkKSB7XG4gICAgICAgIHNodXRkb3duKCkuY2F0Y2goKCkgPT4ge30pO1xuICAgICAgfVxuICAgICAgdGhyb3cgZXJyb3I7XG4gICAgfVxuICB9XG5cbiAgLyoqXG4gICAqIEZldGNoIHByb21wdCBjb250ZW50IGJ5IG5hbWUuXG4gICAqIFJlcXVpcmVzIGV4cGVyaW1lbnRzIHRvIGJlIGVuYWJsZWQuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBleHBlcmltZW50cyBhcmUgbm90IGVuYWJsZWRcbiAgICogQHRocm93cyB7VmFsaWRhdGlvbkVycm9yfSBJZiBwcm9tcHQgbmFtZSBpcyBpbnZhbGlkXG4gICAqIEB0aHJvd3Mge0F1dGhlbnRpY2F0aW9uRXJyb3J9IElmIEFQSSBrZXkgaXMgaW52YWxpZFxuICAgKiBAdGhyb3dzIHtMYWlrYVNlcnZpY2VFcnJvcn0gSWYgQVBJIHJldHVybnMgYW4gZXJyb3JcbiAgICogQHRocm93cyB7TmV0d29ya0Vycm9yfSBJZiBuZXR3b3JrIHJlcXVlc3QgZmFpbHNcbiAgICovXG4gIGFzeW5jIGdldFByb21wdDxDID0gdW5rbm93bj4oXG4gICAgcHJvbXB0TmFtZTogc3RyaW5nLFxuICAgIG9wdGlvbnM/OiBHZXRQcm9tcHRPcHRpb25zXG4gICk6IFByb21pc2U8UHJvbXB0PEM+PiB7XG4gICAgdGhpcy5lbnN1cmVDbGllbnQoKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQhLmdldFByb21wdDxDPihwcm9tcHROYW1lLCBvcHRpb25zKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBHZXQgZXhwZXJpbWVudCBwcm9tcHQgd2l0aCBhdXRvbWF0aWMgYnVja2V0aW5nLlxuICAgKiBSZXF1aXJlcyBleHBlcmltZW50cyB0byBiZSBlbmFibGVkLlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgZXhwZXJpbWVudHMgYXJlIG5vdCBlbmFibGVkXG4gICAqIEB0aHJvd3Mge1ZhbGlkYXRpb25FcnJvcn0gSWYgZXhwZXJpbWVudCB0aXRsZSBvciBjb250ZXh0IGlzIGludmFsaWRcbiAgICogQHRocm93cyB7QXV0aGVudGljYXRpb25FcnJvcn0gSWYgQVBJIGtleSBpcyBpbnZhbGlkXG4gICAqIEB0aHJvd3Mge0xhaWthU2VydmljZUVycm9yfSBJZiBBUEkgcmV0dXJucyBhbiBlcnJvclxuICAgKiBAdGhyb3dzIHtOZXR3b3JrRXJyb3J9IElmIG5ldHdvcmsgcmVxdWVzdCBmYWlsc1xuICAgKi9cbiAgYXN5bmMgZ2V0RXhwZXJpbWVudFByb21wdDxDID0gdW5rbm93bj4oXG4gICAgZXhwZXJpbWVudFRpdGxlOiBzdHJpbmcsXG4gICAgY29udGV4dD86IFJlY29yZDxzdHJpbmcsIHVua25vd24+XG4gICk6IFByb21pc2U8UHJvbXB0PEM+PiB7XG4gICAgdGhpcy5lbnN1cmVDbGllbnQoKTtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQhLmdldEV4cGVyaW1lbnRQcm9tcHQ8Qz4oZXhwZXJpbWVudFRpdGxlLCBjb250ZXh0KTtcbiAgfVxuXG4gIC8qKiBSZXR1cm5zIHRydWUgaWYgdHJhY2luZyBpcyBlbmFibGVkLiAqL1xuICBpc1RyYWNpbmdFbmFibGVkKCk6IGJvb2xlYW4ge1xuICAgIHJldHVybiB0aGlzLnRyYWNpbmdFbmFibGVkO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdHJ1ZSBpZiBleHBlcmltZW50cyBjbGllbnQgaXMgZW5hYmxlZC4gKi9cbiAgaXNFeHBlcmltZW50c0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuY2xpZW50ICE9PSBudWxsO1xuICB9XG5cbiAgLyoqXG4gICAqIFNodXRkb3duIGJvdGggdHJhY2luZyBhbmQgY2xpZW50IHJlc291cmNlcy5cbiAgICogQ2FsbCB0aGlzIGJlZm9yZSBwcm9jZXNzIGV4aXQgZm9yIGNsZWFuIHNodXRkb3duLlxuICAgKi9cbiAgYXN5bmMgc2h1dGRvd24oKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgY29uc3QgZXJyb3JzOiBFcnJvcltdID0gW107XG5cbiAgICBpZiAodGhpcy50cmFjaW5nRW5hYmxlZCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgYXdhaXQgc2h1dGRvd24oKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAodGhpcy5jbGllbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIHRoaXMuY2xpZW50LmRlc3Ryb3koKTtcbiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAgIGVycm9ycy5wdXNoKGVycm9yIGFzIEVycm9yKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZXJyb3JzLmxlbmd0aCA+IDApIHtcbiAgICAgIGNvbnNvbGUuZXJyb3IoJ1tMYWlrYVRlc3RdIEVycm9ycyBkdXJpbmcgc2h1dGRvd246JywgZXJyb3JzKTtcbiAgICB9XG4gIH1cblxuICAvKiogVGhyb3dzIGlmIGV4cGVyaW1lbnRzIG5vdCBlbmFibGVkLiAqL1xuICBwcml2YXRlIGVuc3VyZUNsaWVudCgpOiB2b2lkIHtcbiAgICBpZiAoIXRoaXMuY2xpZW50KSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAgICdFeHBlcmltZW50cyBub3QgZW5hYmxlZC4gU2V0IGV4cGVyaW1lbnRzOiB0cnVlIGluIGNvbmZpZy4nXG4gICAgICApO1xuICAgIH1cbiAgfVxufVxuIl19
130
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGFpa2EuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvbGFpa2EudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0RBQStEO0FBQy9ELG9EQUE4RjtBQUc5Rjs7O0dBR0c7QUFDSCxNQUFhLFNBQVM7SUFJcEI7UUFIUSxXQUFNLEdBQTJCLElBQUksQ0FBQztRQUN0QyxtQkFBYyxHQUFZLEtBQUssQ0FBQztJQUVqQixDQUFDO0lBRXhCOzs7OztPQUtHO0lBQ0gsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFtQjtRQUM3QixNQUFNLFFBQVEsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO1FBRWpDLDBEQUEwRDtRQUMxRCxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsT0FBTyxJQUFJLDJCQUEyQixDQUFDO1FBQzlELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFRLElBQUksR0FBRyxPQUFPLGlCQUFpQixDQUFDO1FBRWhFLElBQUksQ0FBQztZQUNILGlEQUFpRDtZQUNqRCxJQUFJLE1BQU0sQ0FBQyxPQUFPLEtBQUssS0FBSyxFQUFFLENBQUM7Z0JBQzdCLElBQUEseUJBQWEsRUFBQztvQkFDWixNQUFNLEVBQUUsTUFBTSxDQUFDLE1BQU07b0JBQ3JCLFdBQVcsRUFBRSxNQUFNLENBQUMsV0FBVztvQkFDL0IsUUFBUSxFQUFFLFFBQVE7b0JBQ2xCLGNBQWMsRUFBRSxNQUFNLENBQUMsY0FBYztvQkFDckMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxLQUFLO29CQUNuQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7b0JBQzNCLFlBQVksRUFBRSxNQUFNLENBQUMsWUFBWTtvQkFDakMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxNQUFNO29CQUNyQixTQUFTLEVBQUUsTUFBTSxDQUFDLFNBQVM7b0JBQzNCLGlCQUFpQixFQUFFLE1BQU0sQ0FBQyxpQkFBaUI7aUJBQzVDLENBQUMsQ0FBQztnQkFDSCxRQUFRLENBQUMsY0FBYyxHQUFHLElBQUksQ0FBQztZQUNqQyxDQUFDO1lBRUQsNERBQTREO1lBQzVELElBQUksTUFBTSxDQUFDLFdBQVcsS0FBSyxLQUFLLEVBQUUsQ0FBQztnQkFDakMsUUFBUSxDQUFDLE1BQU0sR0FBRyxJQUFJLHFCQUFlLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRTtvQkFDbkQsT0FBTyxFQUFFLE9BQU87b0JBQ2hCLE9BQU8sRUFBRSxNQUFNLENBQUMsT0FBTztvQkFDdkIsWUFBWSxFQUFFLE1BQU0sQ0FBQyxZQUFZO29CQUNqQyxRQUFRLEVBQUUsTUFBTSxDQUFDLFFBQVE7aUJBQzFCLENBQUMsQ0FBQztZQUNMLENBQUM7WUFFRCxPQUFPLFFBQVEsQ0FBQztRQUNsQixDQUFDO1FBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztZQUNmLHFDQUFxQztZQUNyQyxJQUFJLFFBQVEsQ0FBQyxjQUFjLEVBQUUsQ0FBQztnQkFDNUIsSUFBQSxvQkFBUSxHQUFFLENBQUMsS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFFLENBQUMsQ0FBQyxDQUFDO1lBQzdCLENBQUM7WUFDRCxNQUFNLEtBQUssQ0FBQztRQUNkLENBQUM7SUFDSCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsU0FBUyxDQUNiLFVBQWtCLEVBQ2xCLE9BQTBCO1FBRTFCLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQyxNQUFPLENBQUMsU0FBUyxDQUFJLFVBQVUsRUFBRSxPQUFPLENBQUMsQ0FBQztJQUN4RCxDQUFDO0lBRUQ7Ozs7Ozs7O09BUUc7SUFDSCxLQUFLLENBQUMsbUJBQW1CLENBQ3ZCLGVBQXVCLEVBQ3ZCLE9BQWlDO1FBRWpDLElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNwQixPQUFPLElBQUksQ0FBQyxNQUFPLENBQUMsbUJBQW1CLENBQUksZUFBZSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZFLENBQUM7SUFFRCwwQ0FBMEM7SUFDMUMsZ0JBQWdCO1FBQ2QsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDO0lBQzdCLENBQUM7SUFFRCxxREFBcUQ7SUFDckQsb0JBQW9CO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLE1BQU0sS0FBSyxJQUFJLENBQUM7SUFDOUIsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyxRQUFRO1FBQ1osTUFBTSxNQUFNLEdBQVksRUFBRSxDQUFDO1FBRTNCLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1lBQ3hCLElBQUksQ0FBQztnQkFDSCxNQUFNLElBQUEsb0JBQVEsR0FBRSxDQUFDO1lBQ25CLENBQUM7WUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO2dCQUNmLE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBYyxDQUFDLENBQUM7WUFDOUIsQ0FBQztRQUNILENBQUM7UUFFRCxJQUFJLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNoQixJQUFJLENBQUM7Z0JBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztZQUN4QixDQUFDO1lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztnQkFDZixNQUFNLENBQUMsSUFBSSxDQUFDLEtBQWMsQ0FBQyxDQUFDO1lBQzlCLENBQUM7UUFDSCxDQUFDO1FBRUQsSUFBSSxNQUFNLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RCLE9BQU8sQ0FBQyxLQUFLLENBQUMscUNBQXFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDL0QsQ0FBQztJQUNILENBQUM7SUFFRCx5Q0FBeUM7SUFDakMsWUFBWTtRQUNsQixJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ2pCLE1BQU0sSUFBSSxLQUFLLENBQ2IsMkRBQTJELENBQzVELENBQUM7UUFDSixDQUFDO0lBQ0gsQ0FBQztDQUNGO0FBeklELDhCQXlJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGluaXRMYWlrYVRlc3QsIHNodXRkb3duIH0gZnJvbSAnQGxhaWthdGVzdC9hdXRvLW90ZWwnO1xuaW1wb3J0IHsgTGFpa2FUZXN0IGFzIExhaWthVGVzdENsaWVudCwgUHJvbXB0LCBHZXRQcm9tcHRPcHRpb25zIH0gZnJvbSAnQGxhaWthdGVzdC9qcy1jbGllbnQnO1xuaW1wb3J0IHsgTGFpa2FDb25maWcgfSBmcm9tICcuL3R5cGVzJztcblxuLyoqXG4gKiBVbmlmaWVkIExhaWthVGVzdCBTREsgZm9yIHRyYWNpbmcgYW5kIGV4cGVyaW1lbnRzLlxuICogUHJvdmlkZXMgYSBzaW5nbGUgZW50cnkgcG9pbnQgZm9yIGJvdGggb2JzZXJ2YWJpbGl0eSBhbmQgQS9CIHRlc3RpbmcuXG4gKi9cbmV4cG9ydCBjbGFzcyBMYWlrYVRlc3Qge1xuICBwcml2YXRlIGNsaWVudDogTGFpa2FUZXN0Q2xpZW50IHwgbnVsbCA9IG51bGw7XG4gIHByaXZhdGUgdHJhY2luZ0VuYWJsZWQ6IGJvb2xlYW4gPSBmYWxzZTtcblxuICBwcml2YXRlIGNvbnN0cnVjdG9yKCkge31cblxuICAvKipcbiAgICogSW5pdGlhbGl6ZSBMYWlrYVRlc3Qgd2l0aCB1bmlmaWVkIGNvbmZpZ3VyYXRpb24uXG4gICAqIEVuYWJsZXMgYm90aCB0cmFjaW5nIGFuZCBleHBlcmltZW50cyBieSBkZWZhdWx0LlxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgYXBpS2V5IG9yIHNlcnZpY2VOYW1lIGlzIG1pc3NpbmcvaW52YWxpZFxuICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgT3BlblRlbGVtZXRyeSBTREsgZmFpbHMgdG8gc3RhcnRcbiAgICovXG4gIHN0YXRpYyBpbml0KGNvbmZpZzogTGFpa2FDb25maWcpOiBMYWlrYVRlc3Qge1xuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IExhaWthVGVzdCgpO1xuXG4gICAgLy8gRGVyaXZlIE9UTFAgZW5kcG9pbnQgZnJvbSBiYXNlVXJsIGlmIG5vdCBleHBsaWNpdGx5IHNldFxuICAgIGNvbnN0IGJhc2VVcmwgPSBjb25maWcuYmFzZVVybCB8fCAnaHR0cHM6Ly9hcGkubGFpa2F0ZXN0LmNvbSc7XG4gICAgY29uc3QgZW5kcG9pbnQgPSBjb25maWcuZW5kcG9pbnQgfHwgYCR7YmFzZVVybH0vb3RlbC92MS90cmFjZXNgO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIEluaXRpYWxpemUgdHJhY2luZyAoaWYgZW5hYmxlZCwgZGVmYXVsdDogdHJ1ZSlcbiAgICAgIGlmIChjb25maWcudHJhY2luZyAhPT0gZmFsc2UpIHtcbiAgICAgICAgaW5pdExhaWthVGVzdCh7XG4gICAgICAgICAgYXBpS2V5OiBjb25maWcuYXBpS2V5LFxuICAgICAgICAgIHNlcnZpY2VOYW1lOiBjb25maWcuc2VydmljZU5hbWUsXG4gICAgICAgICAgZW5kcG9pbnQ6IGVuZHBvaW50LFxuICAgICAgICAgIGNhcHR1cmVDb250ZW50OiBjb25maWcuY2FwdHVyZUNvbnRlbnQsXG4gICAgICAgICAgZGVidWc6IGNvbmZpZy5kZWJ1ZyxcbiAgICAgICAgICBzZXNzaW9uSWQ6IGNvbmZpZy5zZXNzaW9uSWQsXG4gICAgICAgICAgZ2V0U2Vzc2lvbklkOiBjb25maWcuZ2V0U2Vzc2lvbklkLFxuICAgICAgICAgIHVzZXJJZDogY29uZmlnLnVzZXJJZCxcbiAgICAgICAgICBnZXRVc2VySWQ6IGNvbmZpZy5nZXRVc2VySWQsXG4gICAgICAgICAgZGVmYXVsdFByb3BlcnRpZXM6IGNvbmZpZy5kZWZhdWx0UHJvcGVydGllcyxcbiAgICAgICAgfSk7XG4gICAgICAgIGluc3RhbmNlLnRyYWNpbmdFbmFibGVkID0gdHJ1ZTtcbiAgICAgIH1cblxuICAgICAgLy8gSW5pdGlhbGl6ZSBleHBlcmltZW50cyBjbGllbnQgKGlmIGVuYWJsZWQsIGRlZmF1bHQ6IHRydWUpXG4gICAgICBpZiAoY29uZmlnLmV4cGVyaW1lbnRzICE9PSBmYWxzZSkge1xuICAgICAgICBpbnN0YW5jZS5jbGllbnQgPSBuZXcgTGFpa2FUZXN0Q2xpZW50KGNvbmZpZy5hcGlLZXksIHtcbiAgICAgICAgICBiYXNlVXJsOiBiYXNlVXJsLFxuICAgICAgICAgIHRpbWVvdXQ6IGNvbmZpZy50aW1lb3V0LFxuICAgICAgICAgIGNhY2hlRW5hYmxlZDogY29uZmlnLmNhY2hlRW5hYmxlZCxcbiAgICAgICAgICBjYWNoZVRUTDogY29uZmlnLmNhY2hlVFRMLFxuICAgICAgICB9KTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIGluc3RhbmNlO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICAvLyBDbGVhbnVwIGFueSBwYXJ0aWFsIGluaXRpYWxpemF0aW9uXG4gICAgICBpZiAoaW5zdGFuY2UudHJhY2luZ0VuYWJsZWQpIHtcbiAgICAgICAgc2h1dGRvd24oKS5jYXRjaCgoKSA9PiB7fSk7XG4gICAgICB9XG4gICAgICB0aHJvdyBlcnJvcjtcbiAgICB9XG4gIH1cblxuICAvKipcbiAgICogRmV0Y2ggcHJvbXB0IGNvbnRlbnQgYnkgbmFtZS5cbiAgICogUmVxdWlyZXMgZXhwZXJpbWVudHMgdG8gYmUgZW5hYmxlZC5cbiAgICogQHRocm93cyB7RXJyb3J9IElmIGV4cGVyaW1lbnRzIGFyZSBub3QgZW5hYmxlZFxuICAgKiBAdGhyb3dzIHtWYWxpZGF0aW9uRXJyb3J9IElmIHByb21wdCBuYW1lIGlzIGludmFsaWRcbiAgICogQHRocm93cyB7QXV0aGVudGljYXRpb25FcnJvcn0gSWYgQVBJIGtleSBpcyBpbnZhbGlkXG4gICAqIEB0aHJvd3Mge0xhaWthU2VydmljZUVycm9yfSBJZiBBUEkgcmV0dXJucyBhbiBlcnJvclxuICAgKiBAdGhyb3dzIHtOZXR3b3JrRXJyb3J9IElmIG5ldHdvcmsgcmVxdWVzdCBmYWlsc1xuICAgKi9cbiAgYXN5bmMgZ2V0UHJvbXB0PEMgPSB1bmtub3duPihcbiAgICBwcm9tcHROYW1lOiBzdHJpbmcsXG4gICAgb3B0aW9ucz86IEdldFByb21wdE9wdGlvbnNcbiAgKTogUHJvbWlzZTxQcm9tcHQ8Qz4+IHtcbiAgICB0aGlzLmVuc3VyZUNsaWVudCgpO1xuICAgIHJldHVybiB0aGlzLmNsaWVudCEuZ2V0UHJvbXB0PEM+KHByb21wdE5hbWUsIG9wdGlvbnMpO1xuICB9XG5cbiAgLyoqXG4gICAqIEdldCBleHBlcmltZW50IHByb21wdCB3aXRoIGF1dG9tYXRpYyBidWNrZXRpbmcuXG4gICAqIFJlcXVpcmVzIGV4cGVyaW1lbnRzIHRvIGJlIGVuYWJsZWQuXG4gICAqIEB0aHJvd3Mge0Vycm9yfSBJZiBleHBlcmltZW50cyBhcmUgbm90IGVuYWJsZWRcbiAgICogQHRocm93cyB7VmFsaWRhdGlvbkVycm9yfSBJZiBleHBlcmltZW50IHRpdGxlIG9yIGNvbnRleHQgaXMgaW52YWxpZFxuICAgKiBAdGhyb3dzIHtBdXRoZW50aWNhdGlvbkVycm9yfSBJZiBBUEkga2V5IGlzIGludmFsaWRcbiAgICogQHRocm93cyB7TGFpa2FTZXJ2aWNlRXJyb3J9IElmIEFQSSByZXR1cm5zIGFuIGVycm9yXG4gICAqIEB0aHJvd3Mge05ldHdvcmtFcnJvcn0gSWYgbmV0d29yayByZXF1ZXN0IGZhaWxzXG4gICAqL1xuICBhc3luYyBnZXRFeHBlcmltZW50UHJvbXB0PEMgPSB1bmtub3duPihcbiAgICBleHBlcmltZW50VGl0bGU6IHN0cmluZyxcbiAgICBjb250ZXh0PzogUmVjb3JkPHN0cmluZywgdW5rbm93bj5cbiAgKTogUHJvbWlzZTxQcm9tcHQ8Qz4+IHtcbiAgICB0aGlzLmVuc3VyZUNsaWVudCgpO1xuICAgIHJldHVybiB0aGlzLmNsaWVudCEuZ2V0RXhwZXJpbWVudFByb21wdDxDPihleHBlcmltZW50VGl0bGUsIGNvbnRleHQpO1xuICB9XG5cbiAgLyoqIFJldHVybnMgdHJ1ZSBpZiB0cmFjaW5nIGlzIGVuYWJsZWQuICovXG4gIGlzVHJhY2luZ0VuYWJsZWQoKTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMudHJhY2luZ0VuYWJsZWQ7XG4gIH1cblxuICAvKiogUmV0dXJucyB0cnVlIGlmIGV4cGVyaW1lbnRzIGNsaWVudCBpcyBlbmFibGVkLiAqL1xuICBpc0V4cGVyaW1lbnRzRW5hYmxlZCgpOiBib29sZWFuIHtcbiAgICByZXR1cm4gdGhpcy5jbGllbnQgIT09IG51bGw7XG4gIH1cblxuICAvKipcbiAgICogU2h1dGRvd24gYm90aCB0cmFjaW5nIGFuZCBjbGllbnQgcmVzb3VyY2VzLlxuICAgKiBDYWxsIHRoaXMgYmVmb3JlIHByb2Nlc3MgZXhpdCBmb3IgY2xlYW4gc2h1dGRvd24uXG4gICAqL1xuICBhc3luYyBzaHV0ZG93bigpOiBQcm9taXNlPHZvaWQ+IHtcbiAgICBjb25zdCBlcnJvcnM6IEVycm9yW10gPSBbXTtcblxuICAgIGlmICh0aGlzLnRyYWNpbmdFbmFibGVkKSB7XG4gICAgICB0cnkge1xuICAgICAgICBhd2FpdCBzaHV0ZG93bigpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmICh0aGlzLmNsaWVudCkge1xuICAgICAgdHJ5IHtcbiAgICAgICAgdGhpcy5jbGllbnQuZGVzdHJveSgpO1xuICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgZXJyb3JzLnB1c2goZXJyb3IgYXMgRXJyb3IpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChlcnJvcnMubGVuZ3RoID4gMCkge1xuICAgICAgY29uc29sZS5lcnJvcignW0xhaWthVGVzdF0gRXJyb3JzIGR1cmluZyBzaHV0ZG93bjonLCBlcnJvcnMpO1xuICAgIH1cbiAgfVxuXG4gIC8qKiBUaHJvd3MgaWYgZXhwZXJpbWVudHMgbm90IGVuYWJsZWQuICovXG4gIHByaXZhdGUgZW5zdXJlQ2xpZW50KCk6IHZvaWQge1xuICAgIGlmICghdGhpcy5jbGllbnQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0V4cGVyaW1lbnRzIG5vdCBlbmFibGVkLiBTZXQgZXhwZXJpbWVudHM6IHRydWUgaW4gY29uZmlnLidcbiAgICAgICk7XG4gICAgfVxuICB9XG59XG4iXX0=
@@ -0,0 +1,29 @@
1
+ /**
2
+ * Trace an agent workflow
3
+ * @param name - Agent name
4
+ * @param fn - Async callback function
5
+ * @returns Promise resolving to callback result
6
+ * @example
7
+ * ```typescript
8
+ * await trace.agent('research-agent', async () => {
9
+ * const plan = await trace.step('planning', () => planAction());
10
+ * const result = await trace.tool('web-search', () => search());
11
+ * return result;
12
+ * });
13
+ * ```
14
+ */
15
+ export declare function agent<T>(name: string, fn: () => Promise<T>): Promise<T>;
16
+ /**
17
+ * Trace a tool execution
18
+ * @param name - Tool name
19
+ * @param fn - Async callback function
20
+ * @returns Promise resolving to callback result
21
+ */
22
+ export declare function tool<T>(name: string, fn: () => Promise<T>): Promise<T>;
23
+ /**
24
+ * Trace a generic step/operation
25
+ * @param name - Step name
26
+ * @param fn - Async callback function
27
+ * @returns Promise resolving to callback result
28
+ */
29
+ export declare function step<T>(name: string, fn: () => Promise<T>): Promise<T>;
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.agent = agent;
4
+ exports.tool = tool;
5
+ exports.step = step;
6
+ const core_1 = require("./core");
7
+ /**
8
+ * Trace an agent workflow
9
+ * @param name - Agent name
10
+ * @param fn - Async callback function
11
+ * @returns Promise resolving to callback result
12
+ * @example
13
+ * ```typescript
14
+ * await trace.agent('research-agent', async () => {
15
+ * const plan = await trace.step('planning', () => planAction());
16
+ * const result = await trace.tool('web-search', () => search());
17
+ * return result;
18
+ * });
19
+ * ```
20
+ */
21
+ async function agent(name, fn) {
22
+ return (0, core_1.traceOperation)('agent', name, fn);
23
+ }
24
+ /**
25
+ * Trace a tool execution
26
+ * @param name - Tool name
27
+ * @param fn - Async callback function
28
+ * @returns Promise resolving to callback result
29
+ */
30
+ async function tool(name, fn) {
31
+ return (0, core_1.traceOperation)('tool', name, fn);
32
+ }
33
+ /**
34
+ * Trace a generic step/operation
35
+ * @param name - Step name
36
+ * @param fn - Async callback function
37
+ * @returns Promise resolving to callback result
38
+ */
39
+ async function step(name, fn) {
40
+ return (0, core_1.traceOperation)('step', name, fn);
41
+ }
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWdlbnQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhY2UvYWdlbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFnQkEsc0JBRUM7QUFRRCxvQkFFQztBQVFELG9CQUVDO0FBdENELGlDQUF3QztBQUV4Qzs7Ozs7Ozs7Ozs7OztHQWFHO0FBQ0ksS0FBSyxVQUFVLEtBQUssQ0FBSSxJQUFZLEVBQUUsRUFBb0I7SUFDL0QsT0FBTyxJQUFBLHFCQUFjLEVBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUMzQyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsSUFBSSxDQUFJLElBQVksRUFBRSxFQUFvQjtJQUM5RCxPQUFPLElBQUEscUJBQWMsRUFBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQzFDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxJQUFJLENBQUksSUFBWSxFQUFFLEVBQW9CO0lBQzlELE9BQU8sSUFBQSxxQkFBYyxFQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDMUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRyYWNlT3BlcmF0aW9uIH0gZnJvbSAnLi9jb3JlJztcblxuLyoqXG4gKiBUcmFjZSBhbiBhZ2VudCB3b3JrZmxvd1xuICogQHBhcmFtIG5hbWUgLSBBZ2VudCBuYW1lXG4gKiBAcGFyYW0gZm4gLSBBc3luYyBjYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gY2FsbGJhY2sgcmVzdWx0XG4gKiBAZXhhbXBsZVxuICogYGBgdHlwZXNjcmlwdFxuICogYXdhaXQgdHJhY2UuYWdlbnQoJ3Jlc2VhcmNoLWFnZW50JywgYXN5bmMgKCkgPT4ge1xuICogICBjb25zdCBwbGFuID0gYXdhaXQgdHJhY2Uuc3RlcCgncGxhbm5pbmcnLCAoKSA9PiBwbGFuQWN0aW9uKCkpO1xuICogICBjb25zdCByZXN1bHQgPSBhd2FpdCB0cmFjZS50b29sKCd3ZWItc2VhcmNoJywgKCkgPT4gc2VhcmNoKCkpO1xuICogICByZXR1cm4gcmVzdWx0O1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGFnZW50PFQ+KG5hbWU6IHN0cmluZywgZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIHRyYWNlT3BlcmF0aW9uKCdhZ2VudCcsIG5hbWUsIGZuKTtcbn1cblxuLyoqXG4gKiBUcmFjZSBhIHRvb2wgZXhlY3V0aW9uXG4gKiBAcGFyYW0gbmFtZSAtIFRvb2wgbmFtZVxuICogQHBhcmFtIGZuIC0gQXN5bmMgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNhbGxiYWNrIHJlc3VsdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdG9vbDxUPihuYW1lOiBzdHJpbmcsIGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiB0cmFjZU9wZXJhdGlvbigndG9vbCcsIG5hbWUsIGZuKTtcbn1cblxuLyoqXG4gKiBUcmFjZSBhIGdlbmVyaWMgc3RlcC9vcGVyYXRpb25cbiAqIEBwYXJhbSBuYW1lIC0gU3RlcCBuYW1lXG4gKiBAcGFyYW0gZm4gLSBBc3luYyBjYWxsYmFjayBmdW5jdGlvblxuICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gY2FsbGJhY2sgcmVzdWx0XG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBzdGVwPFQ+KG5hbWU6IHN0cmluZywgZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIHRyYWNlT3BlcmF0aW9uKCdzdGVwJywgbmFtZSwgZm4pO1xufVxuIl19
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Trace an operation with semantic naming
3
+ * @param operation - Operation type (e.g., 'rag', 'agent', 'tool')
4
+ * @param name - User-provided name
5
+ * @param fn - Async callback function
6
+ * @returns Promise resolving to callback result
7
+ */
8
+ export declare function traceOperation<T>(operation: string, name: string, fn: () => Promise<T>): Promise<T>;
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.traceOperation = traceOperation;
4
+ const auto_otel_1 = require("@laikatest/auto-otel");
5
+ /**
6
+ * Trace an operation with semantic naming
7
+ * @param operation - Operation type (e.g., 'rag', 'agent', 'tool')
8
+ * @param name - User-provided name
9
+ * @param fn - Async callback function
10
+ * @returns Promise resolving to callback result
11
+ */
12
+ async function traceOperation(operation, name, fn) {
13
+ const spanName = `${operation}.${name}`;
14
+ return (0, auto_otel_1.withSpan)(spanName, async (span) => {
15
+ // Add semantic attributes
16
+ span.setAttribute('laikatest.operation.type', operation);
17
+ span.setAttribute('laikatest.operation.name', name);
18
+ return await fn();
19
+ });
20
+ }
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29yZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFjZS9jb3JlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBVUEsd0NBY0M7QUF4QkQsb0RBQWdEO0FBR2hEOzs7Ozs7R0FNRztBQUNJLEtBQUssVUFBVSxjQUFjLENBQ2xDLFNBQWlCLEVBQ2pCLElBQVksRUFDWixFQUFvQjtJQUVwQixNQUFNLFFBQVEsR0FBRyxHQUFHLFNBQVMsSUFBSSxJQUFJLEVBQUUsQ0FBQztJQUV4QyxPQUFPLElBQUEsb0JBQVEsRUFBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLElBQVUsRUFBRSxFQUFFO1FBQzdDLDBCQUEwQjtRQUMxQixJQUFJLENBQUMsWUFBWSxDQUFDLDBCQUEwQixFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQ3pELElBQUksQ0FBQyxZQUFZLENBQUMsMEJBQTBCLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFFcEQsT0FBTyxNQUFNLEVBQUUsRUFBRSxDQUFDO0lBQ3BCLENBQUMsQ0FBQyxDQUFDO0FBQ0wsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHdpdGhTcGFuIH0gZnJvbSAnQGxhaWthdGVzdC9hdXRvLW90ZWwnO1xuaW1wb3J0IHsgU3BhbiB9IGZyb20gJ0BvcGVudGVsZW1ldHJ5L2FwaSc7XG5cbi8qKlxuICogVHJhY2UgYW4gb3BlcmF0aW9uIHdpdGggc2VtYW50aWMgbmFtaW5nXG4gKiBAcGFyYW0gb3BlcmF0aW9uIC0gT3BlcmF0aW9uIHR5cGUgKGUuZy4sICdyYWcnLCAnYWdlbnQnLCAndG9vbCcpXG4gKiBAcGFyYW0gbmFtZSAtIFVzZXItcHJvdmlkZWQgbmFtZVxuICogQHBhcmFtIGZuIC0gQXN5bmMgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNhbGxiYWNrIHJlc3VsdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gdHJhY2VPcGVyYXRpb248VD4oXG4gIG9wZXJhdGlvbjogc3RyaW5nLFxuICBuYW1lOiBzdHJpbmcsXG4gIGZuOiAoKSA9PiBQcm9taXNlPFQ+XG4pOiBQcm9taXNlPFQ+IHtcbiAgY29uc3Qgc3Bhbk5hbWUgPSBgJHtvcGVyYXRpb259LiR7bmFtZX1gO1xuXG4gIHJldHVybiB3aXRoU3BhbihzcGFuTmFtZSwgYXN5bmMgKHNwYW46IFNwYW4pID0+IHtcbiAgICAvLyBBZGQgc2VtYW50aWMgYXR0cmlidXRlc1xuICAgIHNwYW4uc2V0QXR0cmlidXRlKCdsYWlrYXRlc3Qub3BlcmF0aW9uLnR5cGUnLCBvcGVyYXRpb24pO1xuICAgIHNwYW4uc2V0QXR0cmlidXRlKCdsYWlrYXRlc3Qub3BlcmF0aW9uLm5hbWUnLCBuYW1lKTtcblxuICAgIHJldHVybiBhd2FpdCBmbigpO1xuICB9KTtcbn1cbiJdfQ==
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Trace an evaluation step
3
+ * @param name - Evaluation name
4
+ * @param fn - Async callback function
5
+ * @returns Promise resolving to callback result
6
+ */
7
+ export declare function evaluation<T>(name: string, fn: () => Promise<T>): Promise<T>;
@@ -0,0 +1,14 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.evaluation = evaluation;
4
+ const core_1 = require("./core");
5
+ /**
6
+ * Trace an evaluation step
7
+ * @param name - Evaluation name
8
+ * @param fn - Async callback function
9
+ * @returns Promise resolving to callback result
10
+ */
11
+ async function evaluation(name, fn) {
12
+ return (0, core_1.traceOperation)('evaluation', name, fn);
13
+ }
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZXZhbHVhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFjZS9ldmFsdWF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBUUEsZ0NBRUM7QUFWRCxpQ0FBd0M7QUFFeEM7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsVUFBVSxDQUFJLElBQVksRUFBRSxFQUFvQjtJQUNwRSxPQUFPLElBQUEscUJBQWMsRUFBQyxZQUFZLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ2hELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0cmFjZU9wZXJhdGlvbiB9IGZyb20gJy4vY29yZSc7XG5cbi8qKlxuICogVHJhY2UgYW4gZXZhbHVhdGlvbiBzdGVwXG4gKiBAcGFyYW0gbmFtZSAtIEV2YWx1YXRpb24gbmFtZVxuICogQHBhcmFtIGZuIC0gQXN5bmMgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNhbGxiYWNrIHJlc3VsdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZXZhbHVhdGlvbjxUPihuYW1lOiBzdHJpbmcsIGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiB0cmFjZU9wZXJhdGlvbignZXZhbHVhdGlvbicsIG5hbWUsIGZuKTtcbn1cbiJdfQ==
@@ -0,0 +1,16 @@
1
+ /**
2
+ * Trace LLM generation
3
+ * @param name - Generation step name
4
+ * @param fn - Async callback function
5
+ * @returns Promise resolving to callback result
6
+ * @example
7
+ * ```typescript
8
+ * const response = await trace.generation('summarize', async () => {
9
+ * return await openai.chat.completions.create({
10
+ * model: 'gpt-4',
11
+ * messages: [{ role: 'user', content: prompt }]
12
+ * });
13
+ * });
14
+ * ```
15
+ */
16
+ export declare function generation<T>(name: string, fn: () => Promise<T>): Promise<T>;
@@ -0,0 +1,23 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generation = generation;
4
+ const core_1 = require("./core");
5
+ /**
6
+ * Trace LLM generation
7
+ * @param name - Generation step name
8
+ * @param fn - Async callback function
9
+ * @returns Promise resolving to callback result
10
+ * @example
11
+ * ```typescript
12
+ * const response = await trace.generation('summarize', async () => {
13
+ * return await openai.chat.completions.create({
14
+ * model: 'gpt-4',
15
+ * messages: [{ role: 'user', content: prompt }]
16
+ * });
17
+ * });
18
+ * ```
19
+ */
20
+ async function generation(name, fn) {
21
+ return (0, core_1.traceOperation)('generation', name, fn);
22
+ }
23
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZ2VuZXJhdGlvbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90cmFjZS9nZW5lcmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBaUJBLGdDQUVDO0FBbkJELGlDQUF3QztBQUV4Qzs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNJLEtBQUssVUFBVSxVQUFVLENBQUksSUFBWSxFQUFFLEVBQW9CO0lBQ3BFLE9BQU8sSUFBQSxxQkFBYyxFQUFDLFlBQVksRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDaEQsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHRyYWNlT3BlcmF0aW9uIH0gZnJvbSAnLi9jb3JlJztcblxuLyoqXG4gKiBUcmFjZSBMTE0gZ2VuZXJhdGlvblxuICogQHBhcmFtIG5hbWUgLSBHZW5lcmF0aW9uIHN0ZXAgbmFtZVxuICogQHBhcmFtIGZuIC0gQXN5bmMgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNhbGxiYWNrIHJlc3VsdFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHJhY2UuZ2VuZXJhdGlvbignc3VtbWFyaXplJywgYXN5bmMgKCkgPT4ge1xuICogICByZXR1cm4gYXdhaXQgb3BlbmFpLmNoYXQuY29tcGxldGlvbnMuY3JlYXRlKHtcbiAqICAgICBtb2RlbDogJ2dwdC00JyxcbiAqICAgICBtZXNzYWdlczogW3sgcm9sZTogJ3VzZXInLCBjb250ZW50OiBwcm9tcHQgfV1cbiAqICAgfSk7XG4gKiB9KTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2VuZXJhdGlvbjxUPihuYW1lOiBzdHJpbmcsIGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiB0cmFjZU9wZXJhdGlvbignZ2VuZXJhdGlvbicsIG5hbWUsIGZuKTtcbn1cbiJdfQ==
@@ -0,0 +1,39 @@
1
+ import { rag, retrieval, rerank, embedding } from './rag';
2
+ import { agent, tool, step } from './agent';
3
+ import { generation } from './generation';
4
+ import { evaluation } from './evaluation';
5
+ /**
6
+ * AI-native tracing API for LaikaTest SDK
7
+ *
8
+ * Provides semantic helpers for common AI workflows instead of low-level span API.
9
+ * All helpers automatically create properly named spans and add semantic attributes.
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * import { trace } from '@laikatest/sdk';
14
+ *
15
+ * // RAG pipeline
16
+ * const answer = await trace.rag('qa', async () => {
17
+ * const docs = await trace.retrieval('search', () => vectorDB.search(query));
18
+ * return await trace.generation('answer', () => llm.generate(docs));
19
+ * });
20
+ *
21
+ * // Agent workflow
22
+ * await trace.agent('assistant', async () => {
23
+ * const result = await trace.tool('calculator', () => calculate(x, y));
24
+ * return result;
25
+ * });
26
+ * ```
27
+ */
28
+ export declare const trace: {
29
+ rag: typeof rag;
30
+ retrieval: typeof retrieval;
31
+ rerank: typeof rerank;
32
+ embedding: typeof embedding;
33
+ agent: typeof agent;
34
+ tool: typeof tool;
35
+ step: typeof step;
36
+ generation: typeof generation;
37
+ evaluation: typeof evaluation;
38
+ };
39
+ export type { TraceCallback, TraceSyncCallback, OperationType } from './types';
@@ -0,0 +1,46 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.trace = void 0;
4
+ const rag_1 = require("./rag");
5
+ const agent_1 = require("./agent");
6
+ const generation_1 = require("./generation");
7
+ const evaluation_1 = require("./evaluation");
8
+ /**
9
+ * AI-native tracing API for LaikaTest SDK
10
+ *
11
+ * Provides semantic helpers for common AI workflows instead of low-level span API.
12
+ * All helpers automatically create properly named spans and add semantic attributes.
13
+ *
14
+ * @example
15
+ * ```typescript
16
+ * import { trace } from '@laikatest/sdk';
17
+ *
18
+ * // RAG pipeline
19
+ * const answer = await trace.rag('qa', async () => {
20
+ * const docs = await trace.retrieval('search', () => vectorDB.search(query));
21
+ * return await trace.generation('answer', () => llm.generate(docs));
22
+ * });
23
+ *
24
+ * // Agent workflow
25
+ * await trace.agent('assistant', async () => {
26
+ * const result = await trace.tool('calculator', () => calculate(x, y));
27
+ * return result;
28
+ * });
29
+ * ```
30
+ */
31
+ exports.trace = {
32
+ // RAG workflow
33
+ rag: rag_1.rag,
34
+ retrieval: rag_1.retrieval,
35
+ rerank: rag_1.rerank,
36
+ embedding: rag_1.embedding,
37
+ // Agent workflow
38
+ agent: agent_1.agent,
39
+ tool: agent_1.tool,
40
+ step: agent_1.step,
41
+ // LLM operations
42
+ generation: generation_1.generation,
43
+ // Evaluation
44
+ evaluation: evaluation_1.evaluation,
45
+ };
46
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhY2UvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsK0JBQTBEO0FBQzFELG1DQUE0QztBQUM1Qyw2Q0FBMEM7QUFDMUMsNkNBQTBDO0FBRTFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0dBc0JHO0FBQ1UsUUFBQSxLQUFLLEdBQUc7SUFDbkIsZUFBZTtJQUNmLEdBQUcsRUFBSCxTQUFHO0lBQ0gsU0FBUyxFQUFULGVBQVM7SUFDVCxNQUFNLEVBQU4sWUFBTTtJQUNOLFNBQVMsRUFBVCxlQUFTO0lBRVQsaUJBQWlCO0lBQ2pCLEtBQUssRUFBTCxhQUFLO0lBQ0wsSUFBSSxFQUFKLFlBQUk7SUFDSixJQUFJLEVBQUosWUFBSTtJQUVKLGlCQUFpQjtJQUNqQixVQUFVLEVBQVYsdUJBQVU7SUFFVixhQUFhO0lBQ2IsVUFBVSxFQUFWLHVCQUFVO0NBQ1gsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IHJhZywgcmV0cmlldmFsLCByZXJhbmssIGVtYmVkZGluZyB9IGZyb20gJy4vcmFnJztcbmltcG9ydCB7IGFnZW50LCB0b29sLCBzdGVwIH0gZnJvbSAnLi9hZ2VudCc7XG5pbXBvcnQgeyBnZW5lcmF0aW9uIH0gZnJvbSAnLi9nZW5lcmF0aW9uJztcbmltcG9ydCB7IGV2YWx1YXRpb24gfSBmcm9tICcuL2V2YWx1YXRpb24nO1xuXG4vKipcbiAqIEFJLW5hdGl2ZSB0cmFjaW5nIEFQSSBmb3IgTGFpa2FUZXN0IFNES1xuICpcbiAqIFByb3ZpZGVzIHNlbWFudGljIGhlbHBlcnMgZm9yIGNvbW1vbiBBSSB3b3JrZmxvd3MgaW5zdGVhZCBvZiBsb3ctbGV2ZWwgc3BhbiBBUEkuXG4gKiBBbGwgaGVscGVycyBhdXRvbWF0aWNhbGx5IGNyZWF0ZSBwcm9wZXJseSBuYW1lZCBzcGFucyBhbmQgYWRkIHNlbWFudGljIGF0dHJpYnV0ZXMuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGltcG9ydCB7IHRyYWNlIH0gZnJvbSAnQGxhaWthdGVzdC9zZGsnO1xuICpcbiAqIC8vIFJBRyBwaXBlbGluZVxuICogY29uc3QgYW5zd2VyID0gYXdhaXQgdHJhY2UucmFnKCdxYScsIGFzeW5jICgpID0+IHtcbiAqICAgY29uc3QgZG9jcyA9IGF3YWl0IHRyYWNlLnJldHJpZXZhbCgnc2VhcmNoJywgKCkgPT4gdmVjdG9yREIuc2VhcmNoKHF1ZXJ5KSk7XG4gKiAgIHJldHVybiBhd2FpdCB0cmFjZS5nZW5lcmF0aW9uKCdhbnN3ZXInLCAoKSA9PiBsbG0uZ2VuZXJhdGUoZG9jcykpO1xuICogfSk7XG4gKlxuICogLy8gQWdlbnQgd29ya2Zsb3dcbiAqIGF3YWl0IHRyYWNlLmFnZW50KCdhc3Npc3RhbnQnLCBhc3luYyAoKSA9PiB7XG4gKiAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRyYWNlLnRvb2woJ2NhbGN1bGF0b3InLCAoKSA9PiBjYWxjdWxhdGUoeCwgeSkpO1xuICogICByZXR1cm4gcmVzdWx0O1xuICogfSk7XG4gKiBgYGBcbiAqL1xuZXhwb3J0IGNvbnN0IHRyYWNlID0ge1xuICAvLyBSQUcgd29ya2Zsb3dcbiAgcmFnLFxuICByZXRyaWV2YWwsXG4gIHJlcmFuayxcbiAgZW1iZWRkaW5nLFxuXG4gIC8vIEFnZW50IHdvcmtmbG93XG4gIGFnZW50LFxuICB0b29sLFxuICBzdGVwLFxuXG4gIC8vIExMTSBvcGVyYXRpb25zXG4gIGdlbmVyYXRpb24sXG5cbiAgLy8gRXZhbHVhdGlvblxuICBldmFsdWF0aW9uLFxufTtcblxuLy8gUmUtZXhwb3J0IHR5cGVzXG5leHBvcnQgdHlwZSB7IFRyYWNlQ2FsbGJhY2ssIFRyYWNlU3luY0NhbGxiYWNrLCBPcGVyYXRpb25UeXBlIH0gZnJvbSAnLi90eXBlcyc7XG4iXX0=
@@ -0,0 +1,35 @@
1
+ /**
2
+ * Trace a RAG (Retrieval-Augmented Generation) pipeline
3
+ * @param name - Pipeline name
4
+ * @param fn - Async callback function
5
+ * @returns Promise resolving to callback result
6
+ * @example
7
+ * ```typescript
8
+ * const answer = await trace.rag('qa-pipeline', async () => {
9
+ * const docs = await trace.retrieval('search', () => vectorDB.search(query));
10
+ * return await trace.generation('answer', () => llm.generate(docs));
11
+ * });
12
+ * ```
13
+ */
14
+ export declare function rag<T>(name: string, fn: () => Promise<T>): Promise<T>;
15
+ /**
16
+ * Trace document retrieval operation
17
+ * @param name - Retrieval step name
18
+ * @param fn - Async callback function
19
+ * @returns Promise resolving to callback result
20
+ */
21
+ export declare function retrieval<T>(name: string, fn: () => Promise<T>): Promise<T>;
22
+ /**
23
+ * Trace document reranking operation
24
+ * @param name - Reranking step name
25
+ * @param fn - Async callback function
26
+ * @returns Promise resolving to callback result
27
+ */
28
+ export declare function rerank<T>(name: string, fn: () => Promise<T>): Promise<T>;
29
+ /**
30
+ * Trace embedding generation
31
+ * @param name - Embedding step name
32
+ * @param fn - Async callback function
33
+ * @returns Promise resolving to callback result
34
+ */
35
+ export declare function embedding<T>(name: string, fn: () => Promise<T>): Promise<T>;
@@ -0,0 +1,51 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.rag = rag;
4
+ exports.retrieval = retrieval;
5
+ exports.rerank = rerank;
6
+ exports.embedding = embedding;
7
+ const core_1 = require("./core");
8
+ /**
9
+ * Trace a RAG (Retrieval-Augmented Generation) pipeline
10
+ * @param name - Pipeline name
11
+ * @param fn - Async callback function
12
+ * @returns Promise resolving to callback result
13
+ * @example
14
+ * ```typescript
15
+ * const answer = await trace.rag('qa-pipeline', async () => {
16
+ * const docs = await trace.retrieval('search', () => vectorDB.search(query));
17
+ * return await trace.generation('answer', () => llm.generate(docs));
18
+ * });
19
+ * ```
20
+ */
21
+ async function rag(name, fn) {
22
+ return (0, core_1.traceOperation)('rag', name, fn);
23
+ }
24
+ /**
25
+ * Trace document retrieval operation
26
+ * @param name - Retrieval step name
27
+ * @param fn - Async callback function
28
+ * @returns Promise resolving to callback result
29
+ */
30
+ async function retrieval(name, fn) {
31
+ return (0, core_1.traceOperation)('retrieval', name, fn);
32
+ }
33
+ /**
34
+ * Trace document reranking operation
35
+ * @param name - Reranking step name
36
+ * @param fn - Async callback function
37
+ * @returns Promise resolving to callback result
38
+ */
39
+ async function rerank(name, fn) {
40
+ return (0, core_1.traceOperation)('rerank', name, fn);
41
+ }
42
+ /**
43
+ * Trace embedding generation
44
+ * @param name - Embedding step name
45
+ * @param fn - Async callback function
46
+ * @returns Promise resolving to callback result
47
+ */
48
+ async function embedding(name, fn) {
49
+ return (0, core_1.traceOperation)('embedding', name, fn);
50
+ }
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmFnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3RyYWNlL3JhZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQWVBLGtCQUVDO0FBUUQsOEJBRUM7QUFRRCx3QkFFQztBQVFELDhCQUVDO0FBL0NELGlDQUF3QztBQUV4Qzs7Ozs7Ozs7Ozs7O0dBWUc7QUFDSSxLQUFLLFVBQVUsR0FBRyxDQUFJLElBQVksRUFBRSxFQUFvQjtJQUM3RCxPQUFPLElBQUEscUJBQWMsRUFBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRDs7Ozs7R0FLRztBQUNJLEtBQUssVUFBVSxTQUFTLENBQUksSUFBWSxFQUFFLEVBQW9CO0lBQ25FLE9BQU8sSUFBQSxxQkFBYyxFQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDL0MsQ0FBQztBQUVEOzs7OztHQUtHO0FBQ0ksS0FBSyxVQUFVLE1BQU0sQ0FBSSxJQUFZLEVBQUUsRUFBb0I7SUFDaEUsT0FBTyxJQUFBLHFCQUFjLEVBQUMsUUFBUSxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztBQUM1QyxDQUFDO0FBRUQ7Ozs7O0dBS0c7QUFDSSxLQUFLLFVBQVUsU0FBUyxDQUFJLElBQVksRUFBRSxFQUFvQjtJQUNuRSxPQUFPLElBQUEscUJBQWMsRUFBQyxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0cmFjZU9wZXJhdGlvbiB9IGZyb20gJy4vY29yZSc7XG5cbi8qKlxuICogVHJhY2UgYSBSQUcgKFJldHJpZXZhbC1BdWdtZW50ZWQgR2VuZXJhdGlvbikgcGlwZWxpbmVcbiAqIEBwYXJhbSBuYW1lIC0gUGlwZWxpbmUgbmFtZVxuICogQHBhcmFtIGZuIC0gQXN5bmMgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNhbGxiYWNrIHJlc3VsdFxuICogQGV4YW1wbGVcbiAqIGBgYHR5cGVzY3JpcHRcbiAqIGNvbnN0IGFuc3dlciA9IGF3YWl0IHRyYWNlLnJhZygncWEtcGlwZWxpbmUnLCBhc3luYyAoKSA9PiB7XG4gKiAgIGNvbnN0IGRvY3MgPSBhd2FpdCB0cmFjZS5yZXRyaWV2YWwoJ3NlYXJjaCcsICgpID0+IHZlY3RvckRCLnNlYXJjaChxdWVyeSkpO1xuICogICByZXR1cm4gYXdhaXQgdHJhY2UuZ2VuZXJhdGlvbignYW5zd2VyJywgKCkgPT4gbGxtLmdlbmVyYXRlKGRvY3MpKTtcbiAqIH0pO1xuICogYGBgXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiByYWc8VD4obmFtZTogc3RyaW5nLCBmbjogKCkgPT4gUHJvbWlzZTxUPik6IFByb21pc2U8VD4ge1xuICByZXR1cm4gdHJhY2VPcGVyYXRpb24oJ3JhZycsIG5hbWUsIGZuKTtcbn1cblxuLyoqXG4gKiBUcmFjZSBkb2N1bWVudCByZXRyaWV2YWwgb3BlcmF0aW9uXG4gKiBAcGFyYW0gbmFtZSAtIFJldHJpZXZhbCBzdGVwIG5hbWVcbiAqIEBwYXJhbSBmbiAtIEFzeW5jIGNhbGxiYWNrIGZ1bmN0aW9uXG4gKiBAcmV0dXJucyBQcm9taXNlIHJlc29sdmluZyB0byBjYWxsYmFjayByZXN1bHRcbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHJldHJpZXZhbDxUPihuYW1lOiBzdHJpbmcsIGZuOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPiB7XG4gIHJldHVybiB0cmFjZU9wZXJhdGlvbigncmV0cmlldmFsJywgbmFtZSwgZm4pO1xufVxuXG4vKipcbiAqIFRyYWNlIGRvY3VtZW50IHJlcmFua2luZyBvcGVyYXRpb25cbiAqIEBwYXJhbSBuYW1lIC0gUmVyYW5raW5nIHN0ZXAgbmFtZVxuICogQHBhcmFtIGZuIC0gQXN5bmMgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNhbGxiYWNrIHJlc3VsdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gcmVyYW5rPFQ+KG5hbWU6IHN0cmluZywgZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIHRyYWNlT3BlcmF0aW9uKCdyZXJhbmsnLCBuYW1lLCBmbik7XG59XG5cbi8qKlxuICogVHJhY2UgZW1iZWRkaW5nIGdlbmVyYXRpb25cbiAqIEBwYXJhbSBuYW1lIC0gRW1iZWRkaW5nIHN0ZXAgbmFtZVxuICogQHBhcmFtIGZuIC0gQXN5bmMgY2FsbGJhY2sgZnVuY3Rpb25cbiAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGNhbGxiYWNrIHJlc3VsdFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZW1iZWRkaW5nPFQ+KG5hbWU6IHN0cmluZywgZm46ICgpID0+IFByb21pc2U8VD4pOiBQcm9taXNlPFQ+IHtcbiAgcmV0dXJuIHRyYWNlT3BlcmF0aW9uKCdlbWJlZGRpbmcnLCBuYW1lLCBmbik7XG59XG4iXX0=
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Callback function for trace operations
3
+ */
4
+ export type TraceCallback<T> = () => Promise<T>;
5
+ /**
6
+ * Synchronous callback function for trace operations
7
+ */
8
+ export type TraceSyncCallback<T> = () => T;
9
+ /**
10
+ * Operation types for semantic tracing
11
+ */
12
+ export type OperationType = 'rag' | 'retrieval' | 'rerank' | 'embedding' | 'agent' | 'tool' | 'step' | 'generation' | 'evaluation';
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHJhY2UvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRyYWNlIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IHR5cGUgVHJhY2VDYWxsYmFjazxUPiA9ICgpID0+IFByb21pc2U8VD47XG5cbi8qKlxuICogU3luY2hyb25vdXMgY2FsbGJhY2sgZnVuY3Rpb24gZm9yIHRyYWNlIG9wZXJhdGlvbnNcbiAqL1xuZXhwb3J0IHR5cGUgVHJhY2VTeW5jQ2FsbGJhY2s8VD4gPSAoKSA9PiBUO1xuXG4vKipcbiAqIE9wZXJhdGlvbiB0eXBlcyBmb3Igc2VtYW50aWMgdHJhY2luZ1xuICovXG5leHBvcnQgdHlwZSBPcGVyYXRpb25UeXBlID1cbiAgfCAncmFnJ1xuICB8ICdyZXRyaWV2YWwnXG4gIHwgJ3JlcmFuaydcbiAgfCAnZW1iZWRkaW5nJ1xuICB8ICdhZ2VudCdcbiAgfCAndG9vbCdcbiAgfCAnc3RlcCdcbiAgfCAnZ2VuZXJhdGlvbidcbiAgfCAnZXZhbHVhdGlvbic7XG4iXX0=
package/dist/types.d.ts CHANGED
@@ -11,7 +11,7 @@ export interface LaikaConfig {
11
11
  tracing?: boolean;
12
12
  /** Enable A/B testing client. Default: true */
13
13
  experiments?: boolean;
14
- /** OTLP endpoint URL. Default: https://api.laikatest.com/otel/v1/traces */
14
+ /** OTLP endpoint URL. If not set, derived from baseUrl + '/otel/v1/traces' */
15
15
  endpoint?: string;
16
16
  /** Capture prompt/response content. Default: false (privacy-first) */
17
17
  captureContent?: boolean;
@@ -27,7 +27,7 @@ export interface LaikaConfig {
27
27
  getUserId?: () => string;
28
28
  /** Default properties to attach to all spans */
29
29
  defaultProperties?: Record<string, string | number | boolean>;
30
- /** API base URL. Default: https://api.laikatest.com */
30
+ /** API base URL. Also used to derive OTLP endpoint if not set. Default: https://api.laikatest.com */
31
31
  baseUrl?: string;
32
32
  /** Request timeout in milliseconds. Default: 10000 */
33
33
  timeout?: number;
package/dist/types.js CHANGED
@@ -1,3 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCBjb25maWd1cmF0aW9uIGZvciBMYWlrYVRlc3QgU0RLLlxuICogQ29tYmluZXMgdHJhY2luZyAob2JzZXJ2YWJpbGl0eSkgYW5kIGV4cGVyaW1lbnRhdGlvbiAoQS9CIHRlc3RpbmcpIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWlrYUNvbmZpZyB7XG4gIC8qKiBBUEkga2V5IGZvciBMYWlrYSBhdXRoZW50aWNhdGlvbiAocmVxdWlyZWQpICovXG4gIGFwaUtleTogc3RyaW5nO1xuXG4gIC8qKiBTZXJ2aWNlIG5hbWUgZm9yIHJlc291cmNlIGlkZW50aWZpY2F0aW9uIChyZXF1aXJlZCkgKi9cbiAgc2VydmljZU5hbWU6IHN0cmluZztcblxuICAvLyBGZWF0dXJlIHRvZ2dsZXNcbiAgLyoqIEVuYWJsZSBPcGVuVGVsZW1ldHJ5IHRyYWNpbmcuIERlZmF1bHQ6IHRydWUgKi9cbiAgdHJhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqIEVuYWJsZSBBL0IgdGVzdGluZyBjbGllbnQuIERlZmF1bHQ6IHRydWUgKi9cbiAgZXhwZXJpbWVudHM/OiBib29sZWFuO1xuXG4gIC8vIFRyYWNpbmcgb3B0aW9ucyAocGFzc2VkIHRvIEBsYWlrYXRlc3QvYXV0by1vdGVsKVxuICAvKiogT1RMUCBlbmRwb2ludCBVUkwuIERlZmF1bHQ6IGh0dHBzOi8vYXBpLmxhaWthdGVzdC5jb20vb3RlbC92MS90cmFjZXMgKi9cbiAgZW5kcG9pbnQ/OiBzdHJpbmc7XG5cbiAgLyoqIENhcHR1cmUgcHJvbXB0L3Jlc3BvbnNlIGNvbnRlbnQuIERlZmF1bHQ6IGZhbHNlIChwcml2YWN5LWZpcnN0KSAqL1xuICBjYXB0dXJlQ29udGVudD86IGJvb2xlYW47XG5cbiAgLyoqIEVuYWJsZSBkZWJ1ZyBsb2dnaW5nLiBEZWZhdWx0OiBmYWxzZSAqL1xuICBkZWJ1Zz86IGJvb2xlYW47XG5cbiAgLy8gU2hhcmVkIGNvbnRleHQgb3B0aW9uc1xuICAvKiogU3RhdGljIHNlc3Npb24gSUQgZm9yIGdyb3VwaW5nIHJlbGF0ZWQgdHJhY2VzICovXG4gIHNlc3Npb25JZD86IHN0cmluZztcblxuICAvKiogRHluYW1pYyBzZXNzaW9uIElEIGdldHRlciBmdW5jdGlvbiAqL1xuICBnZXRTZXNzaW9uSWQ/OiAoKSA9PiBzdHJpbmc7XG5cbiAgLyoqIFN0YXRpYyB1c2VyIElEIGZvciBwZXItdXNlciBhbmFseXRpY3MgKi9cbiAgdXNlcklkPzogc3RyaW5nO1xuXG4gIC8qKiBEeW5hbWljIHVzZXIgSUQgZ2V0dGVyIGZ1bmN0aW9uICovXG4gIGdldFVzZXJJZD86ICgpID0+IHN0cmluZztcblxuICAvKiogRGVmYXVsdCBwcm9wZXJ0aWVzIHRvIGF0dGFjaCB0byBhbGwgc3BhbnMgKi9cbiAgZGVmYXVsdFByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPjtcblxuICAvLyBDbGllbnQgb3B0aW9ucyAocGFzc2VkIHRvIEBsYWlrYXRlc3QvY2xpZW50KVxuICAvKiogQVBJIGJhc2UgVVJMLiBEZWZhdWx0OiBodHRwczovL2FwaS5sYWlrYXRlc3QuY29tICovXG4gIGJhc2VVcmw/OiBzdHJpbmc7XG5cbiAgLyoqIFJlcXVlc3QgdGltZW91dCBpbiBtaWxsaXNlY29uZHMuIERlZmF1bHQ6IDEwMDAwICovXG4gIHRpbWVvdXQ/OiBudW1iZXI7XG5cbiAgLyoqIEVuYWJsZSBwcm9tcHQgY2FjaGluZy4gRGVmYXVsdDogdHJ1ZSAqL1xuICBjYWNoZUVuYWJsZWQ/OiBib29sZWFuO1xuXG4gIC8qKiBDYWNoZSBUVEwgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0OiAzMCAqIDYwICogMTAwMCAoMzAgbWludXRlcykgKi9cbiAgY2FjaGVUVEw/OiBudW1iZXI7XG59XG4iXX0=
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogVW5pZmllZCBjb25maWd1cmF0aW9uIGZvciBMYWlrYVRlc3QgU0RLLlxuICogQ29tYmluZXMgdHJhY2luZyAob2JzZXJ2YWJpbGl0eSkgYW5kIGV4cGVyaW1lbnRhdGlvbiAoQS9CIHRlc3RpbmcpIGNvbmZpZy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBMYWlrYUNvbmZpZyB7XG4gIC8qKiBBUEkga2V5IGZvciBMYWlrYSBhdXRoZW50aWNhdGlvbiAocmVxdWlyZWQpICovXG4gIGFwaUtleTogc3RyaW5nO1xuXG4gIC8qKiBTZXJ2aWNlIG5hbWUgZm9yIHJlc291cmNlIGlkZW50aWZpY2F0aW9uIChyZXF1aXJlZCkgKi9cbiAgc2VydmljZU5hbWU6IHN0cmluZztcblxuICAvLyBGZWF0dXJlIHRvZ2dsZXNcbiAgLyoqIEVuYWJsZSBPcGVuVGVsZW1ldHJ5IHRyYWNpbmcuIERlZmF1bHQ6IHRydWUgKi9cbiAgdHJhY2luZz86IGJvb2xlYW47XG5cbiAgLyoqIEVuYWJsZSBBL0IgdGVzdGluZyBjbGllbnQuIERlZmF1bHQ6IHRydWUgKi9cbiAgZXhwZXJpbWVudHM/OiBib29sZWFuO1xuXG4gIC8vIFRyYWNpbmcgb3B0aW9ucyAocGFzc2VkIHRvIEBsYWlrYXRlc3QvYXV0by1vdGVsKVxuICAvKiogT1RMUCBlbmRwb2ludCBVUkwuIElmIG5vdCBzZXQsIGRlcml2ZWQgZnJvbSBiYXNlVXJsICsgJy9vdGVsL3YxL3RyYWNlcycgKi9cbiAgZW5kcG9pbnQ/OiBzdHJpbmc7XG5cbiAgLyoqIENhcHR1cmUgcHJvbXB0L3Jlc3BvbnNlIGNvbnRlbnQuIERlZmF1bHQ6IGZhbHNlIChwcml2YWN5LWZpcnN0KSAqL1xuICBjYXB0dXJlQ29udGVudD86IGJvb2xlYW47XG5cbiAgLyoqIEVuYWJsZSBkZWJ1ZyBsb2dnaW5nLiBEZWZhdWx0OiBmYWxzZSAqL1xuICBkZWJ1Zz86IGJvb2xlYW47XG5cbiAgLy8gU2hhcmVkIGNvbnRleHQgb3B0aW9uc1xuICAvKiogU3RhdGljIHNlc3Npb24gSUQgZm9yIGdyb3VwaW5nIHJlbGF0ZWQgdHJhY2VzICovXG4gIHNlc3Npb25JZD86IHN0cmluZztcblxuICAvKiogRHluYW1pYyBzZXNzaW9uIElEIGdldHRlciBmdW5jdGlvbiAqL1xuICBnZXRTZXNzaW9uSWQ/OiAoKSA9PiBzdHJpbmc7XG5cbiAgLyoqIFN0YXRpYyB1c2VyIElEIGZvciBwZXItdXNlciBhbmFseXRpY3MgKi9cbiAgdXNlcklkPzogc3RyaW5nO1xuXG4gIC8qKiBEeW5hbWljIHVzZXIgSUQgZ2V0dGVyIGZ1bmN0aW9uICovXG4gIGdldFVzZXJJZD86ICgpID0+IHN0cmluZztcblxuICAvKiogRGVmYXVsdCBwcm9wZXJ0aWVzIHRvIGF0dGFjaCB0byBhbGwgc3BhbnMgKi9cbiAgZGVmYXVsdFByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmcgfCBudW1iZXIgfCBib29sZWFuPjtcblxuICAvLyBDbGllbnQgb3B0aW9ucyAocGFzc2VkIHRvIEBsYWlrYXRlc3QvY2xpZW50KVxuICAvKiogQVBJIGJhc2UgVVJMLiBBbHNvIHVzZWQgdG8gZGVyaXZlIE9UTFAgZW5kcG9pbnQgaWYgbm90IHNldC4gRGVmYXVsdDogaHR0cHM6Ly9hcGkubGFpa2F0ZXN0LmNvbSAqL1xuICBiYXNlVXJsPzogc3RyaW5nO1xuXG4gIC8qKiBSZXF1ZXN0IHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzLiBEZWZhdWx0OiAxMDAwMCAqL1xuICB0aW1lb3V0PzogbnVtYmVyO1xuXG4gIC8qKiBFbmFibGUgcHJvbXB0IGNhY2hpbmcuIERlZmF1bHQ6IHRydWUgKi9cbiAgY2FjaGVFbmFibGVkPzogYm9vbGVhbjtcblxuICAvKiogQ2FjaGUgVFRMIGluIG1pbGxpc2Vjb25kcy4gRGVmYXVsdDogMzAgKiA2MCAqIDEwMDAgKDMwIG1pbnV0ZXMpICovXG4gIGNhY2hlVFRMPzogbnVtYmVyO1xufVxuIl19
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@laikatest/sdk",
3
- "version": "0.2.0",
3
+ "version": "0.2.2",
4
4
  "description": "Unified LaikaTest SDK for tracing and A/B testing",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",