@traceroot-ai/traceroot 0.1.5 → 0.1.7

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.
@@ -0,0 +1,14 @@
1
+ import { Span } from '@opentelemetry/api';
2
+ import { ObserveOptions, SpanType, TokenUsage } from './types';
3
+ export declare const SPAN_KIND_MAP: Record<SpanType, string>;
4
+ export declare function trySerialize(value: unknown): string | undefined;
5
+ export declare function applyModel(span: Span, model?: string, modelParameters?: Record<string, unknown>): void;
6
+ export declare function applyUsage(span: Span, usage: TokenUsage): void;
7
+ export declare function applyIO(span: Span, io: {
8
+ input?: unknown;
9
+ output?: unknown;
10
+ }): void;
11
+ /** Moved verbatim from observe.ts:_applyCommonAttributes (kind, ambient ctx,
12
+ * session/user, input-from-args, metadata, tags, git source). */
13
+ export declare function applyCommonAttributes(span: Span, options: ObserveOptions, args: unknown[]): void;
14
+ //# sourceMappingURL=attributes.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributes.d.ts","sourceRoot":"","sources":["../src/attributes.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAW,MAAM,oBAAoB,CAAC;AAsBnD,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAK/D,eAAO,MAAM,aAAa,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,CAKlD,CAAC;AAEF,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAM/D;AAED,wBAAgB,UAAU,CACxB,IAAI,EAAE,IAAI,EACV,KAAK,CAAC,EAAE,MAAM,EACd,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACxC,IAAI,CASN;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAe9D;AAED,wBAAgB,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CASnF;AAED;kEACkE;AAClE,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,cAAc,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CA4BhG"}
@@ -0,0 +1,110 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.SPAN_KIND_MAP = void 0;
4
+ exports.trySerialize = trySerialize;
5
+ exports.applyModel = applyModel;
6
+ exports.applyUsage = applyUsage;
7
+ exports.applyIO = applyIO;
8
+ exports.applyCommonAttributes = applyCommonAttributes;
9
+ // src/attributes.ts — native field → OTel attribute mapping (single source of truth)
10
+ const api_1 = require("@opentelemetry/api");
11
+ const openinference_core_1 = require("@arizeai/openinference-core");
12
+ const openinference_semantic_conventions_1 = require("@arizeai/openinference-semantic-conventions");
13
+ const constants_1 = require("./constants");
14
+ const git_context_1 = require("./git_context");
15
+ const OPENINFERENCE_SPAN_KIND = openinference_semantic_conventions_1.SemanticConventions.OPENINFERENCE_SPAN_KIND;
16
+ exports.SPAN_KIND_MAP = {
17
+ agent: 'AGENT',
18
+ tool: 'TOOL',
19
+ llm: 'LLM',
20
+ span: 'CHAIN',
21
+ };
22
+ function trySerialize(value) {
23
+ try {
24
+ return JSON.stringify(value);
25
+ }
26
+ catch {
27
+ return undefined;
28
+ }
29
+ }
30
+ function applyModel(span, model, modelParameters) {
31
+ if (model !== undefined) {
32
+ span.setAttribute(constants_1.OI_LLM_MODEL_NAME, model); // read by backend
33
+ span.setAttribute(constants_1.LLM_MODEL, model); // back-compat
34
+ }
35
+ if (modelParameters !== undefined) {
36
+ const s = trySerialize(modelParameters);
37
+ if (s !== undefined)
38
+ span.setAttribute(constants_1.LLM_MODEL_PARAMETERS, s);
39
+ }
40
+ }
41
+ function applyUsage(span, usage) {
42
+ const input = usage.input ?? 0;
43
+ const cacheRead = usage.cacheRead ?? 0;
44
+ const cacheWrite = usage.cacheWrite ?? 0;
45
+ const output = usage.output ?? 0;
46
+ const prompt = input + cacheRead + cacheWrite; // GROSS
47
+ if (prompt > 0)
48
+ span.setAttribute(constants_1.OI_LLM_TOKEN_COUNT_PROMPT, prompt);
49
+ if (output > 0)
50
+ span.setAttribute(constants_1.OI_LLM_TOKEN_COUNT_COMPLETION, output);
51
+ const total = usage.total ?? prompt + output;
52
+ if (total > 0)
53
+ span.setAttribute(constants_1.OI_LLM_TOKEN_COUNT_TOTAL, total);
54
+ if (cacheRead > 0)
55
+ span.setAttribute(constants_1.OI_LLM_TOKEN_COUNT_CACHE_READ, cacheRead);
56
+ if (cacheWrite > 0)
57
+ span.setAttribute(constants_1.OI_LLM_TOKEN_COUNT_CACHE_WRITE, cacheWrite);
58
+ // Preserve the full object (incl. any custom keys) as a blob for completeness.
59
+ const blob = trySerialize(usage);
60
+ if (blob !== undefined)
61
+ span.setAttribute(constants_1.LLM_USAGE, blob);
62
+ }
63
+ function applyIO(span, io) {
64
+ if (io.input !== undefined) {
65
+ const s = trySerialize(io.input);
66
+ if (s !== undefined)
67
+ span.setAttribute(openinference_semantic_conventions_1.INPUT_VALUE, s);
68
+ }
69
+ if (io.output !== undefined) {
70
+ const s = trySerialize(io.output);
71
+ if (s !== undefined)
72
+ span.setAttribute(openinference_semantic_conventions_1.OUTPUT_VALUE, s);
73
+ }
74
+ }
75
+ /** Moved verbatim from observe.ts:_applyCommonAttributes (kind, ambient ctx,
76
+ * session/user, input-from-args, metadata, tags, git source). */
77
+ function applyCommonAttributes(span, options, args) {
78
+ span.setAttribute(OPENINFERENCE_SPAN_KIND, exports.SPAN_KIND_MAP[options.type ?? 'span']);
79
+ const ctxAttrs = (0, openinference_core_1.getAttributesFromContext)(api_1.context.active());
80
+ if (ctxAttrs && Object.keys(ctxAttrs).length > 0)
81
+ span.setAttributes(ctxAttrs);
82
+ if (options.sessionId !== undefined)
83
+ span.setAttribute(openinference_semantic_conventions_1.SESSION_ID, options.sessionId);
84
+ if (options.userId !== undefined)
85
+ span.setAttribute(openinference_semantic_conventions_1.USER_ID, options.userId);
86
+ if (options.captureInput !== false && args.length > 0) {
87
+ const inputValue = args.length === 1 ? args[0] : args;
88
+ const s = trySerialize(inputValue);
89
+ if (s !== undefined)
90
+ span.setAttribute(openinference_semantic_conventions_1.INPUT_VALUE, s);
91
+ }
92
+ if (options.metadata !== undefined) {
93
+ const s = trySerialize(options.metadata);
94
+ if (s !== undefined)
95
+ span.setAttribute(constants_1.SPAN_METADATA, s);
96
+ }
97
+ if (options.tags !== undefined) {
98
+ const s = trySerialize(options.tags);
99
+ if (s !== undefined)
100
+ span.setAttribute(constants_1.SPAN_TAGS, s);
101
+ }
102
+ const loc = (0, git_context_1.captureSourceLocation)();
103
+ if (loc.file !== undefined)
104
+ span.setAttribute('traceroot.git.source_file', loc.file);
105
+ if (loc.line !== undefined)
106
+ span.setAttribute('traceroot.git.source_line', loc.line);
107
+ if (loc.functionName !== undefined)
108
+ span.setAttribute('traceroot.git.source_function', loc.functionName);
109
+ }
110
+ //# sourceMappingURL=attributes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attributes.js","sourceRoot":"","sources":["../src/attributes.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ export declare const GITHUB_REPOSITORY = "GITHUB_REPOSITORY";
2
+ export declare const GITHUB_SHA = "GITHUB_SHA";
1
3
  export declare const DEFAULT_FLUSH_INTERVAL_SEC = 5;
2
4
  export declare const DEFAULT_FLUSH_AT = 100;
3
5
  export declare const DEFAULT_TIMEOUT_SEC = 30;
@@ -11,6 +13,9 @@ export declare const TOOL_NAME = "tool.name";
11
13
  export declare const OI_LLM_MODEL_NAME = "llm.model_name";
12
14
  export declare const OI_LLM_TOKEN_COUNT_PROMPT = "llm.token_count.prompt";
13
15
  export declare const OI_LLM_TOKEN_COUNT_COMPLETION = "llm.token_count.completion";
16
+ export declare const OI_LLM_TOKEN_COUNT_TOTAL = "llm.token_count.total";
17
+ export declare const OI_LLM_TOKEN_COUNT_CACHE_READ = "llm.token_count.prompt_details.cache_read";
18
+ export declare const OI_LLM_TOKEN_COUNT_CACHE_WRITE = "llm.token_count.prompt_details.cache_write";
14
19
  export declare const LLM_MODEL = "traceroot.llm.model";
15
20
  export declare const LLM_MODEL_PARAMETERS = "traceroot.llm.model_parameters";
16
21
  export declare const LLM_USAGE = "traceroot.llm.usage";
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAGtC,eAAO,MAAM,YAAY,4BAA4B,CAAC;AACtD,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAC5C,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAC9C,eAAO,MAAM,aAAa,4BAA4B,CAAC;AACvD,eAAO,MAAM,SAAS,wBAAwB,CAAC;AAC/C,eAAO,MAAM,UAAU,eAAe,CAAC;AACvC,eAAO,MAAM,SAAS,cAAc,CAAC;AAGrC,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAClD,eAAO,MAAM,yBAAyB,2BAA2B,CAAC;AAClE,eAAO,MAAM,6BAA6B,+BAA+B,CAAC;AAC1E,eAAO,MAAM,SAAS,wBAAwB,CAAC;AAC/C,eAAO,MAAM,oBAAoB,mCAAmC,CAAC;AACrE,eAAO,MAAM,SAAS,wBAAwB,CAAC;AAC/C,eAAO,MAAM,UAAU,yBAAyB,CAAC;AAGjD,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAC1C,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAChD,eAAO,MAAM,cAAc,6BAA6B,CAAC;AACzD,eAAO,MAAM,UAAU,yBAAyB,CAAC;AAEjD;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;CA6BjB,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":"AAGA,eAAO,MAAM,iBAAiB,sBAAsB,CAAC;AACrD,eAAO,MAAM,UAAU,eAAe,CAAC;AAGvC,eAAO,MAAM,0BAA0B,IAAI,CAAC;AAC5C,eAAO,MAAM,gBAAgB,MAAM,CAAC;AACpC,eAAO,MAAM,mBAAmB,KAAK,CAAC;AAGtC,eAAO,MAAM,YAAY,4BAA4B,CAAC;AACtD,eAAO,MAAM,cAAc,gBAAgB,CAAC;AAC5C,eAAO,MAAM,eAAe,iBAAiB,CAAC;AAC9C,eAAO,MAAM,aAAa,4BAA4B,CAAC;AACvD,eAAO,MAAM,SAAS,wBAAwB,CAAC;AAC/C,eAAO,MAAM,UAAU,eAAe,CAAC;AACvC,eAAO,MAAM,SAAS,cAAc,CAAC;AAGrC,eAAO,MAAM,iBAAiB,mBAAmB,CAAC;AAClD,eAAO,MAAM,yBAAyB,2BAA2B,CAAC;AAClE,eAAO,MAAM,6BAA6B,+BAA+B,CAAC;AAC1E,eAAO,MAAM,wBAAwB,0BAA0B,CAAC;AAChE,eAAO,MAAM,6BAA6B,8CAA8C,CAAC;AACzF,eAAO,MAAM,8BAA8B,+CAA+C,CAAC;AAC3F,eAAO,MAAM,SAAS,wBAAwB,CAAC;AAC/C,eAAO,MAAM,oBAAoB,mCAAmC,CAAC;AACrE,eAAO,MAAM,SAAS,wBAAwB,CAAC;AAC/C,eAAO,MAAM,UAAU,yBAAyB,CAAC;AAGjD,eAAO,MAAM,gBAAgB,YAAY,CAAC;AAC1C,eAAO,MAAM,mBAAmB,eAAe,CAAC;AAChD,eAAO,MAAM,cAAc,6BAA6B,CAAC;AACzD,eAAO,MAAM,UAAU,yBAAyB,CAAC;AAEjD;;;;;;;GAOG;AACH,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;CA6BjB,CAAC"}
package/dist/constants.js CHANGED
@@ -1,7 +1,10 @@
1
1
  "use strict";
2
2
  // src/constants.ts — TraceRoot-specific span attribute keys and SDK defaults
3
3
  Object.defineProperty(exports, "__esModule", { value: true });
4
- exports.SpanAttributes = exports.TRACE_TAGS = exports.TRACE_METADATA = exports.OI_TRACE_SESSION_ID = exports.OI_TRACE_USER_ID = exports.LLM_PROMPT = exports.LLM_USAGE = exports.LLM_MODEL_PARAMETERS = exports.LLM_MODEL = exports.OI_LLM_TOKEN_COUNT_COMPLETION = exports.OI_LLM_TOKEN_COUNT_PROMPT = exports.OI_LLM_MODEL_NAME = exports.TOOL_NAME = exports.AGENT_NAME = exports.SPAN_TAGS = exports.SPAN_METADATA = exports.OI_OUTPUT_VALUE = exports.OI_INPUT_VALUE = exports.OI_SPAN_KIND = exports.DEFAULT_TIMEOUT_SEC = exports.DEFAULT_FLUSH_AT = exports.DEFAULT_FLUSH_INTERVAL_SEC = void 0;
4
+ exports.SpanAttributes = exports.TRACE_TAGS = exports.TRACE_METADATA = exports.OI_TRACE_SESSION_ID = exports.OI_TRACE_USER_ID = exports.LLM_PROMPT = exports.LLM_USAGE = exports.LLM_MODEL_PARAMETERS = exports.LLM_MODEL = exports.OI_LLM_TOKEN_COUNT_CACHE_WRITE = exports.OI_LLM_TOKEN_COUNT_CACHE_READ = exports.OI_LLM_TOKEN_COUNT_TOTAL = exports.OI_LLM_TOKEN_COUNT_COMPLETION = exports.OI_LLM_TOKEN_COUNT_PROMPT = exports.OI_LLM_MODEL_NAME = exports.TOOL_NAME = exports.AGENT_NAME = exports.SPAN_TAGS = exports.SPAN_METADATA = exports.OI_OUTPUT_VALUE = exports.OI_INPUT_VALUE = exports.OI_SPAN_KIND = exports.DEFAULT_TIMEOUT_SEC = exports.DEFAULT_FLUSH_AT = exports.DEFAULT_FLUSH_INTERVAL_SEC = exports.GITHUB_SHA = exports.GITHUB_REPOSITORY = void 0;
5
+ // GitHub Actions environment variable names used for git-context harvesting.
6
+ exports.GITHUB_REPOSITORY = 'GITHUB_REPOSITORY';
7
+ exports.GITHUB_SHA = 'GITHUB_SHA';
5
8
  // Flush/batch defaults — mirror traceroot-py/traceroot/constants.py
6
9
  exports.DEFAULT_FLUSH_INTERVAL_SEC = 5; // seconds → BatchSpanProcessor scheduledDelayMillis (×1000)
7
10
  exports.DEFAULT_FLUSH_AT = 100; // BatchSpanProcessor maxExportBatchSize
@@ -18,6 +21,9 @@ exports.TOOL_NAME = 'tool.name';
18
21
  exports.OI_LLM_MODEL_NAME = 'llm.model_name';
19
22
  exports.OI_LLM_TOKEN_COUNT_PROMPT = 'llm.token_count.prompt';
20
23
  exports.OI_LLM_TOKEN_COUNT_COMPLETION = 'llm.token_count.completion';
24
+ exports.OI_LLM_TOKEN_COUNT_TOTAL = 'llm.token_count.total';
25
+ exports.OI_LLM_TOKEN_COUNT_CACHE_READ = 'llm.token_count.prompt_details.cache_read';
26
+ exports.OI_LLM_TOKEN_COUNT_CACHE_WRITE = 'llm.token_count.prompt_details.cache_write';
21
27
  exports.LLM_MODEL = 'traceroot.llm.model';
22
28
  exports.LLM_MODEL_PARAMETERS = 'traceroot.llm.model_parameters';
23
29
  exports.LLM_USAGE = 'traceroot.llm.usage';
@@ -1 +1 @@
1
- {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA,6EAA6E;;;AAE7E,oEAAoE;AACvD,QAAA,0BAA0B,GAAG,CAAC,CAAC,CAAC,4DAA4D;AAC5F,QAAA,gBAAgB,GAAG,GAAG,CAAC,CAAC,wCAAwC;AAChE,QAAA,mBAAmB,GAAG,EAAE,CAAC,CAAC,2DAA2D;AAElG,aAAa;AACA,QAAA,YAAY,GAAG,yBAAyB,CAAC;AACzC,QAAA,cAAc,GAAG,aAAa,CAAC;AAC/B,QAAA,eAAe,GAAG,cAAc,CAAC;AACjC,QAAA,aAAa,GAAG,yBAAyB,CAAC;AAC1C,QAAA,SAAS,GAAG,qBAAqB,CAAC;AAClC,QAAA,UAAU,GAAG,YAAY,CAAC;AAC1B,QAAA,SAAS,GAAG,WAAW,CAAC;AAErC,eAAe;AACF,QAAA,iBAAiB,GAAG,gBAAgB,CAAC;AACrC,QAAA,yBAAyB,GAAG,wBAAwB,CAAC;AACrD,QAAA,6BAA6B,GAAG,4BAA4B,CAAC;AAC7D,QAAA,SAAS,GAAG,qBAAqB,CAAC;AAClC,QAAA,oBAAoB,GAAG,gCAAgC,CAAC;AACxD,QAAA,SAAS,GAAG,qBAAqB,CAAC;AAClC,QAAA,UAAU,GAAG,sBAAsB,CAAC;AAEjD,cAAc;AACD,QAAA,gBAAgB,GAAG,SAAS,CAAC;AAC7B,QAAA,mBAAmB,GAAG,YAAY,CAAC;AACnC,QAAA,cAAc,GAAG,0BAA0B,CAAC;AAC5C,QAAA,UAAU,GAAG,sBAAsB,CAAC;AAEjD;;;;;;;GAOG;AACU,QAAA,cAAc,GAAG;IAC5B,aAAa;IACb,SAAS,EAAE,qBAAqB;IAChC,UAAU,EAAE,sBAAc,EAAE,gBAAgB;IAC5C,WAAW,EAAE,uBAAe,EAAE,gBAAgB;IAC9C,aAAa,EADiB,gBAAgB;IAC9C,qBAAa;IACb,SAAS,EAAT,iBAAS;IAET,eAAe;IACf,SAAS,EAAT,iBAAS;IACT,oBAAoB,EAApB,4BAAoB;IACpB,SAAS,EAAT,iBAAS;IACT,UAAU,EAAV,kBAAU;IAEV,cAAc;IACd,aAAa,EAAE,wBAAgB,EAAE,gBAAgB;IACjD,gBAAgB,EAAE,2BAAmB,EAAE,gBAAgB;IACvD,cAAc,EADyB,gBAAgB;IACvD,sBAAc;IACd,UAAU,EAAV,kBAAU;IAEV,cAAc;IACd,QAAQ,EAAE,oBAAoB;IAC9B,OAAO,EAAE,mBAAmB;IAC5B,eAAe,EAAE,2BAA2B;IAC5C,eAAe,EAAE,2BAA2B;IAC5C,mBAAmB,EAAE,+BAA+B;IAEpD,aAAa;IACb,WAAW,EAAE,wBAAwB;CAC7B,CAAC"}
1
+ {"version":3,"file":"constants.js","sourceRoot":"","sources":["../src/constants.ts"],"names":[],"mappings":";AAAA,6EAA6E;;;AAE7E,6EAA6E;AAChE,QAAA,iBAAiB,GAAG,mBAAmB,CAAC;AACxC,QAAA,UAAU,GAAG,YAAY,CAAC;AAEvC,oEAAoE;AACvD,QAAA,0BAA0B,GAAG,CAAC,CAAC,CAAC,4DAA4D;AAC5F,QAAA,gBAAgB,GAAG,GAAG,CAAC,CAAC,wCAAwC;AAChE,QAAA,mBAAmB,GAAG,EAAE,CAAC,CAAC,2DAA2D;AAElG,aAAa;AACA,QAAA,YAAY,GAAG,yBAAyB,CAAC;AACzC,QAAA,cAAc,GAAG,aAAa,CAAC;AAC/B,QAAA,eAAe,GAAG,cAAc,CAAC;AACjC,QAAA,aAAa,GAAG,yBAAyB,CAAC;AAC1C,QAAA,SAAS,GAAG,qBAAqB,CAAC;AAClC,QAAA,UAAU,GAAG,YAAY,CAAC;AAC1B,QAAA,SAAS,GAAG,WAAW,CAAC;AAErC,eAAe;AACF,QAAA,iBAAiB,GAAG,gBAAgB,CAAC;AACrC,QAAA,yBAAyB,GAAG,wBAAwB,CAAC;AACrD,QAAA,6BAA6B,GAAG,4BAA4B,CAAC;AAC7D,QAAA,wBAAwB,GAAG,uBAAuB,CAAC;AACnD,QAAA,6BAA6B,GAAG,2CAA2C,CAAC;AAC5E,QAAA,8BAA8B,GAAG,4CAA4C,CAAC;AAC9E,QAAA,SAAS,GAAG,qBAAqB,CAAC;AAClC,QAAA,oBAAoB,GAAG,gCAAgC,CAAC;AACxD,QAAA,SAAS,GAAG,qBAAqB,CAAC;AAClC,QAAA,UAAU,GAAG,sBAAsB,CAAC;AAEjD,cAAc;AACD,QAAA,gBAAgB,GAAG,SAAS,CAAC;AAC7B,QAAA,mBAAmB,GAAG,YAAY,CAAC;AACnC,QAAA,cAAc,GAAG,0BAA0B,CAAC;AAC5C,QAAA,UAAU,GAAG,sBAAsB,CAAC;AAEjD;;;;;;;GAOG;AACU,QAAA,cAAc,GAAG;IAC5B,aAAa;IACb,SAAS,EAAE,qBAAqB;IAChC,UAAU,EAAE,sBAAc,EAAE,gBAAgB;IAC5C,WAAW,EAAE,uBAAe,EAAE,gBAAgB;IAC9C,aAAa,EADiB,gBAAgB;IAC9C,qBAAa;IACb,SAAS,EAAT,iBAAS;IAET,eAAe;IACf,SAAS,EAAT,iBAAS;IACT,oBAAoB,EAApB,4BAAoB;IACpB,SAAS,EAAT,iBAAS;IACT,UAAU,EAAV,kBAAU;IAEV,cAAc;IACd,aAAa,EAAE,wBAAgB,EAAE,gBAAgB;IACjD,gBAAgB,EAAE,2BAAmB,EAAE,gBAAgB;IACvD,cAAc,EADyB,gBAAgB;IACvD,sBAAc;IACd,UAAU,EAAV,kBAAU;IAEV,cAAc;IACd,QAAQ,EAAE,oBAAoB;IAC9B,OAAO,EAAE,mBAAmB;IAC5B,eAAe,EAAE,2BAA2B;IAC5C,eAAe,EAAE,2BAA2B;IAC5C,mBAAmB,EAAE,+BAA+B;IAEpD,aAAa;IACb,WAAW,EAAE,wBAAwB;CAC7B,CAAC"}
package/dist/context.d.ts CHANGED
@@ -1,3 +1,5 @@
1
+ import { type Span } from './spans';
2
+ import type { TokenUsage } from './types';
1
3
  /**
2
4
  * Sets attributes on the currently active span.
3
5
  * No-op when called outside an active span.
@@ -15,10 +17,12 @@ export declare function updateCurrentSpan(attrs: {
15
17
  model?: string;
16
18
  /** LLM model parameters (e.g. { temperature: 0.7, max_tokens: 1024 }). */
17
19
  modelParameters?: Record<string, unknown>;
18
- /** Token usage (e.g. { inputTokens: 100, outputTokens: 50 }). */
19
- usage?: Record<string, number>;
20
+ /** Token usage (e.g. { input: 100, output: 50 }). */
21
+ usage?: TokenUsage;
20
22
  /** Prompt / messages sent to the LLM. */
21
23
  prompt?: unknown;
24
+ /** Arbitrary span attributes for keys the typed fields don't cover. */
25
+ attributes?: Record<string, string | number | boolean>;
22
26
  }): void;
23
27
  /**
24
28
  * Sets trace-level association attributes (user, session, tags, metadata) on the
@@ -30,6 +34,8 @@ export declare function updateCurrentTrace(attrs: {
30
34
  tags?: string[];
31
35
  metadata?: Record<string, unknown>;
32
36
  }): void;
37
+ /** The active span as a TraceRoot handle, or undefined outside a span. */
38
+ export declare function getCurrentSpan(): Span | undefined;
33
39
  /**
34
40
  * Returns the trace ID of the currently active span, or undefined if no span is active.
35
41
  */
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAkBA;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,iEAAiE;IACjE,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB,GAAG,IAAI,CAoDP;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GAAG,IAAI,CAwBP;AAOD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAErD"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"AAIA,OAAO,EAAY,KAAK,IAAI,EAAE,MAAM,SAAS,CAAC;AAE9C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAE1C;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,sCAAsC;IACtC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,uDAAuD;IACvD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,0EAA0E;IAC1E,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,qDAAqD;IACrD,KAAK,CAAC,EAAE,UAAU,CAAC;IACnB,yCAAyC;IACzC,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,CAAC;CACxD,GAAG,IAAI,CA2BP;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE;IACxC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACpC,GAAG,IAAI,CAwBP;AAED,0EAA0E;AAC1E,wBAAgB,cAAc,IAAI,IAAI,GAAG,SAAS,CAGjD;AAOD;;GAEG;AACH,wBAAgB,iBAAiB,IAAI,MAAM,GAAG,SAAS,CAEtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,MAAM,GAAG,SAAS,CAErD"}
package/dist/context.js CHANGED
@@ -2,12 +2,15 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.updateCurrentSpan = updateCurrentSpan;
4
4
  exports.updateCurrentTrace = updateCurrentTrace;
5
+ exports.getCurrentSpan = getCurrentSpan;
5
6
  exports.getCurrentTraceId = getCurrentTraceId;
6
7
  exports.getCurrentSpanId = getCurrentSpanId;
7
8
  // src/context.ts
8
9
  const api_1 = require("@opentelemetry/api");
9
10
  const openinference_semantic_conventions_1 = require("@arizeai/openinference-semantic-conventions");
10
11
  const constants_1 = require("./constants");
12
+ const spans_1 = require("./spans");
13
+ const attributes_1 = require("./attributes");
11
14
  /**
12
15
  * Sets attributes on the currently active span.
13
16
  * No-op when called outside an active span.
@@ -22,22 +25,7 @@ function updateCurrentSpan(attrs) {
22
25
  if (attrs.name !== undefined) {
23
26
  span.updateName(attrs.name);
24
27
  }
25
- if (attrs.input !== undefined) {
26
- try {
27
- span.setAttribute(openinference_semantic_conventions_1.INPUT_VALUE, JSON.stringify(attrs.input));
28
- }
29
- catch {
30
- /* non-serializable */
31
- }
32
- }
33
- if (attrs.output !== undefined) {
34
- try {
35
- span.setAttribute(openinference_semantic_conventions_1.OUTPUT_VALUE, JSON.stringify(attrs.output));
36
- }
37
- catch {
38
- /* non-serializable */
39
- }
40
- }
28
+ (0, attributes_1.applyIO)(span, { input: attrs.input, output: attrs.output });
41
29
  if (attrs.metadata !== undefined) {
42
30
  try {
43
31
  span.setAttribute(constants_1.SPAN_METADATA, JSON.stringify(attrs.metadata));
@@ -46,25 +34,11 @@ function updateCurrentSpan(attrs) {
46
34
  /* non-serializable */
47
35
  }
48
36
  }
49
- if (attrs.model !== undefined) {
50
- span.setAttribute(constants_1.LLM_MODEL, attrs.model);
51
- }
52
- if (attrs.modelParameters !== undefined) {
53
- try {
54
- span.setAttribute(constants_1.LLM_MODEL_PARAMETERS, JSON.stringify(attrs.modelParameters));
55
- }
56
- catch {
57
- /* non-serializable */
58
- }
59
- }
60
- if (attrs.usage !== undefined) {
61
- try {
62
- span.setAttribute(constants_1.LLM_USAGE, JSON.stringify(attrs.usage));
63
- }
64
- catch {
65
- /* non-serializable */
66
- }
37
+ if (attrs.model !== undefined || attrs.modelParameters !== undefined) {
38
+ (0, attributes_1.applyModel)(span, attrs.model, attrs.modelParameters);
67
39
  }
40
+ if (attrs.usage !== undefined)
41
+ (0, attributes_1.applyUsage)(span, attrs.usage);
68
42
  if (attrs.prompt !== undefined) {
69
43
  try {
70
44
  span.setAttribute(constants_1.LLM_PROMPT, JSON.stringify(attrs.prompt));
@@ -73,6 +47,8 @@ function updateCurrentSpan(attrs) {
73
47
  /* non-serializable */
74
48
  }
75
49
  }
50
+ if (attrs.attributes !== undefined)
51
+ span.setAttributes(attrs.attributes);
76
52
  }
77
53
  /**
78
54
  * Sets trace-level association attributes (user, session, tags, metadata) on the
@@ -105,6 +81,11 @@ function updateCurrentTrace(attrs) {
105
81
  }
106
82
  }
107
83
  }
84
+ /** The active span as a TraceRoot handle, or undefined outside a span. */
85
+ function getCurrentSpan() {
86
+ const otel = api_1.trace.getActiveSpan();
87
+ return otel ? (0, spans_1.wrapSpan)(otel) : undefined;
88
+ }
108
89
  function activeSpanContext() {
109
90
  const span = api_1.trace.getActiveSpan();
110
91
  return span ? span.spanContext() : undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../src/context.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,13 @@
1
1
  export declare function getGitRoot(): string | undefined;
2
+ /**
3
+ * Read git context directly from `.git` files (no `git` subprocess).
4
+ * Works in containers that ship a `.git` dir but no `git` binary.
5
+ * Only inspects `<cwd>/.git` (does not walk parent directories).
6
+ */
7
+ export declare function gitContextFromFiles(cwd?: string): {
8
+ gitRepo?: string;
9
+ gitRef?: string;
10
+ };
2
11
  /**
3
12
  * Auto-detects git repo (as "owner/repo") and current commit ref.
4
13
  * Returns an empty object if git is unavailable or any command fails.
@@ -7,6 +16,16 @@ export declare function autoDetectGitContext(): {
7
16
  gitRepo?: string;
8
17
  gitRef?: string;
9
18
  };
19
+ /**
20
+ * Resolve git context from GitHub Actions environment variables —
21
+ * `GITHUB_REPOSITORY` (owner/repo) and `GITHUB_SHA`.
22
+ *
23
+ * repo and ref are resolved independently (a build may provide one, not both).
24
+ */
25
+ export declare function harvestCiGitContext(env?: NodeJS.ProcessEnv): {
26
+ gitRepo?: string;
27
+ gitRef?: string;
28
+ };
10
29
  /** @internal — reset cached git root between tests */
11
30
  export declare function _resetGitContextCache(): void;
12
31
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"git_context.d.ts","sourceRoot":"","sources":["../src/git_context.ts"],"names":[],"mappings":"AAKA,wBAAgB,UAAU,IAAI,MAAM,GAAG,SAAS,CAW/C;AAWD;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAiC5E;AAED,sDAAsD;AACtD,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAsB/F"}
1
+ {"version":3,"file":"git_context.d.ts","sourceRoot":"","sources":["../src/git_context.ts"],"names":[],"mappings":"AAWA,wBAAgB,UAAU,IAAI,MAAM,GAAG,SAAS,CAW/C;AAWD;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAsB,GAAG;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAiEA;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,IAAI;IAAE,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE,CAiC5E;AAED;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAKA;AAED,sDAAsD;AACtD,wBAAgB,qBAAqB,IAAI,IAAI,CAE5C;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,IAAI;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,CAsB/F"}
@@ -1,11 +1,18 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.getGitRoot = getGitRoot;
4
+ exports.gitContextFromFiles = gitContextFromFiles;
4
5
  exports.autoDetectGitContext = autoDetectGitContext;
6
+ exports.harvestCiGitContext = harvestCiGitContext;
5
7
  exports._resetGitContextCache = _resetGitContextCache;
6
8
  exports.captureSourceLocation = captureSourceLocation;
7
9
  // src/git_context.ts
8
10
  const node_child_process_1 = require("node:child_process");
11
+ const node_fs_1 = require("node:fs");
12
+ const node_path_1 = require("node:path");
13
+ const constants_1 = require("./constants");
14
+ const REPO_URL_RE = /(?:https?:\/\/|ssh:\/\/git@|git@)github\.com[:/](.+?)(?:\.git)?$/;
15
+ const SHA_RE = /^[0-9a-f]{40}$/;
9
16
  let _gitRootCache = null; // null = not yet detected, '' = failed
10
17
  function getGitRoot() {
11
18
  if (_gitRootCache !== null)
@@ -29,6 +36,83 @@ function relativePath(filepath) {
29
36
  // If we can't make the path relative, don't stamp it — avoid leaking absolute paths.
30
37
  return undefined;
31
38
  }
39
+ /**
40
+ * Read git context directly from `.git` files (no `git` subprocess).
41
+ * Works in containers that ship a `.git` dir but no `git` binary.
42
+ * Only inspects `<cwd>/.git` (does not walk parent directories).
43
+ */
44
+ function gitContextFromFiles(cwd = process.cwd()) {
45
+ const gitDir = (0, node_path_1.join)(cwd, '.git');
46
+ let gitRepo;
47
+ let gitRef;
48
+ try {
49
+ const config = (0, node_fs_1.readFileSync)((0, node_path_1.join)(gitDir, 'config'), 'utf8');
50
+ let seenOrigin = false;
51
+ for (const line of config.split(/\r?\n/)) {
52
+ if (/^\[remote "origin"\]/.test(line)) {
53
+ seenOrigin = true;
54
+ continue;
55
+ }
56
+ if (seenOrigin && line.startsWith('['))
57
+ break; // left the origin section
58
+ if (seenOrigin) {
59
+ const m = line.match(/\burl\s*=\s*(.+)$/);
60
+ if (m) {
61
+ const rm = m[1].trim().match(REPO_URL_RE);
62
+ if (rm)
63
+ gitRepo = rm[1].replace(/\/$/, '');
64
+ break;
65
+ }
66
+ }
67
+ }
68
+ }
69
+ catch {
70
+ /* no .git/config */
71
+ }
72
+ try {
73
+ const head = (0, node_fs_1.readFileSync)((0, node_path_1.join)(gitDir, 'HEAD'), 'utf8').trim();
74
+ if (SHA_RE.test(head)) {
75
+ gitRef = head;
76
+ }
77
+ else {
78
+ const rm = head.match(/ref:\s+(\S+)/);
79
+ if (rm) {
80
+ const refPath = rm[1]; // e.g. refs/heads/main
81
+ try {
82
+ const loose = (0, node_fs_1.readFileSync)((0, node_path_1.join)(gitDir, refPath), 'utf8').trim();
83
+ if (SHA_RE.test(loose))
84
+ gitRef = loose;
85
+ }
86
+ catch {
87
+ /* loose ref missing — the ref may be packed */
88
+ }
89
+ if (gitRef === undefined) {
90
+ try {
91
+ // Packed refs (after `git gc`/fresh clone): `<sha> refs/heads/main`.
92
+ const packed = (0, node_fs_1.readFileSync)((0, node_path_1.join)(gitDir, 'packed-refs'), 'utf8');
93
+ for (const line of packed.split(/\r?\n/)) {
94
+ if (!line || line[0] === '#' || line[0] === '^')
95
+ continue;
96
+ // Object IDs are exactly 40 (SHA-1) or 64 (SHA-256) hex chars.
97
+ const m = line.match(/^([0-9a-f]{40}|[0-9a-f]{64})\s+(.+)$/);
98
+ if (m && m[2] === refPath) {
99
+ gitRef = m[1];
100
+ break;
101
+ }
102
+ }
103
+ }
104
+ catch {
105
+ /* no packed-refs */
106
+ }
107
+ }
108
+ }
109
+ }
110
+ }
111
+ catch {
112
+ /* no .git/HEAD */
113
+ }
114
+ return { gitRepo, gitRef };
115
+ }
32
116
  /**
33
117
  * Auto-detects git repo (as "owner/repo") and current commit ref.
34
118
  * Returns an empty object if git is unavailable or any command fails.
@@ -42,7 +126,7 @@ function autoDetectGitContext() {
42
126
  stdio: ['pipe', 'pipe', 'pipe'],
43
127
  }).trim();
44
128
  // Normalize to "owner/repo" — handles https, git@, ssh:// formats
45
- const match = remote.match(/(?:https?:\/\/|ssh:\/\/git@|git@)github\.com[:/](.+?)(?:\.git)?$/);
129
+ const match = remote.match(REPO_URL_RE);
46
130
  if (match) {
47
131
  gitRepo = match[1].replace(/\/$/, '');
48
132
  }
@@ -64,6 +148,18 @@ function autoDetectGitContext() {
64
148
  getGitRoot();
65
149
  return { gitRepo, gitRef };
66
150
  }
151
+ /**
152
+ * Resolve git context from GitHub Actions environment variables —
153
+ * `GITHUB_REPOSITORY` (owner/repo) and `GITHUB_SHA`.
154
+ *
155
+ * repo and ref are resolved independently (a build may provide one, not both).
156
+ */
157
+ function harvestCiGitContext(env = process.env) {
158
+ return {
159
+ gitRepo: env[constants_1.GITHUB_REPOSITORY] || undefined,
160
+ gitRef: env[constants_1.GITHUB_SHA] || undefined,
161
+ };
162
+ }
67
163
  /** @internal — reset cached git root between tests */
68
164
  function _resetGitContextCache() {
69
165
  _gitRootCache = null;
@@ -1 +1 @@
1
- {"version":3,"file":"git_context.js","sourceRoot":"","sources":["../src/git_context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"git_context.js","sourceRoot":"","sources":["../src/git_context.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -1,9 +1,12 @@
1
1
  export { TraceRoot } from './traceroot';
2
2
  export { observe } from './observe';
3
- export { updateCurrentSpan, updateCurrentTrace, getCurrentTraceId, getCurrentSpanId, } from './context';
3
+ export { updateCurrentSpan, updateCurrentTrace, getCurrentTraceId, getCurrentSpanId, getCurrentSpan, } from './context';
4
4
  export { usingAttributes } from './usingAttributes';
5
5
  export { SpanAttributes } from './constants';
6
6
  export type { SpanType, ObserveOptions, InitializeOptions } from './types';
7
7
  export type { UsingAttributesOptions } from './usingAttributes';
8
8
  export { OpenAIAgentsProcessor } from './openai-agents';
9
+ export { startSpan, usingSpan } from './spans';
10
+ export type { Span } from './spans';
11
+ export type { StartSpanOptions, SpanUpdate, TokenUsage } from './types';
9
12
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,GACjB,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC3E,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,gBAAgB,EAChB,cAAc,GACf,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,YAAY,EAAE,QAAQ,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAC3E,YAAY,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAChE,OAAO,EAAE,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AACxD,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,SAAS,CAAC;AAC/C,YAAY,EAAE,IAAI,EAAE,MAAM,SAAS,CAAC;AACpC,YAAY,EAAE,gBAAgB,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC"}
package/dist/index.js CHANGED
@@ -1,6 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.OpenAIAgentsProcessor = exports.SpanAttributes = exports.usingAttributes = exports.getCurrentSpanId = exports.getCurrentTraceId = exports.updateCurrentTrace = exports.updateCurrentSpan = exports.observe = exports.TraceRoot = void 0;
3
+ exports.usingSpan = exports.startSpan = exports.OpenAIAgentsProcessor = exports.SpanAttributes = exports.usingAttributes = exports.getCurrentSpan = exports.getCurrentSpanId = exports.getCurrentTraceId = exports.updateCurrentTrace = exports.updateCurrentSpan = exports.observe = exports.TraceRoot = void 0;
4
4
  // src/index.ts
5
5
  var traceroot_1 = require("./traceroot");
6
6
  Object.defineProperty(exports, "TraceRoot", { enumerable: true, get: function () { return traceroot_1.TraceRoot; } });
@@ -11,10 +11,14 @@ Object.defineProperty(exports, "updateCurrentSpan", { enumerable: true, get: fun
11
11
  Object.defineProperty(exports, "updateCurrentTrace", { enumerable: true, get: function () { return context_1.updateCurrentTrace; } });
12
12
  Object.defineProperty(exports, "getCurrentTraceId", { enumerable: true, get: function () { return context_1.getCurrentTraceId; } });
13
13
  Object.defineProperty(exports, "getCurrentSpanId", { enumerable: true, get: function () { return context_1.getCurrentSpanId; } });
14
+ Object.defineProperty(exports, "getCurrentSpan", { enumerable: true, get: function () { return context_1.getCurrentSpan; } });
14
15
  var usingAttributes_1 = require("./usingAttributes");
15
16
  Object.defineProperty(exports, "usingAttributes", { enumerable: true, get: function () { return usingAttributes_1.usingAttributes; } });
16
17
  var constants_1 = require("./constants");
17
18
  Object.defineProperty(exports, "SpanAttributes", { enumerable: true, get: function () { return constants_1.SpanAttributes; } });
18
19
  var openai_agents_1 = require("./openai-agents");
19
20
  Object.defineProperty(exports, "OpenAIAgentsProcessor", { enumerable: true, get: function () { return openai_agents_1.OpenAIAgentsProcessor; } });
21
+ var spans_1 = require("./spans");
22
+ Object.defineProperty(exports, "startSpan", { enumerable: true, get: function () { return spans_1.startSpan; } });
23
+ Object.defineProperty(exports, "usingSpan", { enumerable: true, get: function () { return spans_1.usingSpan; } });
20
24
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,eAAe;AACf,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,qCAKmB;AAJjB,4GAAA,iBAAiB,OAAA;AACjB,6GAAA,kBAAkB,OAAA;AAClB,4GAAA,iBAAiB,OAAA;AACjB,2GAAA,gBAAgB,OAAA;AAElB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AAGvB,iDAAwD;AAA/C,sHAAA,qBAAqB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,eAAe;AACf,yCAAwC;AAA/B,sGAAA,SAAS,OAAA;AAClB,qCAAoC;AAA3B,kGAAA,OAAO,OAAA;AAChB,qCAMmB;AALjB,4GAAA,iBAAiB,OAAA;AACjB,6GAAA,kBAAkB,OAAA;AAClB,4GAAA,iBAAiB,OAAA;AACjB,2GAAA,gBAAgB,OAAA;AAChB,yGAAA,cAAc,OAAA;AAEhB,qDAAoD;AAA3C,kHAAA,eAAe,OAAA;AACxB,yCAA6C;AAApC,2GAAA,cAAc,OAAA;AAGvB,iDAAwD;AAA/C,sHAAA,qBAAqB,OAAA;AAC9B,iCAA+C;AAAtC,kGAAA,SAAS,OAAA;AAAE,kGAAA,SAAS,OAAA"}
@@ -1,12 +1,15 @@
1
- import { InitializeOptions } from './types';
1
+ import type { InitializeOptions } from './types';
2
2
  /**
3
3
  * Wires OpenInference instrumentations based on the instrumentModules option:
4
4
  *
5
- * - undefined RITM auto-instrumentation for all supported modules (CJS only)
6
- * - {} no instrumentation
7
- * - { openAI } manual patch only the provided module refs
5
+ * - undefined -> RITM auto-instrumentation for all supported modules (CJS only)
6
+ * - {} -> no instrumentation
7
+ * - { openAI } -> manual patch only the provided module refs
8
8
  *
9
9
  * Called once by TraceRoot.initialize().
10
+ *
11
+ * All OpenInference instrumentations are lazy-loaded via require() so that
12
+ * missing peer dependencies don't crash initialization.
10
13
  */
11
14
  export declare function wireInstrumentations(instrumentModules: InitializeOptions['instrumentModules']): void;
12
15
  //# sourceMappingURL=instrumentation.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAI5C;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,iBAAiB,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,GACxD,IAAI,CAuDN"}
1
+ {"version":3,"file":"instrumentation.d.ts","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AA6BjD;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAClC,iBAAiB,EAAE,iBAAiB,CAAC,mBAAmB,CAAC,GACxD,IAAI,CAuCN"}
@@ -3,62 +3,70 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.wireInstrumentations = wireInstrumentations;
4
4
  // src/instrumentation.ts
5
5
  const instrumentation_1 = require("@opentelemetry/instrumentation");
6
- const openinference_instrumentation_anthropic_1 = require("@arizeai/openinference-instrumentation-anthropic");
7
- const openinference_instrumentation_bedrock_1 = require("@arizeai/openinference-instrumentation-bedrock");
8
- const openinference_instrumentation_langchain_1 = require("@arizeai/openinference-instrumentation-langchain");
9
- const openinference_instrumentation_openai_1 = require("@arizeai/openinference-instrumentation-openai");
10
6
  const openai_agents_1 = require("./openai-agents");
11
7
  const claude_agent_sdk_1 = require("./claude-agent-sdk");
8
+ const OPENINFERENCE_PACKAGES = {
9
+ openAI: ['@arizeai/openinference-instrumentation-openai', 'OpenAIInstrumentation'],
10
+ anthropic: ['@arizeai/openinference-instrumentation-anthropic', 'AnthropicInstrumentation'],
11
+ langchain: ['@arizeai/openinference-instrumentation-langchain', 'LangChainInstrumentation'],
12
+ bedrock: ['@arizeai/openinference-instrumentation-bedrock', 'BedrockInstrumentation'],
13
+ };
14
+ function loadInstrumentation(pkg, exportName) {
15
+ try {
16
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
17
+ const mod = require(pkg);
18
+ const ctor = mod[exportName];
19
+ if (typeof ctor !== 'function')
20
+ return null;
21
+ return ctor;
22
+ }
23
+ catch {
24
+ return null;
25
+ }
26
+ }
12
27
  /**
13
28
  * Wires OpenInference instrumentations based on the instrumentModules option:
14
29
  *
15
- * - undefined RITM auto-instrumentation for all supported modules (CJS only)
16
- * - {} no instrumentation
17
- * - { openAI } manual patch only the provided module refs
30
+ * - undefined -> RITM auto-instrumentation for all supported modules (CJS only)
31
+ * - {} -> no instrumentation
32
+ * - { openAI } -> manual patch only the provided module refs
18
33
  *
19
34
  * Called once by TraceRoot.initialize().
35
+ *
36
+ * All OpenInference instrumentations are lazy-loaded via require() so that
37
+ * missing peer dependencies don't crash initialization.
20
38
  */
21
39
  function wireInstrumentations(instrumentModules) {
22
40
  if (instrumentModules === undefined) {
23
41
  // Auto-instrumentation via require-in-the-middle (CJS only).
24
42
  // ESM users must pass explicit module refs.
25
- (0, instrumentation_1.registerInstrumentations)({
26
- instrumentations: [
27
- new openinference_instrumentation_openai_1.OpenAIInstrumentation(),
28
- new openinference_instrumentation_anthropic_1.AnthropicInstrumentation(),
29
- new openinference_instrumentation_langchain_1.LangChainInstrumentation(),
30
- new openinference_instrumentation_bedrock_1.BedrockInstrumentation(),
31
- ],
32
- });
43
+ const instrs = [];
44
+ for (const [pkg, exportName] of Object.values(OPENINFERENCE_PACKAGES)) {
45
+ const Ctor = loadInstrumentation(pkg, exportName);
46
+ if (Ctor)
47
+ instrs.push(new Ctor());
48
+ }
49
+ if (instrs.length > 0) {
50
+ (0, instrumentation_1.registerInstrumentations)({ instrumentations: instrs });
51
+ }
33
52
  return;
34
53
  }
35
54
  const instrs = [];
36
- if (instrumentModules.openAI) {
37
- const instr = new openinference_instrumentation_openai_1.OpenAIInstrumentation();
38
- instrs.push(instr);
39
- instr.manuallyInstrument(instrumentModules.openAI);
40
- }
41
- if (instrumentModules.anthropic) {
42
- const instr = new openinference_instrumentation_anthropic_1.AnthropicInstrumentation();
43
- instrs.push(instr);
44
- instr.manuallyInstrument(instrumentModules.anthropic);
45
- }
46
- if (instrumentModules.langchain) {
47
- // langchain must be: import * as lcCallbackManager from '@langchain/core/callbacks/manager'
48
- const instr = new openinference_instrumentation_langchain_1.LangChainInstrumentation();
55
+ for (const [key, [pkg, exportName]] of Object.entries(OPENINFERENCE_PACKAGES)) {
56
+ const moduleRef = instrumentModules[key];
57
+ if (!moduleRef)
58
+ continue;
59
+ const Ctor = loadInstrumentation(pkg, exportName);
60
+ if (!Ctor) {
61
+ throw new Error(`[TraceRoot] Failed to load ${pkg}. Install it: npm install ${pkg}`);
62
+ }
63
+ const instr = new Ctor();
49
64
  instrs.push(instr);
50
- instr.manuallyInstrument(instrumentModules.langchain);
65
+ instr.manuallyInstrument(moduleRef);
51
66
  }
52
67
  if (instrumentModules.claudeAgentSDK) {
53
- // Claude Agent SDK uses TraceRoot's in-house wrapper for stable agent/tool/LLM structure.
54
- // Auto RITM is intentionally not enabled for it until this wrapper has its own loader hook.
55
68
  (0, claude_agent_sdk_1.wireClaudeAgentSDKInstrumentation)(instrumentModules.claudeAgentSDK);
56
69
  }
57
- if (instrumentModules.bedrock) {
58
- const instr = new openinference_instrumentation_bedrock_1.BedrockInstrumentation();
59
- instrs.push(instr);
60
- instr.manuallyInstrument(instrumentModules.bedrock);
61
- }
62
70
  if (instrumentModules.openaiAgents) {
63
71
  (0, openai_agents_1.wireOpenAIAgentsProcessor)(instrumentModules.openaiAgents);
64
72
  }
@@ -1 +1 @@
1
- {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":";;AAmBA,oDAyDC;AA5ED,yBAAyB;AACzB,oEAA0E;AAC1E,8GAA4F;AAC5F,0GAAwF;AACxF,8GAA4F;AAC5F,wGAAsF;AAEtF,mDAA4D;AAC5D,yDAAuE;AAEvE;;;;;;;;GAQG;AACH,SAAgB,oBAAoB,CAClC,iBAAyD;IAEzD,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;QACpC,6DAA6D;QAC7D,4CAA4C;QAC5C,IAAA,0CAAwB,EAAC;YACvB,gBAAgB,EAAE;gBAChB,IAAI,4DAAqB,EAAE;gBAC3B,IAAI,kEAAwB,EAAE;gBAC9B,IAAI,kEAAwB,EAAE;gBAC9B,IAAI,8DAAsB,EAAE;aAC7B;SACF,CAAC,CAAC;QACH,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAKN,EAAE,CAAC;IAET,IAAI,iBAAiB,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,IAAI,4DAAqB,EAAE,CAAC;QAC1C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,MAAa,CAAC,CAAC;IAC5D,CAAC;IACD,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,IAAI,kEAAwB,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,SAAgB,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,iBAAiB,CAAC,SAAS,EAAE,CAAC;QAChC,4FAA4F;QAC5F,MAAM,KAAK,GAAG,IAAI,kEAAwB,EAAE,CAAC;QAC7C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,SAAgB,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,iBAAiB,CAAC,cAAc,EAAE,CAAC;QACrC,0FAA0F;QAC1F,4FAA4F;QAC5F,IAAA,oDAAiC,EAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,iBAAiB,CAAC,OAAO,EAAE,CAAC;QAC9B,MAAM,KAAK,GAAG,IAAI,8DAAsB,EAAE,CAAC;QAC3C,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,KAAK,CAAC,kBAAkB,CAAC,iBAAiB,CAAC,OAAc,CAAC,CAAC;IAC7D,CAAC;IACD,IAAI,iBAAiB,CAAC,YAAY,EAAE,CAAC;QACnC,IAAA,yCAAyB,EAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,IAAA,0CAAwB,EAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"instrumentation.js","sourceRoot":"","sources":["../src/instrumentation.ts"],"names":[],"mappings":";;AA2CA,oDAyCC;AApFD,yBAAyB;AACzB,oEAAgG;AAEhG,mDAA4D;AAC5D,yDAAuE;AAQvE,MAAM,sBAAsB,GAAG;IAC7B,MAAM,EAAE,CAAC,+CAA+C,EAAE,uBAAuB,CAAC;IAClF,SAAS,EAAE,CAAC,kDAAkD,EAAE,0BAA0B,CAAC;IAC3F,SAAS,EAAE,CAAC,kDAAkD,EAAE,0BAA0B,CAAC;IAC3F,OAAO,EAAE,CAAC,gDAAgD,EAAE,wBAAwB,CAAC;CAC7E,CAAC;AAEX,SAAS,mBAAmB,CAAC,GAAW,EAAE,UAAkB;IAC1D,IAAI,CAAC;QACH,iEAAiE;QACjE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAA4B,CAAC;QACpD,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7B,IAAI,OAAO,IAAI,KAAK,UAAU;YAAE,OAAO,IAAI,CAAC;QAC5C,OAAO,IAA2B,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;;;;;;;;;;GAWG;AACH,SAAgB,oBAAoB,CAClC,iBAAyD;IAEzD,IAAI,iBAAiB,KAAK,SAAS,EAAE,CAAC;QACpC,6DAA6D;QAC7D,4CAA4C;QAC5C,MAAM,MAAM,GAAsB,EAAE,CAAC;QACrC,KAAK,MAAM,CAAC,GAAG,EAAE,UAAU,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,sBAAsB,CAAC,EAAE,CAAC;YACtE,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;YAClD,IAAI,IAAI;gBAAE,MAAM,CAAC,IAAI,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,IAAA,0CAAwB,EAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;QACzD,CAAC;QACD,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAsB,EAAE,CAAC;IAErC,KAAK,MAAM,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,sBAAsB,CAAC,EAAE,CAAC;QAC9E,MAAM,SAAS,GAAG,iBAAiB,CAAC,GAA0C,CAAC,CAAC;QAChF,IAAI,CAAC,SAAS;YAAE,SAAS;QACzB,MAAM,IAAI,GAAG,mBAAmB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,8BAA8B,GAAG,6BAA6B,GAAG,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,CAAC;QACzB,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnB,KAAK,CAAC,kBAAkB,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED,IAAI,iBAAiB,CAAC,cAAc,EAAE,CAAC;QACrC,IAAA,oDAAiC,EAAC,iBAAiB,CAAC,cAAc,CAAC,CAAC;IACtE,CAAC;IACD,IAAI,iBAAiB,CAAC,YAAY,EAAE,CAAC;QACnC,IAAA,yCAAyB,EAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,IAAA,0CAAwB,EAAC,EAAE,gBAAgB,EAAE,MAAM,EAAE,CAAC,CAAC;IACzD,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../src/observe.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,cAAc,EAAY,MAAM,SAAS,CAAC;AAiCnD;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,wBAAgB,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAC5C,OAAO,EAAE,cAAc,EACvB,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,EACrC,GAAG,IAAI,EAAE,CAAC,GACT,cAAc,CAAC,CAAC,CAAC,CAAC;AAGrB,wBAAgB,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAC5C,OAAO,EAAE,cAAc,EACvB,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAClC,GAAG,IAAI,EAAE,CAAC,GACT,OAAO,CAAC,CAAC,CAAC,CAAC;AAoKd,mDAAmD;AACnD,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC"}
1
+ {"version":3,"file":"observe.d.ts","sourceRoot":"","sources":["../src/observe.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAC;AAczC;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAEH,wBAAgB,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAC5C,OAAO,EAAE,cAAc,EACvB,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,EACrC,GAAG,IAAI,EAAE,CAAC,GACT,cAAc,CAAC,CAAC,CAAC,CAAC;AAGrB,wBAAgB,OAAO,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,EAC5C,OAAO,EAAE,cAAc,EACvB,EAAE,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,EAClC,GAAG,IAAI,EAAE,CAAC,GACT,OAAO,CAAC,CAAC,CAAC,CAAC;AA6Hd,mDAAmD;AACnD,wBAAgB,kBAAkB,IAAI,IAAI,CAGzC"}
package/dist/observe.js CHANGED
@@ -37,17 +37,8 @@ exports.observe = observe;
37
37
  exports._resetObserveState = _resetObserveState;
38
38
  // src/observe.ts
39
39
  const api_1 = require("@opentelemetry/api");
40
- const openinference_core_1 = require("@arizeai/openinference-core");
41
40
  const openinference_semantic_conventions_1 = require("@arizeai/openinference-semantic-conventions");
42
- const constants_1 = require("./constants");
43
- const git_context_1 = require("./git_context");
44
- const OPENINFERENCE_SPAN_KIND = openinference_semantic_conventions_1.SemanticConventions.OPENINFERENCE_SPAN_KIND;
45
- const SPAN_KIND_MAP = {
46
- agent: 'AGENT',
47
- tool: 'TOOL',
48
- llm: 'LLM',
49
- span: 'CHAIN',
50
- };
41
+ const attributes_1 = require("./attributes");
51
42
  // Cached once after the first call; the tracer name never changes.
52
43
  let _tracer;
53
44
  let _hasWarnedUninit = false;
@@ -57,15 +48,6 @@ const AsyncGeneratorFunction = Object.getPrototypeOf(async function* () { })
57
48
  function isAsyncGeneratorFunction(fn) {
58
49
  return typeof fn === 'function' && fn instanceof AsyncGeneratorFunction;
59
50
  }
60
- /** Serialize a value for a span attribute, returning undefined on failure. */
61
- function trySerialize(value) {
62
- try {
63
- return JSON.stringify(value);
64
- }
65
- catch {
66
- return undefined;
67
- }
68
- }
69
51
  // Implementation
70
52
  function observe(options, fn, ...args) {
71
53
  const name = options.name ?? (fn.name || 'anonymous');
@@ -97,10 +79,10 @@ async function _observeRegular(name, options, fn, args) {
97
79
  }
98
80
  }
99
81
  try {
100
- _applyCommonAttributes(span, options, args);
82
+ (0, attributes_1.applyCommonAttributes)(span, options, args);
101
83
  const result = await fn(...args);
102
84
  if (options.captureOutput !== false) {
103
- const serialized = trySerialize(result);
85
+ const serialized = (0, attributes_1.trySerialize)(result);
104
86
  if (serialized !== undefined)
105
87
  span.setAttribute(openinference_semantic_conventions_1.OUTPUT_VALUE, serialized);
106
88
  }
@@ -136,7 +118,7 @@ async function* _observeAsyncGenerator(name, options, fn, args) {
136
118
  yield* fn(...args);
137
119
  return;
138
120
  }
139
- _applyCommonAttributes(span, options, args);
121
+ (0, attributes_1.applyCommonAttributes)(span, options, args);
140
122
  // Activate the span in the OTel context so that updateCurrentSpan() and
141
123
  // nested observe() calls inside the generator body target the correct span.
142
124
  // We must wrap each .next() call in context.with() because AsyncLocalStorage
@@ -154,7 +136,7 @@ async function* _observeAsyncGenerator(name, options, fn, args) {
154
136
  yield value;
155
137
  }
156
138
  if (options.captureOutput !== false && collected.length > 0) {
157
- const serialized = trySerialize(collected);
139
+ const serialized = (0, attributes_1.trySerialize)(collected);
158
140
  if (serialized !== undefined)
159
141
  span.setAttribute(openinference_semantic_conventions_1.OUTPUT_VALUE, serialized);
160
142
  }
@@ -168,46 +150,6 @@ async function* _observeAsyncGenerator(name, options, fn, args) {
168
150
  span.end();
169
151
  }
170
152
  }
171
- /**
172
- * Apply attributes common to all span types: kind, ambient context, session/user,
173
- * input from args, metadata, tags, git source location.
174
- */
175
- function _applyCommonAttributes(span, options, args) {
176
- span.setAttribute(OPENINFERENCE_SPAN_KIND, SPAN_KIND_MAP[options.type ?? 'span']);
177
- // Propagate any ambient attributes set by usingAttributes() in the call stack.
178
- const ctxAttrs = (0, openinference_core_1.getAttributesFromContext)(api_1.context.active());
179
- if (ctxAttrs && Object.keys(ctxAttrs).length > 0) {
180
- span.setAttributes(ctxAttrs);
181
- }
182
- if (options.sessionId !== undefined)
183
- span.setAttribute(openinference_semantic_conventions_1.SESSION_ID, options.sessionId);
184
- if (options.userId !== undefined)
185
- span.setAttribute(openinference_semantic_conventions_1.USER_ID, options.userId);
186
- // Auto-capture input from args. Single arg → use directly; multiple → array.
187
- if (options.captureInput !== false && args.length > 0) {
188
- const inputValue = args.length === 1 ? args[0] : args;
189
- const serialized = trySerialize(inputValue);
190
- if (serialized !== undefined)
191
- span.setAttribute(openinference_semantic_conventions_1.INPUT_VALUE, serialized);
192
- }
193
- if (options.metadata !== undefined) {
194
- const s = trySerialize(options.metadata);
195
- if (s !== undefined)
196
- span.setAttribute(constants_1.SPAN_METADATA, s);
197
- }
198
- if (options.tags !== undefined) {
199
- const s = trySerialize(options.tags);
200
- if (s !== undefined)
201
- span.setAttribute(constants_1.SPAN_TAGS, s);
202
- }
203
- const loc = (0, git_context_1.captureSourceLocation)();
204
- if (loc.file !== undefined)
205
- span.setAttribute('traceroot.git.source_file', loc.file);
206
- if (loc.line !== undefined)
207
- span.setAttribute('traceroot.git.source_line', loc.line);
208
- if (loc.functionName !== undefined)
209
- span.setAttribute('traceroot.git.source_function', loc.functionName);
210
- }
211
153
  /** @internal — reset module state between tests */
212
154
  function _resetObserveState() {
213
155
  _tracer = undefined;
@@ -1 +1 @@
1
- {"version":3,"file":"observe.js","sourceRoot":"","sources":["../src/observe.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"observe.js","sourceRoot":"","sources":["../src/observe.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import { Span as OtelSpan } from '@opentelemetry/api';
2
+ import { StartSpanOptions, SpanUpdate } from './types';
3
+ export interface Span {
4
+ readonly spanId: string;
5
+ readonly traceId: string;
6
+ update(attrs: SpanUpdate): this;
7
+ end(): void;
8
+ startSpan(options: Omit<StartSpanOptions, 'parent'>): Span;
9
+ setError(err: unknown): this;
10
+ }
11
+ /** Wrap an existing OTel span (e.g. the active one) as a Span handle. */
12
+ export declare function wrapSpan(otel: OtelSpan): Span;
13
+ export declare function startSpan(options: StartSpanOptions): Span;
14
+ /** Run fn with `span` as the active span so inner observe()/startSpan() nest under it. */
15
+ export declare function usingSpan<T>(span: Span, fn: () => T): T;
16
+ /** @internal test reset */
17
+ export declare function _resetSpansState(): void;
18
+ //# sourceMappingURL=spans.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spans.d.ts","sourceRoot":"","sources":["../src/spans.ts"],"names":[],"mappings":"AACA,OAAO,EAAkC,IAAI,IAAI,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGtF,OAAO,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAGvD,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,MAAM,CAAC,KAAK,EAAE,UAAU,GAAG,IAAI,CAAC;IAChC,GAAG,IAAI,IAAI,CAAC;IACZ,SAAS,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;IAC3D,QAAQ,CAAC,GAAG,EAAE,OAAO,GAAG,IAAI,CAAC;CAC9B;AAwCD,yEAAyE;AACzE,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAE7C;AAKD,wBAAgB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAsCzD;AAED,0FAA0F;AAC1F,wBAAgB,SAAS,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,GAAG,CAAC,CAGvD;AAED,2BAA2B;AAC3B,wBAAgB,gBAAgB,IAAI,IAAI,CAGvC"}
package/dist/spans.js ADDED
@@ -0,0 +1,104 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.wrapSpan = wrapSpan;
4
+ exports.startSpan = startSpan;
5
+ exports.usingSpan = usingSpan;
6
+ exports._resetSpansState = _resetSpansState;
7
+ // src/spans.ts — imperative span handle API
8
+ const api_1 = require("@opentelemetry/api");
9
+ const attributes_1 = require("./attributes");
10
+ const constants_1 = require("./constants");
11
+ const traceroot_1 = require("./traceroot");
12
+ class TracerootSpan {
13
+ otelSpan;
14
+ constructor(otelSpan) {
15
+ this.otelSpan = otelSpan;
16
+ }
17
+ get spanId() {
18
+ return this.otelSpan.spanContext().spanId;
19
+ }
20
+ get traceId() {
21
+ return this.otelSpan.spanContext().traceId;
22
+ }
23
+ update(attrs) {
24
+ if (attrs.name !== undefined)
25
+ this.otelSpan.updateName(attrs.name);
26
+ (0, attributes_1.applyIO)(this.otelSpan, { input: attrs.input, output: attrs.output });
27
+ if (attrs.metadata !== undefined) {
28
+ const s = (0, attributes_1.trySerialize)(attrs.metadata);
29
+ if (s !== undefined)
30
+ this.otelSpan.setAttribute(constants_1.SPAN_METADATA, s);
31
+ }
32
+ if (attrs.model !== undefined || attrs.modelParameters !== undefined) {
33
+ (0, attributes_1.applyModel)(this.otelSpan, attrs.model, attrs.modelParameters);
34
+ }
35
+ if (attrs.usage !== undefined)
36
+ (0, attributes_1.applyUsage)(this.otelSpan, attrs.usage);
37
+ if (attrs.attributes !== undefined)
38
+ this.otelSpan.setAttributes(attrs.attributes);
39
+ return this;
40
+ }
41
+ end() {
42
+ this.otelSpan.end();
43
+ }
44
+ startSpan(options) {
45
+ return startSpan({ ...options, parent: this });
46
+ }
47
+ setError(err) {
48
+ this.otelSpan.recordException(err instanceof Error ? err : new Error(String(err)));
49
+ this.otelSpan.setStatus({
50
+ code: api_1.SpanStatusCode.ERROR,
51
+ message: err instanceof Error ? err.message : String(err),
52
+ });
53
+ return this;
54
+ }
55
+ }
56
+ /** Wrap an existing OTel span (e.g. the active one) as a Span handle. */
57
+ function wrapSpan(otel) {
58
+ return new TracerootSpan(otel);
59
+ }
60
+ let _tracer;
61
+ let _hasWarnedUninit = false;
62
+ function startSpan(options) {
63
+ // Synchronous init guard — mirrors observe(). Unlike observe() (which is async
64
+ // and can await a dynamic import), startSpan() is synchronous, so it must init
65
+ // BEFORE creating the span or the first span would be dropped. initialize() is
66
+ // synchronous and safe to call repeatedly.
67
+ if (process.env['TRACEROOT_API_KEY'] && !traceroot_1.TraceRoot.isInitialized()) {
68
+ traceroot_1.TraceRoot.initialize();
69
+ }
70
+ _tracer ??= api_1.trace.getTracer('traceroot-ts');
71
+ const parentOtel = options.parent ? options.parent.otelSpan : undefined;
72
+ const ctx = parentOtel ? api_1.trace.setSpan(api_1.context.active(), parentOtel) : api_1.context.active();
73
+ const otel = _tracer.startSpan(options.name, undefined, ctx);
74
+ if (!otel.isRecording() && !_hasWarnedUninit) {
75
+ _hasWarnedUninit = true;
76
+ console.warn('[TraceRoot] startSpan() called but TraceRoot.initialize() was not called. Spans will not be recorded.');
77
+ }
78
+ if (otel.isRecording()) {
79
+ (0, attributes_1.applyCommonAttributes)(otel, {
80
+ type: options.type,
81
+ metadata: options.metadata,
82
+ tags: options.tags,
83
+ sessionId: options.sessionId,
84
+ userId: options.userId,
85
+ }, options.input !== undefined ? [options.input] : []);
86
+ if (options.model !== undefined || options.modelParameters !== undefined) {
87
+ (0, attributes_1.applyModel)(otel, options.model, options.modelParameters);
88
+ }
89
+ if (options.attributes !== undefined)
90
+ otel.setAttributes(options.attributes);
91
+ }
92
+ return new TracerootSpan(otel);
93
+ }
94
+ /** Run fn with `span` as the active span so inner observe()/startSpan() nest under it. */
95
+ function usingSpan(span, fn) {
96
+ const otel = span.otelSpan;
97
+ return api_1.context.with(api_1.trace.setSpan(api_1.context.active(), otel), fn);
98
+ }
99
+ /** @internal test reset */
100
+ function _resetSpansState() {
101
+ _tracer = undefined;
102
+ _hasWarnedUninit = false;
103
+ }
104
+ //# sourceMappingURL=spans.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spans.js","sourceRoot":"","sources":["../src/spans.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"traceroot.d.ts","sourceRoot":"","sources":["../src/traceroot.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAY5C,qBAAa,SAAS;IACpB,OAAO;IAEP,MAAM,CAAC,aAAa,IAAI,OAAO;IAI/B,MAAM,CAAC,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,IAAI;WAmG3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;WAItB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAMvC;AAED,gBAAgB;AAChB,wBAAgB,gBAAgB,IAAI,IAAI,CAQvC"}
1
+ {"version":3,"file":"traceroot.d.ts","sourceRoot":"","sources":["../src/traceroot.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAkB5C,qBAAa,SAAS;IACpB,OAAO;IAEP,MAAM,CAAC,aAAa,IAAI,OAAO;IAI/B,MAAM,CAAC,UAAU,CAAC,OAAO,GAAE,iBAAsB,GAAG,IAAI;WAiI3C,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;WAItB,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC;CAMvC;AAED,gBAAgB;AAChB,wBAAgB,gBAAgB,IAAI,IAAI,CAQvC"}
package/dist/traceroot.js CHANGED
@@ -57,17 +57,39 @@ class TraceRoot {
57
57
  compression: 'gzip',
58
58
  });
59
59
  const environment = options.environment ?? process.env['TRACEROOT_ENVIRONMENT'];
60
- const gitRepoOverride = options.gitRepo ?? process.env['TRACEROOT_GIT_REPO'];
61
- const gitRefOverride = options.gitRef ?? process.env['TRACEROOT_GIT_REF'];
62
- let gitRepo = gitRepoOverride;
63
- let gitRef = gitRefOverride;
60
+ // `|| undefined` so an empty option/env var ('') is treated as unset —
61
+ // otherwise it would block fallback detection and suppress the warning.
62
+ let gitRepo = options.gitRepo || process.env['TRACEROOT_GIT_REPO'] || undefined;
63
+ let gitRef = options.gitRef || process.env['TRACEROOT_GIT_REF'] || undefined;
64
+ // CI/platform env vars — production path (no .git needed).
65
+ if (gitRepo === undefined || gitRef === undefined) {
66
+ const ci = (0, git_context_1.harvestCiGitContext)();
67
+ gitRepo ??= ci.gitRepo;
68
+ gitRef ??= ci.gitRef;
69
+ }
70
+ // .git read as files — dev fallback, no git binary required.
71
+ if (gitRepo === undefined || gitRef === undefined) {
72
+ const fromFiles = (0, git_context_1.gitContextFromFiles)();
73
+ gitRepo ??= fromFiles.gitRepo;
74
+ gitRef ??= fromFiles.gitRef;
75
+ }
76
+ // git subprocess — last resort (handles run-from-subdirectory).
64
77
  if (gitRepo === undefined || gitRef === undefined) {
65
78
  const autoGit = (0, git_context_1.autoDetectGitContext)();
66
79
  gitRepo ??= autoGit.gitRepo;
67
80
  gitRef ??= autoGit.gitRef;
68
81
  }
69
- else {
70
- (0, git_context_1.getGitRoot)();
82
+ // Warm git-root cache for per-span source paths (cached/idempotent).
83
+ (0, git_context_1.getGitRoot)();
84
+ // Honest absence: warn once, never fabricate.
85
+ if (gitRepo === undefined || gitRef === undefined) {
86
+ console.warn('[TraceRoot] git context incomplete (repo=' +
87
+ (gitRepo ?? 'unset') +
88
+ ', ref=' +
89
+ (gitRef ?? 'unset') +
90
+ '). The AI agent needs both to correlate traces to source. ' +
91
+ 'Set TRACEROOT_GIT_REPO / TRACEROOT_GIT_REF (see ' +
92
+ 'https://docs.traceroot.ai/tracing/git-context).');
71
93
  }
72
94
  // Flush/batch tuning — env vars take precedence over SDK defaults.
73
95
  const flushIntervalSec = Number(process.env['TRACEROOT_FLUSH_INTERVAL'] || constants_1.DEFAULT_FLUSH_INTERVAL_SEC);
@@ -1 +1 @@
1
- {"version":3,"file":"traceroot.js","sourceRoot":"","sources":["../src/traceroot.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"traceroot.js","sourceRoot":"","sources":["../src/traceroot.ts"],"names":[],"mappings":";;;AAsLA,4CAQC;AA9LD,mBAAmB;AACnB,4CAO4B;AAC5B,wFAA6E;AAC7E,kEAAmE;AACnE,wEAGuC;AAEvC,2CAA4E;AAC5E,uDAAyD;AACzD,2CAAgG;AAChG,uCAA+C;AAC/C,+CAMuB;AAEvB,MAAM,gBAAgB,GAAG,0BAA0B,CAAC;AAEpD,IAAI,cAAc,GAAG,KAAK,CAAC;AAC3B,IAAI,SAAyC,CAAC;AAE9C,MAAa,SAAS;IACpB,gBAAuB,CAAC;IAExB,MAAM,CAAC,aAAa;QAClB,OAAO,cAAc,CAAC;IACxB,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,UAA6B,EAAE;QAC/C,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,KAAK,OAAO,CAAC;QAChF,IAAI,CAAC,OAAO,EAAE,CAAC;YACb,OAAO;QACT,CAAC;QAED,IAAI,cAAc,EAAE,CAAC;YACnB,OAAO,CAAC,IAAI,CAAC,wEAAwE,CAAC,CAAC;YACvF,OAAO;QACT,CAAC;QAED,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QAClE,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,CAAC,IAAI,CACV,iGAAiG;gBAC/F,6CAA6C,CAChD,CAAC;QACJ,CAAC;QAED,MAAM,WAAW,GAAiC;YAChD,KAAK,EAAE,kBAAY,CAAC,KAAK;YACzB,IAAI,EAAE,kBAAY,CAAC,IAAI;YACvB,IAAI,EAAE,kBAAY,CAAC,IAAI;YACvB,KAAK,EAAE,kBAAY,CAAC,KAAK;SAC1B,CAAC;QACF,UAAI,CAAC,SAAS,CACZ,IAAI,uBAAiB,EAAE,EACvB,WAAW,CAAC,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,IAAI,kBAAY,CAAC,KAAK,CAC/D,CAAC;QAEF,MAAM,OAAO,GAAG,CACd,OAAO,CAAC,OAAO;YACf,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC;YACjC,gBAAgB,CACjB,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAErB,MAAM,OAAO,GAA2B;YACtC,sBAAsB,EAAE,oBAAQ;YAChC,yBAAyB,EAAE,uBAAW;SACvC,CAAC;QACF,IAAI,MAAM;YAAE,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,EAAE,CAAC;QAE1D,MAAM,QAAQ,GAAG,IAAI,6CAAiB,CAAC;YACrC,GAAG,EAAE,GAAG,OAAO,uBAAuB;YACtC,OAAO;YACP,8DAA8D;YAC9D,WAAW,EAAE,MAAa;SAC3B,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAEhF,uEAAuE;QACvE,wEAAwE;QACxE,IAAI,OAAO,GAAG,OAAO,CAAC,OAAO,IAAI,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,SAAS,CAAC;QAChF,IAAI,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,SAAS,CAAC;QAE7E,2DAA2D;QAC3D,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAClD,MAAM,EAAE,GAAG,IAAA,iCAAmB,GAAE,CAAC;YACjC,OAAO,KAAK,EAAE,CAAC,OAAO,CAAC;YACvB,MAAM,KAAK,EAAE,CAAC,MAAM,CAAC;QACvB,CAAC;QAED,6DAA6D;QAC7D,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAClD,MAAM,SAAS,GAAG,IAAA,iCAAmB,GAAE,CAAC;YACxC,OAAO,KAAK,SAAS,CAAC,OAAO,CAAC;YAC9B,MAAM,KAAK,SAAS,CAAC,MAAM,CAAC;QAC9B,CAAC;QAED,gEAAgE;QAChE,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAClD,MAAM,OAAO,GAAG,IAAA,kCAAoB,GAAE,CAAC;YACvC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC;YAC5B,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC;QAC5B,CAAC;QAED,qEAAqE;QACrE,IAAA,wBAAU,GAAE,CAAC;QAEb,8CAA8C;QAC9C,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YAClD,OAAO,CAAC,IAAI,CACV,2CAA2C;gBACzC,CAAC,OAAO,IAAI,OAAO,CAAC;gBACpB,QAAQ;gBACR,CAAC,MAAM,IAAI,OAAO,CAAC;gBACnB,4DAA4D;gBAC5D,kDAAkD;gBAClD,iDAAiD,CACpD,CAAC;QACJ,CAAC;QAED,mEAAmE;QACnE,MAAM,gBAAgB,GAAG,MAAM,CAC7B,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,IAAI,sCAA0B,CACtE,CAAC;QACF,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,IAAI,4BAAgB,CAAC,CAAC;QAC9E,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,IAAI,+BAAmB,CAAC,CAAC;QAEnF,8EAA8E;QAC9E,kFAAkF;QAClF,+EAA+E;QAC/E,mFAAmF;QACnF,MAAM,cAAc,GAAG,OAAO,CAAC,YAAY;YACzC,CAAC,CAAC,IAAI,uDAAgC,CAAC,EAAE,QAAQ,EAAE,CAAC;YACpD,CAAC,CAAC,IAAI,sDAA+B,CAAC;gBAClC,QAAQ;gBACR,MAAM,EAAE;oBACN,oBAAoB,EAAE,gBAAgB,GAAG,IAAI;oBAC7C,kBAAkB,EAAE,OAAO;oBAC3B,mBAAmB,EAAE,UAAU,GAAG,IAAI;iBACvC;aACF,CAAC,CAAC;QAEP,SAAS,GAAG,IAAI,mCAAkB,EAAE,CAAC;QACrC,SAAS,CAAC,gBAAgB,CACxB,IAAI,kCAAsB,CAAC,cAAc,EAAE,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,CAC7E,CAAC;QACF,SAAS,CAAC,QAAQ,EAAE,CAAC;QAErB,IAAA,sCAAoB,EAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC;QAEhD,cAAc,GAAG,IAAI,CAAC;QACtB,OAAO,CAAC,IAAI,CAAC,YAAY,EAAE,GAAG,EAAE;YAC9B,KAAK,SAAS,EAAE,UAAU,EAAE,CAAC;QAC/B,CAAC,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,KAAK;QAChB,MAAM,SAAS,EAAE,UAAU,EAAE,CAAC;IAChC,CAAC;IAED,MAAM,CAAC,KAAK,CAAC,QAAQ;QACnB,MAAM,SAAS,EAAE,QAAQ,EAAE,CAAC;QAC5B,cAAc,GAAG,KAAK,CAAC;QACvB,SAAS,GAAG,SAAS,CAAC;QACtB,IAAA,4BAAkB,GAAE,CAAC;IACvB,CAAC;CACF;AAlJD,8BAkJC;AAED,gBAAgB;AAChB,SAAgB,gBAAgB;IAC9B,cAAc,GAAG,KAAK,CAAC;IACvB,SAAS,GAAG,SAAS,CAAC;IACtB,IAAA,4BAAkB,GAAE,CAAC;IACrB,IAAA,mCAAqB,GAAE,CAAC;IACxB,WAAK,CAAC,OAAO,EAAE,CAAC;IAChB,aAAO,CAAC,OAAO,EAAE,CAAC;IAClB,iBAAW,CAAC,OAAO,EAAE,CAAC;AACxB,CAAC"}
package/dist/types.d.ts CHANGED
@@ -86,4 +86,50 @@ export interface InitializeOptions {
86
86
  */
87
87
  gitRef?: string;
88
88
  }
89
+ /** LLM token usage. Known fields map to OpenInference token-count keys;
90
+ * extra keys are preserved in the traceroot.llm.usage blob. */
91
+ export interface TokenUsage {
92
+ /** Uncached prompt tokens. */
93
+ input?: number;
94
+ /** Completion tokens. */
95
+ output?: number;
96
+ /** Cache-read (Anthropic cache_read_input_tokens). */
97
+ cacheRead?: number;
98
+ /** Cache-write / creation (Anthropic cache_creation_input_tokens). */
99
+ cacheWrite?: number;
100
+ /** Total; derived from prompt+completion if omitted. */
101
+ total?: number;
102
+ [key: string]: number | undefined;
103
+ }
104
+ export interface StartSpanOptions {
105
+ name: string;
106
+ type?: SpanType;
107
+ input?: unknown;
108
+ metadata?: Record<string, unknown>;
109
+ tags?: string[];
110
+ sessionId?: string;
111
+ userId?: string;
112
+ model?: string;
113
+ modelParameters?: Record<string, unknown>;
114
+ /** Arbitrary span attributes (see {@link SpanUpdate.attributes}). */
115
+ attributes?: Record<string, string | number | boolean>;
116
+ /** Explicit parent handle. Default: the current active span. */
117
+ parent?: import('./spans').Span;
118
+ }
119
+ export interface SpanUpdate {
120
+ name?: string;
121
+ input?: unknown;
122
+ output?: unknown;
123
+ metadata?: Record<string, unknown>;
124
+ model?: string;
125
+ modelParameters?: Record<string, unknown>;
126
+ usage?: TokenUsage;
127
+ /**
128
+ * Arbitrary span attributes for keys the typed fields above don't cover
129
+ * (e.g. `gen_ai.*` semconv keys, domain-specific tags). Set through to the
130
+ * underlying span verbatim — the escape hatch so callers never need raw
131
+ * OpenTelemetry for a one-off attribute.
132
+ */
133
+ attributes?: Record<string, string | number | boolean>;
134
+ }
89
135
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;AAEzD,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yEAAyE;IACzE,IAAI,CAAC,EAAE,QAAQ,CAAC;IAChB,iDAAiD;IACjD,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,mCAAmC;IACnC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB;;;;OAIG;IACH,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,iBAAiB;IAChC,sEAAsE;IACtE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,+EAA+E;IAC/E,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;;;;;;OAQG;IACH,iBAAiB,CAAC,EAAE;QAClB,MAAM,CAAC,EAAE,OAAO,CAAC;QACjB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,cAAc,CAAC,EAAE,OAAO,CAAC;QACzB,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB;;;;;;;WAOG;QACH,YAAY,CAAC,EAAE,OAAO,CAAC;KACxB,CAAC;IACF,uFAAuF;IACvF,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,sDAAsD;IACtD,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;IAC/C;;;OAGG;IACH,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@traceroot-ai/traceroot",
3
- "version": "0.1.5",
3
+ "version": "0.1.7",
4
4
  "description": "TraceRoot TypeScript SDK for AI observability",
5
5
  "keywords": [
6
6
  "traceroot",