@nodetool-ai/runtime 0.8.2 → 0.8.4-a13.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/dist/.nodetool-build-stamp +1 -1
  2. package/dist/canvas-codec.d.ts +3 -0
  3. package/dist/canvas-codec.d.ts.map +1 -0
  4. package/dist/canvas-codec.js +12 -0
  5. package/dist/canvas-codec.js.map +1 -0
  6. package/dist/context-packer.d.ts +1 -1
  7. package/dist/context-packer.js +1 -1
  8. package/dist/context.d.ts +3 -0
  9. package/dist/context.d.ts.map +1 -1
  10. package/dist/context.js +16 -5
  11. package/dist/context.js.map +1 -1
  12. package/dist/host-binaries.d.ts.map +1 -1
  13. package/dist/host-binaries.js +4 -3
  14. package/dist/host-binaries.js.map +1 -1
  15. package/dist/http-client-spans.d.ts +9 -0
  16. package/dist/http-client-spans.d.ts.map +1 -0
  17. package/dist/http-client-spans.js +88 -0
  18. package/dist/http-client-spans.js.map +1 -0
  19. package/dist/image-codec.d.ts +6 -3
  20. package/dist/image-codec.d.ts.map +1 -1
  21. package/dist/image-codec.js +17 -17
  22. package/dist/image-codec.js.map +1 -1
  23. package/dist/image-model-tasks.d.ts +20 -0
  24. package/dist/image-model-tasks.d.ts.map +1 -1
  25. package/dist/image-model-tasks.js +44 -1
  26. package/dist/image-model-tasks.js.map +1 -1
  27. package/dist/index.d.ts +4 -3
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +4 -3
  30. package/dist/index.js.map +1 -1
  31. package/dist/media-ref-bytes.d.ts.map +1 -1
  32. package/dist/media-ref-bytes.js +31 -6
  33. package/dist/media-ref-bytes.js.map +1 -1
  34. package/dist/otlp-json-trace-exporter.d.ts +89 -0
  35. package/dist/otlp-json-trace-exporter.d.ts.map +1 -0
  36. package/dist/otlp-json-trace-exporter.js +155 -0
  37. package/dist/otlp-json-trace-exporter.js.map +1 -0
  38. package/dist/prompt-asset-refs.d.ts +12 -1
  39. package/dist/prompt-asset-refs.d.ts.map +1 -1
  40. package/dist/prompt-asset-refs.js +9 -4
  41. package/dist/prompt-asset-refs.js.map +1 -1
  42. package/dist/providers/antigravity-provider.d.ts +113 -0
  43. package/dist/providers/antigravity-provider.d.ts.map +1 -0
  44. package/dist/providers/antigravity-provider.js +527 -0
  45. package/dist/providers/antigravity-provider.js.map +1 -0
  46. package/dist/providers/api-route-provider.d.ts +22 -0
  47. package/dist/providers/api-route-provider.d.ts.map +1 -0
  48. package/dist/providers/api-route-provider.js +56 -0
  49. package/dist/providers/api-route-provider.js.map +1 -0
  50. package/dist/providers/azure-openai-provider.d.ts +69 -0
  51. package/dist/providers/azure-openai-provider.d.ts.map +1 -0
  52. package/dist/providers/azure-openai-provider.js +233 -0
  53. package/dist/providers/azure-openai-provider.js.map +1 -0
  54. package/dist/providers/base-provider.d.ts.map +1 -1
  55. package/dist/providers/base-provider.js +41 -4
  56. package/dist/providers/base-provider.js.map +1 -1
  57. package/dist/providers/bedrock-provider.d.ts +52 -0
  58. package/dist/providers/bedrock-provider.d.ts.map +1 -0
  59. package/dist/providers/bedrock-provider.js +648 -0
  60. package/dist/providers/bedrock-provider.js.map +1 -0
  61. package/dist/providers/bedrock-transport.d.ts +37 -0
  62. package/dist/providers/bedrock-transport.d.ts.map +1 -0
  63. package/dist/providers/bedrock-transport.js +186 -0
  64. package/dist/providers/bedrock-transport.js.map +1 -0
  65. package/dist/providers/chatgpt-provider.d.ts +48 -0
  66. package/dist/providers/chatgpt-provider.d.ts.map +1 -0
  67. package/dist/providers/chatgpt-provider.js +551 -0
  68. package/dist/providers/chatgpt-provider.js.map +1 -0
  69. package/dist/providers/claude-agent-provider.d.ts +29 -51
  70. package/dist/providers/claude-agent-provider.d.ts.map +1 -1
  71. package/dist/providers/claude-agent-provider.js +144 -202
  72. package/dist/providers/claude-agent-provider.js.map +1 -1
  73. package/dist/providers/claude-cli.d.ts +265 -0
  74. package/dist/providers/claude-cli.d.ts.map +1 -0
  75. package/dist/providers/claude-cli.js +488 -0
  76. package/dist/providers/claude-cli.js.map +1 -0
  77. package/dist/providers/codex-provider.d.ts +9 -2
  78. package/dist/providers/codex-provider.d.ts.map +1 -1
  79. package/dist/providers/codex-provider.js +25 -11
  80. package/dist/providers/codex-provider.js.map +1 -1
  81. package/dist/providers/context-window.d.ts.map +1 -1
  82. package/dist/providers/context-window.js +1 -0
  83. package/dist/providers/context-window.js.map +1 -1
  84. package/dist/providers/core-tools.d.ts +4 -1
  85. package/dist/providers/core-tools.d.ts.map +1 -1
  86. package/dist/providers/core-tools.js +5 -3
  87. package/dist/providers/core-tools.js.map +1 -1
  88. package/dist/providers/cost-calculator.d.ts.map +1 -1
  89. package/dist/providers/cost-calculator.js +9 -0
  90. package/dist/providers/cost-calculator.js.map +1 -1
  91. package/dist/providers/credential-check.d.ts +8 -0
  92. package/dist/providers/credential-check.d.ts.map +1 -1
  93. package/dist/providers/credential-check.js +22 -0
  94. package/dist/providers/credential-check.js.map +1 -1
  95. package/dist/providers/custom-openai-provider.d.ts.map +1 -1
  96. package/dist/providers/custom-openai-provider.js +19 -1
  97. package/dist/providers/custom-openai-provider.js.map +1 -1
  98. package/dist/providers/dreamina-pending.d.ts +22 -0
  99. package/dist/providers/dreamina-pending.d.ts.map +1 -0
  100. package/dist/providers/dreamina-pending.js +86 -0
  101. package/dist/providers/dreamina-pending.js.map +1 -0
  102. package/dist/providers/dreamina-provider.d.ts +10 -3
  103. package/dist/providers/dreamina-provider.d.ts.map +1 -1
  104. package/dist/providers/dreamina-provider.js +325 -45
  105. package/dist/providers/dreamina-provider.js.map +1 -1
  106. package/dist/providers/extension-tab.d.ts +42 -0
  107. package/dist/providers/extension-tab.d.ts.map +1 -0
  108. package/dist/providers/extension-tab.js +200 -0
  109. package/dist/providers/extension-tab.js.map +1 -0
  110. package/dist/providers/fake-provider.d.ts +3 -1
  111. package/dist/providers/fake-provider.d.ts.map +1 -1
  112. package/dist/providers/fake-provider.js +63 -9
  113. package/dist/providers/fake-provider.js.map +1 -1
  114. package/dist/providers/fake-schema-answer.d.ts +10 -0
  115. package/dist/providers/fake-schema-answer.d.ts.map +1 -0
  116. package/dist/providers/fake-schema-answer.js +64 -0
  117. package/dist/providers/fake-schema-answer.js.map +1 -0
  118. package/dist/providers/fal-provider.d.ts.map +1 -1
  119. package/dist/providers/fal-provider.js +5 -2
  120. package/dist/providers/fal-provider.js.map +1 -1
  121. package/dist/providers/gemini-web-provider.d.ts +76 -0
  122. package/dist/providers/gemini-web-provider.d.ts.map +1 -0
  123. package/dist/providers/gemini-web-provider.js +827 -0
  124. package/dist/providers/gemini-web-provider.js.map +1 -0
  125. package/dist/providers/http-transport.d.ts.map +1 -1
  126. package/dist/providers/http-transport.js +2 -0
  127. package/dist/providers/http-transport.js.map +1 -1
  128. package/dist/providers/huggingface-provider.d.ts.map +1 -1
  129. package/dist/providers/huggingface-provider.js +17 -1
  130. package/dist/providers/huggingface-provider.js.map +1 -1
  131. package/dist/providers/index.d.ts +18 -2
  132. package/dist/providers/index.d.ts.map +1 -1
  133. package/dist/providers/index.js +66 -15
  134. package/dist/providers/index.js.map +1 -1
  135. package/dist/providers/llama-provider.d.ts +8 -0
  136. package/dist/providers/llama-provider.d.ts.map +1 -1
  137. package/dist/providers/llama-provider.js +23 -5
  138. package/dist/providers/llama-provider.js.map +1 -1
  139. package/dist/providers/lmstudio-provider.js +2 -2
  140. package/dist/providers/lmstudio-provider.js.map +1 -1
  141. package/dist/providers/manifest-models.d.ts +2 -12
  142. package/dist/providers/manifest-models.d.ts.map +1 -1
  143. package/dist/providers/manifest-models.js +45 -3
  144. package/dist/providers/manifest-models.js.map +1 -1
  145. package/dist/providers/meta-provider.d.ts +53 -6
  146. package/dist/providers/meta-provider.d.ts.map +1 -1
  147. package/dist/providers/meta-provider.js +289 -6
  148. package/dist/providers/meta-provider.js.map +1 -1
  149. package/dist/providers/meta-segmentation.d.ts +27 -0
  150. package/dist/providers/meta-segmentation.d.ts.map +1 -0
  151. package/dist/providers/meta-segmentation.js +141 -0
  152. package/dist/providers/meta-segmentation.js.map +1 -0
  153. package/dist/providers/meta-transcription.d.ts +31 -0
  154. package/dist/providers/meta-transcription.d.ts.map +1 -0
  155. package/dist/providers/meta-transcription.js +187 -0
  156. package/dist/providers/meta-transcription.js.map +1 -0
  157. package/dist/providers/node-llama-cpp-provider.d.ts +6 -3
  158. package/dist/providers/node-llama-cpp-provider.d.ts.map +1 -1
  159. package/dist/providers/node-llama-cpp-provider.js +77 -62
  160. package/dist/providers/node-llama-cpp-provider.js.map +1 -1
  161. package/dist/providers/ollama-provider.d.ts +23 -0
  162. package/dist/providers/ollama-provider.d.ts.map +1 -1
  163. package/dist/providers/ollama-provider.js +140 -27
  164. package/dist/providers/ollama-provider.js.map +1 -1
  165. package/dist/providers/openai-compat/client.d.ts +10 -1
  166. package/dist/providers/openai-compat/client.d.ts.map +1 -1
  167. package/dist/providers/openai-compat/client.js +21 -3
  168. package/dist/providers/openai-compat/client.js.map +1 -1
  169. package/dist/providers/openai-compat/index.d.ts +1 -1
  170. package/dist/providers/openai-compat/index.d.ts.map +1 -1
  171. package/dist/providers/openai-compat/index.js +1 -1
  172. package/dist/providers/openai-compat/index.js.map +1 -1
  173. package/dist/providers/openai-compat/types.d.ts +4 -0
  174. package/dist/providers/openai-compat/types.d.ts.map +1 -1
  175. package/dist/providers/openai-compat-provider.d.ts +11 -0
  176. package/dist/providers/openai-compat-provider.d.ts.map +1 -1
  177. package/dist/providers/openai-compat-provider.js +47 -2
  178. package/dist/providers/openai-compat-provider.js.map +1 -1
  179. package/dist/providers/openai-provider.d.ts +15 -0
  180. package/dist/providers/openai-provider.d.ts.map +1 -1
  181. package/dist/providers/openai-provider.js +50 -12
  182. package/dist/providers/openai-provider.js.map +1 -1
  183. package/dist/providers/opper-provider.d.ts +31 -0
  184. package/dist/providers/opper-provider.d.ts.map +1 -0
  185. package/dist/providers/opper-provider.js +91 -0
  186. package/dist/providers/opper-provider.js.map +1 -0
  187. package/dist/providers/provider-request-log.d.ts.map +1 -1
  188. package/dist/providers/provider-request-log.js +3 -2
  189. package/dist/providers/provider-request-log.js.map +1 -1
  190. package/dist/providers/python-provider.d.ts.map +1 -1
  191. package/dist/providers/python-provider.js +5 -3
  192. package/dist/providers/python-provider.js.map +1 -1
  193. package/dist/providers/responses-api.d.ts +12 -2
  194. package/dist/providers/responses-api.d.ts.map +1 -1
  195. package/dist/providers/responses-api.js +54 -3
  196. package/dist/providers/responses-api.js.map +1 -1
  197. package/dist/providers/safe-url.d.ts.map +1 -1
  198. package/dist/providers/safe-url.js +8 -0
  199. package/dist/providers/safe-url.js.map +1 -1
  200. package/dist/providers/scripted-provider.d.ts.map +1 -1
  201. package/dist/providers/scripted-provider.js +6 -1
  202. package/dist/providers/scripted-provider.js.map +1 -1
  203. package/dist/providers/types.d.ts +16 -0
  204. package/dist/providers/types.d.ts.map +1 -1
  205. package/dist/providers/types.js.map +1 -1
  206. package/dist/providers/vgenv-provider.d.ts +33 -0
  207. package/dist/providers/vgenv-provider.d.ts.map +1 -0
  208. package/dist/providers/vgenv-provider.js +261 -0
  209. package/dist/providers/vgenv-provider.js.map +1 -0
  210. package/dist/providers/vllm-provider.d.ts +7 -0
  211. package/dist/providers/vllm-provider.d.ts.map +1 -1
  212. package/dist/providers/vllm-provider.js +15 -3
  213. package/dist/providers/vllm-provider.js.map +1 -1
  214. package/dist/python-bridge-base.d.ts +16 -6
  215. package/dist/python-bridge-base.d.ts.map +1 -1
  216. package/dist/python-bridge-base.js +117 -40
  217. package/dist/python-bridge-base.js.map +1 -1
  218. package/dist/python-bridge-codec.d.ts +16 -1
  219. package/dist/python-bridge-codec.d.ts.map +1 -1
  220. package/dist/python-bridge-codec.js +60 -2
  221. package/dist/python-bridge-codec.js.map +1 -1
  222. package/dist/python-bridge-framing.d.ts +10 -1
  223. package/dist/python-bridge-framing.d.ts.map +1 -1
  224. package/dist/python-bridge-framing.js +33 -8
  225. package/dist/python-bridge-framing.js.map +1 -1
  226. package/dist/python-bridge-types.d.ts +26 -5
  227. package/dist/python-bridge-types.d.ts.map +1 -1
  228. package/dist/python-bridge-types.js.map +1 -1
  229. package/dist/python-graph-resolver.d.ts.map +1 -1
  230. package/dist/python-graph-resolver.js +12 -2
  231. package/dist/python-graph-resolver.js.map +1 -1
  232. package/dist/python-node-executor.d.ts +14 -3
  233. package/dist/python-node-executor.d.ts.map +1 -1
  234. package/dist/python-node-executor.js +185 -3
  235. package/dist/python-node-executor.js.map +1 -1
  236. package/dist/python-stdio-bridge.d.ts +6 -0
  237. package/dist/python-stdio-bridge.d.ts.map +1 -1
  238. package/dist/python-stdio-bridge.js +58 -12
  239. package/dist/python-stdio-bridge.js.map +1 -1
  240. package/dist/run-trace-context.d.ts +2 -27
  241. package/dist/run-trace-context.d.ts.map +1 -1
  242. package/dist/run-trace-context.js +4 -51
  243. package/dist/run-trace-context.js.map +1 -1
  244. package/dist/run-trace-processor.d.ts +3 -0
  245. package/dist/run-trace-processor.d.ts.map +1 -1
  246. package/dist/run-trace-processor.js +63 -46
  247. package/dist/run-trace-processor.js.map +1 -1
  248. package/dist/run-trace-scope.d.ts +28 -0
  249. package/dist/run-trace-scope.d.ts.map +1 -0
  250. package/dist/run-trace-scope.js +51 -0
  251. package/dist/run-trace-scope.js.map +1 -0
  252. package/dist/run-trace-serialization.d.ts.map +1 -1
  253. package/dist/run-trace-serialization.js +4 -3
  254. package/dist/run-trace-serialization.js.map +1 -1
  255. package/dist/span-record.d.ts +4 -0
  256. package/dist/span-record.d.ts.map +1 -0
  257. package/dist/span-record.js +48 -0
  258. package/dist/span-record.js.map +1 -0
  259. package/dist/swappable-python-bridge.d.ts +6 -6
  260. package/dist/swappable-python-bridge.d.ts.map +1 -1
  261. package/dist/swappable-python-bridge.js +10 -10
  262. package/dist/swappable-python-bridge.js.map +1 -1
  263. package/dist/telemetry.d.ts +2 -2
  264. package/dist/telemetry.d.ts.map +1 -1
  265. package/dist/telemetry.js +33 -34
  266. package/dist/telemetry.js.map +1 -1
  267. package/dist/testing.d.ts +1 -1
  268. package/dist/testing.d.ts.map +1 -1
  269. package/dist/testing.js +55 -3
  270. package/dist/testing.js.map +1 -1
  271. package/dist/token-counter.d.ts +4 -13
  272. package/dist/token-counter.d.ts.map +1 -1
  273. package/dist/token-counter.js +68 -18
  274. package/dist/token-counter.js.map +1 -1
  275. package/dist/trace-context-manager.d.ts +12 -0
  276. package/dist/trace-context-manager.d.ts.map +1 -0
  277. package/dist/trace-context-manager.js +30 -0
  278. package/dist/trace-context-manager.js.map +1 -0
  279. package/dist/trace-exporters.d.ts +2 -3
  280. package/dist/trace-exporters.d.ts.map +1 -1
  281. package/dist/trace-exporters.js +5 -52
  282. package/dist/trace-exporters.js.map +1 -1
  283. package/dist/trace-semantic-conventions.d.ts +2 -0
  284. package/dist/trace-semantic-conventions.d.ts.map +1 -0
  285. package/dist/trace-semantic-conventions.js +2 -0
  286. package/dist/trace-semantic-conventions.js.map +1 -0
  287. package/dist/traced-storage.d.ts +17 -0
  288. package/dist/traced-storage.d.ts.map +1 -0
  289. package/dist/traced-storage.js +41 -0
  290. package/dist/traced-storage.js.map +1 -0
  291. package/dist/tracing-module.d.ts +3 -0
  292. package/dist/tracing-module.d.ts.map +1 -0
  293. package/dist/tracing-module.js +12 -0
  294. package/dist/tracing-module.js.map +1 -0
  295. package/package.json +37 -18
package/dist/telemetry.js CHANGED
@@ -14,7 +14,7 @@
14
14
  * is appended)
15
15
  * OTEL_EXPORTER_OTLP_TRACES_ENDPOINT — Full traces URL, used as given;
16
16
  * wins over OTEL_EXPORTER_OTLP_ENDPOINT
17
- * OTEL_EXPORTER_OTLP_HEADERS — Extra exporter headers (read by the SDK)
17
+ * OTEL_EXPORTER_OTLP_HEADERS — Extra exporter headers (comma-separated key=value)
18
18
  * OTEL_SERVICE_NAME — Service name tag (default: "nodetool")
19
19
  * OTEL_TRACES_EXPORTER=console — Print spans to stdout via OTel SDK
20
20
  * TRACELOOP_DISABLE_BATCH=true — Flush spans immediately (dev mode)
@@ -28,19 +28,25 @@
28
28
  */
29
29
  import { context, propagation, trace } from "@opentelemetry/api";
30
30
  import { createLogger, setLogHook } from "@nodetool-ai/config";
31
- import { ContentFilteringSpanExporter, RunTraceSpanProcessor, installRunTraceLogHook } from "./run-trace-processor.js";
31
+ import { ContentFilteringSpanExporter, RunTraceSpanProcessor, installRunTraceLogHook, hasRunTraceStore } from "./run-trace-processor.js";
32
+ import { loadTracingModule } from "./tracing-module.js";
32
33
  import { getRunTraceScope } from "./run-trace-context.js";
33
34
  import { TRACE_SPAN_EVENT_LIMIT } from "@nodetool-ai/protocol";
35
+ import { ATTR_SERVICE_NAME } from "./trace-semantic-conventions.js";
36
+ import { NodeTraceContextManager } from "./trace-context-manager.js";
37
+ import { httpClientTracer, installHttpClientSpans } from "./http-client-spans.js";
34
38
  const log = createLogger("nodetool.runtime.telemetry");
35
39
  let _tracer = null;
36
40
  let _initialized = false;
37
41
  let _sdk = null;
42
+ /** Stops the outbound fetch spans that `initTelemetry` started. */
43
+ let _uninstallHttpClientSpans = null;
38
44
  let _processors = [];
39
45
  /**
40
46
  * Initialize OpenTelemetry instrumentation.
41
47
  *
42
48
  * Idempotent: calling more than once is a no-op (returns the previous result).
43
- * The durable processor is always active. External sinks remain optional.
49
+ * A configured durable store or external sink enables instrumentation.
44
50
  */
45
51
  export async function initTelemetry(options = {}) {
46
52
  if (_initialized)
@@ -64,11 +70,12 @@ export async function initTelemetry(options = {}) {
64
70
  })();
65
71
  const traceFilePath = options.traceFile ?? process.env["NODETOOL_TRACE_FILE"];
66
72
  const hasOtlp = !!(traceloopKey || otlpEndpoint || otlpTracesEndpoint);
67
- const { NodeSDK } = await import("@opentelemetry/sdk-node");
68
- const { resourceFromAttributes } = await import("@opentelemetry/resources");
69
- const { ATTR_SERVICE_NAME } = await import("@opentelemetry/semantic-conventions");
70
- const otelApi = await import("@opentelemetry/api");
71
- const { BatchSpanProcessor, SimpleSpanProcessor, ConsoleSpanExporter, RandomIdGenerator, AlwaysOnSampler } = await import("@opentelemetry/sdk-trace-base");
73
+ if (!hasOtlp && !consoleMode && !stdoutFormat && !traceFilePath && !hasRunTraceStore()) {
74
+ return false;
75
+ }
76
+ const { CompositePropagator, W3CTraceContextPropagator, W3CBaggagePropagator } = await loadTracingModule("@opentelemetry/core");
77
+ const { resourceFromAttributes } = await loadTracingModule("@opentelemetry/resources");
78
+ const { BasicTracerProvider, BatchSpanProcessor, SimpleSpanProcessor, ConsoleSpanExporter, RandomIdGenerator, AlwaysOnSampler } = await loadTracingModule("@opentelemetry/sdk-trace-base");
72
79
  const serviceName = options.serviceName ?? process.env["OTEL_SERVICE_NAME"] ?? "nodetool";
73
80
  const disableBatch = options.disableBatch ?? process.env["TRACELOOP_DISABLE_BATCH"] === "true";
74
81
  const processor = new RunTraceSpanProcessor();
@@ -76,19 +83,15 @@ export async function initTelemetry(options = {}) {
76
83
  _processors = processors;
77
84
  const destinations = ["run-store"];
78
85
  if (hasOtlp) {
79
- const { OTLPTraceExporter } = await import("@opentelemetry/exporter-trace-otlp-proto");
80
- const url = otlpTracesEndpoint
81
- ? otlpTracesEndpoint
82
- : otlpEndpoint
83
- ? `${otlpEndpoint.replace(/\/+$/, "")}/v1/traces`
84
- : "https://api.traceloop.com/v1/traces";
85
- const headers = traceloopKey
86
- ? { Authorization: `Bearer ${traceloopKey}` }
87
- : {};
88
- const exporter = new OTLPTraceExporter({ url, headers });
86
+ const { OtlpJsonTraceExporter, otlpExporterConfigFromEnv } = await import("./otlp-json-trace-exporter.js");
87
+ const config = otlpExporterConfigFromEnv(process.env);
88
+ if (!config) {
89
+ throw new Error("OTLP endpoint configuration is missing");
90
+ }
91
+ const exporter = new OtlpJsonTraceExporter(config);
89
92
  const Proc = disableBatch ? SimpleSpanProcessor : BatchSpanProcessor;
90
93
  processors.push(new Proc(new ContentFilteringSpanExporter(exporter)));
91
- destinations.push(traceloopKey ? "traceloop" : `otlp:${url}`);
94
+ destinations.push(traceloopKey ? "traceloop" : `otlp:${config.url}`);
92
95
  }
93
96
  if (consoleMode) {
94
97
  processors.push(new SimpleSpanProcessor(new ContentFilteringSpanExporter(new ConsoleSpanExporter())));
@@ -106,28 +109,22 @@ export async function initTelemetry(options = {}) {
106
109
  processors.push(new SimpleSpanProcessor(new ContentFilteringSpanExporter(new JsonlFileSpanExporter(traceFilePath))));
107
110
  destinations.push(`file:${traceFilePath}`);
108
111
  }
109
- // Outbound `fetch` (provider APIs, S3, Supabase, safeFetch) becomes
110
- // `HTTP <method>` client spans. undici publishes on diagnostics_channel, so
111
- // this works in ESM and in the bundled backend without a loader hook. The
112
- // OTLP exporter sends over `node:http`, so it never traces itself.
113
- const { UndiciInstrumentation } = await import("@opentelemetry/instrumentation-undici");
114
112
  const ids = new RandomIdGenerator();
115
- const sdk = new NodeSDK({
113
+ const sdk = new BasicTracerProvider({
116
114
  resource: resourceFromAttributes({ [ATTR_SERVICE_NAME]: serviceName }),
117
- autoDetectResources: false,
118
115
  spanProcessors: processors,
119
116
  sampler: new AlwaysOnSampler(),
120
117
  spanLimits: { eventCountLimit: TRACE_SPAN_EVENT_LIMIT },
121
- idGenerator: { generateTraceId: () => getRunTraceScope()?.traceId ?? ids.generateTraceId(), generateSpanId: () => ids.generateSpanId() },
122
- instrumentations: [new UndiciInstrumentation()]
118
+ idGenerator: { generateTraceId: () => getRunTraceScope()?.traceId ?? ids.generateTraceId(), generateSpanId: () => ids.generateSpanId() }
123
119
  });
124
- // sdk.start() is typed as void in current SDK versions, but historically
125
- // returned a Promise — `await` is a no-op on non-thenable values, so this
126
- // is safe across versions and avoids racing the first spans on any
127
- // version that does init asynchronously.
128
- await sdk.start();
120
+ context.setGlobalContextManager(new NodeTraceContextManager());
121
+ propagation.setGlobalPropagator(new CompositePropagator({
122
+ propagators: [new W3CTraceContextPropagator(), new W3CBaggagePropagator()]
123
+ }));
124
+ trace.setGlobalTracerProvider(sdk);
125
+ _uninstallHttpClientSpans = installHttpClientSpans(httpClientTracer());
129
126
  _sdk = sdk;
130
- _tracer = otelApi.trace.getTracer("nodetool", "0.1.0");
127
+ _tracer = trace.getTracer("nodetool", "0.1.0");
131
128
  _initialized = true;
132
129
  installRunTraceLogHook();
133
130
  if (!options.silent) {
@@ -150,6 +147,8 @@ export function getTracer() {
150
147
  export async function shutdownTelemetry() {
151
148
  const sdk = _sdk;
152
149
  _sdk = null;
150
+ _uninstallHttpClientSpans?.();
151
+ _uninstallHttpClientSpans = null;
153
152
  _tracer = null;
154
153
  _initialized = false;
155
154
  _processors = [];
@@ -1 +1 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
package/dist/testing.d.ts CHANGED
@@ -61,7 +61,7 @@ export interface FakeContextHandle {
61
61
  }
62
62
  /**
63
63
  * Build a ProcessingContext wired to in-memory storage, an in-memory cache,
64
- * a fake-provider resolver, and a stubbed `fetch`. The returned handle owns
64
+ * in-memory asset creation, a fake-provider resolver, and a stubbed `fetch`. The returned handle owns
65
65
  * the temp workspace dir; call `cleanup()` when done.
66
66
  */
67
67
  export declare function createFakeContext(options?: FakeContextOptions): FakeContextHandle;
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,iBAAiB,EAAe,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGjE,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzC;;;OAGG;IACH,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnE;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAChD;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AAoBD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CA2DnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAC5E,MAAM,IAAI,CAyBZ"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAqBA,OAAO,EAAE,iBAAiB,EAAe,MAAM,cAAc,CAAC;AAE9D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAGjE,MAAM,WAAW,kBAAkB;IACjC;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzC;;;OAGG;IACH,eAAe,CAAC,EAAE,YAAY,CAAC;IAC/B;;;;OAIG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,OAAO,CAAC,QAAQ,CAAC,CAAC;IACnE;;;;;;;;;;OAUG;IACH,cAAc,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;IAChD;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACpC;;;OAGG;IACH,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB;;OAEG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gFAAgF;IAChF,mBAAmB,CAAC,EAAE,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,iBAAiB,CAAC;IAC3B,0EAA0E;IAC1E,YAAY,EAAE,MAAM,CAAC;IACrB,sEAAsE;IACtE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACrC;;;OAGG;IACH,OAAO,IAAI,IAAI,CAAC;CACjB;AAgCD;;;;GAIG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,GAAE,kBAAuB,GAC/B,iBAAiB,CAwGnB;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,eAAe,CAC7B,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,WAAW,KAAK,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAC5E,MAAM,IAAI,CAyBZ"}
package/dist/testing.js CHANGED
@@ -29,9 +29,20 @@ function defaultFakeFetch() {
29
29
  });
30
30
  };
31
31
  }
32
+ /** File extensions for the media types fake providers emit. */
33
+ const FAKE_ASSET_EXT = {
34
+ "image/png": "png",
35
+ "image/jpeg": "jpg",
36
+ "image/webp": "webp",
37
+ "video/mp4": "mp4",
38
+ "audio/wav": "wav",
39
+ "audio/x-wav": "wav",
40
+ "audio/mpeg": "mp3",
41
+ "model/gltf-binary": "glb"
42
+ };
32
43
  /**
33
44
  * Build a ProcessingContext wired to in-memory storage, an in-memory cache,
34
- * a fake-provider resolver, and a stubbed `fetch`. The returned handle owns
45
+ * in-memory asset creation, a fake-provider resolver, and a stubbed `fetch`. The returned handle owns
35
46
  * the temp workspace dir; call `cleanup()` when done.
36
47
  */
37
48
  export function createFakeContext(options = {}) {
@@ -42,12 +53,17 @@ export function createFakeContext(options = {}) {
42
53
  for (const [id, prov] of Object.entries(options.providers ?? {})) {
43
54
  providers.set(id, prov);
44
55
  }
56
+ const userId = "fake-user";
57
+ const storage = new InMemoryStorageAdapter();
58
+ let assetCounter = 0;
59
+ let sequenceCounter = 0;
60
+ const sequences = new Map();
45
61
  const context = new ProcessingContext({
46
62
  jobId: options.jobId ?? "fake-job",
47
- userId: "fake-user",
63
+ userId,
48
64
  workspaceDir,
49
65
  cache: new MemoryCache(),
50
- storage: new InMemoryStorageAdapter(),
66
+ storage,
51
67
  workspaceStorage: new InMemoryStorageAdapter(),
52
68
  variables: options.variables ?? {},
53
69
  persistOutputAssets: options.persistOutputAssets ?? true,
@@ -64,6 +80,42 @@ export function createFakeContext(options = {}) {
64
80
  // credential. Providers don't consult this resolver because the
65
81
  // provider-resolver short-circuits the secret lookup.
66
82
  return "";
83
+ },
84
+ modelInterfaces: {
85
+ // Generated media is saved as an asset and handed downstream as
86
+ // `asset://<id>.<ext>`. Store the bytes in the in-memory storage under
87
+ // every key that ref can resolve to, so the next node reads them back.
88
+ createAsset: async (args) => {
89
+ assetCounter += 1;
90
+ const id = `fakeasset${String(assetCounter).padStart(23, "0")}`;
91
+ const exts = new Set([
92
+ path.extname(args.name).slice(1),
93
+ FAKE_ASSET_EXT[args.contentType] ?? ""
94
+ ]);
95
+ await storage.store(`${userId}/${id}`, args.content, args.contentType);
96
+ for (const ext of exts) {
97
+ if (ext) {
98
+ await storage.store(`${userId}/${id}.${ext}`, args.content, args.contentType);
99
+ }
100
+ }
101
+ return { id, name: args.name, content_type: args.contentType };
102
+ },
103
+ // Timeline nodes save a sequence document and read it back by id.
104
+ createTimelineSequence: async ({ sequence }) => {
105
+ sequenceCounter += 1;
106
+ const id = `fake-sequence-${sequenceCounter}`;
107
+ const saved = { ...sequence, id };
108
+ sequences.set(id, saved);
109
+ return saved;
110
+ },
111
+ getTimelineSequence: async ({ id }) => sequences.get(id) ?? null,
112
+ updateTimelineSequence: async ({ id, sequence }) => {
113
+ if (!sequences.has(id))
114
+ return null;
115
+ const saved = { ...sequence, id };
116
+ sequences.set(id, saved);
117
+ return saved;
118
+ }
67
119
  }
68
120
  });
69
121
  context.setProviderResolver((providerId) => {
@@ -1 +1 @@
1
- {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"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"}
@@ -1,20 +1,11 @@
1
+ /** Start one optional load. Async callers can await exact counting readiness. */
2
+ export declare function initializeTokenCounter(): Promise<void>;
1
3
  /**
2
- * Accurate token counting via js-tiktoken.
3
- *
4
- * All token counting in the codebase routes through this module so estimates
5
- * match the BPE tokenization real models use instead of char- or word-based
6
- * approximations. Uses the `cl100k_base` encoding (GPT-3.5/4 family), a good
7
- * general-purpose proxy across providers for budgeting, packing and eviction.
8
- *
9
- * The encoder is built once and cached — `getEncoding` bundles the BPE ranks,
10
- * so there is no I/O after the first call.
11
- */
12
- /**
13
- * Count BPE tokens in a string. Returns 0 for empty/nullish input.
4
+ * Count tokens exactly when ready, otherwise estimate. Empty/nullish input is 0.
14
5
  */
15
6
  export declare function countTokens(text: string | null | undefined): number;
16
7
  /**
17
- * Truncate text to at most `maxTokens` BPE tokens, decoding the kept prefix
8
+ * Truncate text to at most `maxTokens` counted tokens, decoding the exact prefix
18
9
  * back to a string. Returns "" when `maxTokens <= 0`.
19
10
  *
20
11
  * Encodes piece-by-piece (same splitting as {@link countTokens}) and stops once
@@ -1 +1 @@
1
- {"version":3,"file":"token-counter.d.ts","sourceRoot":"","sources":["../src/token-counter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA4EH;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAQnE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAkBxE"}
1
+ {"version":3,"file":"token-counter.d.ts","sourceRoot":"","sources":["../src/token-counter.ts"],"names":[],"mappings":"AAcA,iFAAiF;AACjF,wBAAgB,sBAAsB,IAAI,OAAO,CAAC,IAAI,CAAC,CAgBtD;AAsGD;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAWnE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CA8BxE"}
@@ -1,21 +1,56 @@
1
1
  /**
2
- * Accurate token counting via js-tiktoken.
3
- *
4
- * All token counting in the codebase routes through this module so estimates
5
- * match the BPE tokenization real models use instead of char- or word-based
6
- * approximations. Uses the `cl100k_base` encoding (GPT-3.5/4 family), a good
7
- * general-purpose proxy across providers for budgeting, packing and eviction.
8
- *
9
- * The encoder is built once and cached — `getEncoding` bundles the BPE ranks,
10
- * so there is no I/O after the first call.
2
+ * Synchronous token budgeting with a calibrated estimate until the optional
3
+ * cl100k_base encoder is ready. Long BPE runs remain bounded below.
11
4
  */
12
- import { getEncoding } from "js-tiktoken";
5
+ import { importOptionalModule } from "@nodetool-ai/config";
13
6
  let cachedEncoder = null;
14
- function getEncoder() {
15
- if (cachedEncoder === null) {
16
- cachedEncoder = getEncoding("cl100k_base");
7
+ let initialization;
8
+ /** Start one optional load. Async callers can await exact counting readiness. */
9
+ export function initializeTokenCounter() {
10
+ // Start inside the chain: this runs on module load, so a loader that throws
11
+ // synchronously must reject here instead of failing every importer.
12
+ initialization ??= Promise.resolve()
13
+ .then(() => importOptionalModule("js-tiktoken"))
14
+ .then((library) => {
15
+ cachedEncoder = library.getEncoding("cl100k_base");
16
+ })
17
+ .catch(() => {
18
+ // Token budgeting remains available when the optional encoder cannot load.
19
+ });
20
+ return initialization;
21
+ }
22
+ // Do not block synchronous callers or startup on loading the encoding tables.
23
+ void initializeTokenCounter();
24
+ /**
25
+ * ASCII letters and whitespace use 4.5 chars/token, digits use 3, punctuation uses
26
+ * 2 chars/token. CJK needs separate weights: Han 1, kana 0.8, Hangul 1.25
27
+ * tokens/character. Calibration fixtures stay between exact and 35% over.
28
+ * These are budgeting estimates, not universal BPE upper bounds.
29
+ * Integer units avoid rounding drift in long inputs. No splitting is needed.
30
+ */
31
+ function characterUnits(code) {
32
+ if (code < 128) {
33
+ if (code >= 48 && code <= 57) {
34
+ return 60;
35
+ }
36
+ const letter = (code >= 65 && code <= 90) ||
37
+ (code >= 97 && code <= 122);
38
+ return letter || code === 32 || (code >= 9 && code <= 13) ? 40 : 90;
39
+ }
40
+ if (code >= 0x3040 && code <= 0x30ff) {
41
+ return 144;
42
+ }
43
+ if (code >= 0xac00 && code <= 0xd7af) {
44
+ return 225;
17
45
  }
18
- return cachedEncoder;
46
+ return code > 0xffff ? 540 : 180;
47
+ }
48
+ function estimateTokens(text) {
49
+ let units = 0;
50
+ for (const character of text) {
51
+ units += characterUnits(character.codePointAt(0) ?? 0);
52
+ }
53
+ return Math.ceil(units / 180);
19
54
  }
20
55
  /**
21
56
  * js-tiktoken's pure-JS BPE is O(n²) within a single regex "piece", so a long
@@ -78,12 +113,15 @@ function* encodingPieces(text) {
78
113
  }
79
114
  }
80
115
  /**
81
- * Count BPE tokens in a string. Returns 0 for empty/nullish input.
116
+ * Count tokens exactly when ready, otherwise estimate. Empty/nullish input is 0.
82
117
  */
83
118
  export function countTokens(text) {
84
119
  if (!text)
85
120
  return 0;
86
- const encoder = getEncoder();
121
+ const encoder = cachedEncoder;
122
+ if (encoder === null) {
123
+ return estimateTokens(text);
124
+ }
87
125
  let total = 0;
88
126
  for (const piece of encodingPieces(text)) {
89
127
  total += encoder.encode(piece, [], []).length;
@@ -91,7 +129,7 @@ export function countTokens(text) {
91
129
  return total;
92
130
  }
93
131
  /**
94
- * Truncate text to at most `maxTokens` BPE tokens, decoding the kept prefix
132
+ * Truncate text to at most `maxTokens` counted tokens, decoding the exact prefix
95
133
  * back to a string. Returns "" when `maxTokens <= 0`.
96
134
  *
97
135
  * Encodes piece-by-piece (same splitting as {@link countTokens}) and stops once
@@ -106,7 +144,19 @@ export function countTokens(text) {
106
144
  export function truncateToTokens(text, maxTokens) {
107
145
  if (maxTokens <= 0)
108
146
  return "";
109
- const encoder = getEncoder();
147
+ const encoder = cachedEncoder;
148
+ if (encoder === null) {
149
+ let units = 0;
150
+ let end = 0;
151
+ for (const character of text) {
152
+ units += characterUnits(character.codePointAt(0) ?? 0);
153
+ if (Math.ceil(units / 180) > maxTokens) {
154
+ break;
155
+ }
156
+ end += character.length;
157
+ }
158
+ return stripTrailingPartialChar(text.slice(0, end));
159
+ }
110
160
  const kept = [];
111
161
  let truncated = false;
112
162
  for (const piece of encodingPieces(text)) {
@@ -1 +1 @@
1
- {"version":3,"file":"token-counter.js","sourceRoot":"","sources":["../src/token-counter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"token-counter.js","sourceRoot":"","sources":["../src/token-counter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ import { type Context, type ContextManager } from "@opentelemetry/api";
2
+ /** Preserve active spans across Node promises and timers. */
3
+ export declare class NodeTraceContextManager implements ContextManager {
4
+ private readonly storage;
5
+ constructor();
6
+ active(): Context;
7
+ with<A extends unknown[], F extends (...args: A) => ReturnType<F>>(context: Context, fn: F, thisArg?: ThisParameterType<F>, ...args: A): ReturnType<F>;
8
+ bind<T>(context: Context, target: T): T;
9
+ enable(): this;
10
+ disable(): this;
11
+ }
12
+ //# sourceMappingURL=trace-context-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-context-manager.d.ts","sourceRoot":"","sources":["../src/trace-context-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,KAAK,OAAO,EAAE,KAAK,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAGrF,6DAA6D;AAC7D,qBAAa,uBAAwB,YAAW,cAAc;IAC5D,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IAErD,cAIC;IAED,MAAM,IAAI,OAAO,CAAoD;IAErE,IAAI,CAAC,CAAC,SAAS,OAAO,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,IAAI,EAAE,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,EAC/D,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG,IAAI,EAAE,CAAC,GAClE,UAAU,CAAC,CAAC,CAAC,CAEf;IAED,IAAI,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC,GAAG,CAAC,CAOtC;IAED,MAAM,IAAI,IAAI,CAAiB;IAC/B,OAAO,IAAI,IAAI,CAAyC;CACzD"}
@@ -0,0 +1,30 @@
1
+ import { ROOT_CONTEXT } from "@opentelemetry/api";
2
+ import { getNodeBuiltinSync } from "@nodetool-ai/config";
3
+ /** Preserve active spans across Node promises and timers. */
4
+ export class NodeTraceContextManager {
5
+ storage;
6
+ constructor() {
7
+ const hooks = getNodeBuiltinSync("node:async_hooks");
8
+ if (!hooks) {
9
+ throw new Error("Node trace context requires node:async_hooks");
10
+ }
11
+ this.storage = new hooks.AsyncLocalStorage();
12
+ }
13
+ active() { return this.storage.getStore() ?? ROOT_CONTEXT; }
14
+ with(context, fn, thisArg, ...args) {
15
+ return this.storage.run(context, () => fn.apply(thisArg, args));
16
+ }
17
+ bind(context, target) {
18
+ if (typeof target !== "function") {
19
+ return target;
20
+ }
21
+ const storage = this.storage;
22
+ // The wrapper preserves the callback's arguments, return value, and receiver.
23
+ return function (...args) {
24
+ return storage.run(context, () => target.apply(this, args));
25
+ };
26
+ }
27
+ enable() { return this; }
28
+ disable() { this.storage.disable(); return this; }
29
+ }
30
+ //# sourceMappingURL=trace-context-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trace-context-manager.js","sourceRoot":"","sources":["../src/trace-context-manager.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAqC,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,6DAA6D;AAC7D,MAAM,OAAO,uBAAuB;IACjB,OAAO,CAA6B;IAErD;QACE,MAAM,KAAK,GAAG,kBAAkB,CAAoC,kBAAkB,CAAC,CAAC;QACxF,IAAI,CAAC,KAAK,EAAE,CAAC;YAAC,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;QAAC,CAAC;QAChF,IAAI,CAAC,OAAO,GAAG,IAAI,KAAK,CAAC,iBAAiB,EAAW,CAAC;IACxD,CAAC;IAED,MAAM,KAAc,OAAO,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,YAAY,CAAC,CAAC,CAAC;IAErE,IAAI,CACF,OAAgB,EAAE,EAAK,EAAE,OAA8B,EAAE,GAAG,IAAO;QAEnE,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IAClE,CAAC;IAED,IAAI,CAAI,OAAgB,EAAE,MAAS;QACjC,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YAAC,OAAO,MAAM,CAAC;QAAC,CAAC;QACpD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC;QAC7B,8EAA8E;QAC9E,OAAO,UAAyB,GAAG,IAAe;YAChD,OAAO,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;QAC9D,CAAiB,CAAC;IACpB,CAAC;IAED,MAAM,KAAW,OAAO,IAAI,CAAC,CAAC,CAAC;IAC/B,OAAO,KAAW,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC;CACzD"}
@@ -10,10 +10,9 @@
10
10
  */
11
11
  type WriteStream = ReturnType<typeof import("node:fs").createWriteStream>;
12
12
  import type { ReadableSpan, SpanExporter } from "@opentelemetry/sdk-trace-base";
13
- import { type ExportResult } from "@opentelemetry/core";
14
- import type { TraceRecord } from "@nodetool-ai/protocol";
13
+ import type { ExportResult } from "@opentelemetry/core";
15
14
  export type { TraceRecord } from "@nodetool-ai/protocol";
16
- export declare function spanToRecord(span: ReadableSpan): TraceRecord;
15
+ export { spanToRecord } from "./span-record.js";
17
16
  /**
18
17
  * Append spans as JSONL to a file. Creates parent directories as needed.
19
18
  *
@@ -1 +1 @@
1
- {"version":3,"file":"trace-exporters.d.ts","sourceRoot":"","sources":["../src/trace-exporters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,KAAK,WAAW,GAAG,UAAU,CAAC,cAAc,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAiC1E,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAuBzD,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,CA2B5D;AAED;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,YAAW,YAAY;IACxD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,WAAW,CAAgB;IAEnC,YAAY,QAAQ,EAAE,MAAM,EAK3B;IAED,MAAM,CACJ,KAAK,EAAE,YAAY,EAAE,EACrB,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAC7C,IAAI,CAkBN;IAGK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAS9B;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhC;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC1E;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7C;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IAEzC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,GAAE,YAAuB,EAAI;IAEhE,MAAM,CACJ,KAAK,EAAE,YAAY,EAAE,EACrB,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAC7C,IAAI,CAcN;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9B;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhC;CACF"}
1
+ {"version":3,"file":"trace-exporters.d.ts","sourceRoot":"","sources":["../src/trace-exporters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,KAAK,WAAW,GAAG,UAAU,CAAC,cAAc,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAiC1E,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAGxD,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,YAAW,YAAY;IACxD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,WAAW,CAAgB;IAEnC,YAAY,QAAQ,EAAE,MAAM,EAK3B;IAED,MAAM,CACJ,KAAK,EAAE,YAAY,EAAE,EACrB,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAC7C,IAAI,CAkBN;IAGK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAS9B;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhC;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC1E;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7C;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IAEzC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,GAAE,YAAuB,EAAI;IAEhE,MAAM,CACJ,KAAK,EAAE,YAAY,EAAE,EACrB,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAC7C,IAAI,CAcN;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9B;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhC;CACF"}
@@ -40,55 +40,8 @@ function dirname(p) {
40
40
  // Stryker restore all
41
41
  return nodePath.dirname(p);
42
42
  }
43
- import { ExportResultCode } from "@opentelemetry/core";
44
43
  import { externalSpanRecord } from "./run-trace-processor.js";
45
- /**
46
- * Stable, analyzer-friendly JSON shape derived from a {@link ReadableSpan}.
47
- *
48
- * `start_time_ms` / `end_time_ms` are unix-epoch milliseconds; `duration_ms`
49
- * is end−start. Timestamps are ms (not ns) because that's what every
50
- * downstream consumer (logs, dashboards, LLMs) actually uses.
51
- */
52
- const SPAN_KINDS = ["INTERNAL", "SERVER", "CLIENT", "PRODUCER", "CONSUMER"];
53
- const STATUS_CODES = ["UNSET", "OK", "ERROR"];
54
- /**
55
- * Convert an OTel hrTime ([seconds, nanoseconds]) to integer unix-epoch ms.
56
- *
57
- * We round (rather than truncate) so a 0.6ms span doesn't read as 0ms, and
58
- * we keep the schema integer-typed for downstream JSONL consumers that
59
- * assume `start_time_ms`/`end_time_ms`/`duration_ms` are whole numbers.
60
- */
61
- function hrTimeToMs(hrTime) {
62
- return Math.round(hrTime[0] * 1000 + hrTime[1] / 1_000_000);
63
- }
64
- export function spanToRecord(span) {
65
- const ctx = span.spanContext();
66
- const startMs = hrTimeToMs(span.startTime);
67
- const endMs = hrTimeToMs(span.endTime);
68
- const statusCode = { code: STATUS_CODES[span.status.code] ?? "UNSET" };
69
- const status = span.status.message
70
- ? { ...statusCode, message: span.status.message }
71
- : statusCode;
72
- return {
73
- trace_id: ctx.traceId,
74
- span_id: ctx.spanId,
75
- parent_span_id: span.parentSpanContext?.spanId ?? null,
76
- name: span.name,
77
- kind: SPAN_KINDS[span.kind] ?? "INTERNAL",
78
- start_time_ms: startMs,
79
- end_time_ms: endMs,
80
- duration_ms: endMs - startMs,
81
- status,
82
- attributes: { ...span.attributes },
83
- events: span.events.map((e) => {
84
- const event = { name: e.name, time_ms: hrTimeToMs(e.time) };
85
- return e.attributes
86
- ? { ...event, attributes: { ...e.attributes } }
87
- : event;
88
- }),
89
- resource: { ...span.resource.attributes }
90
- };
91
- }
44
+ export { spanToRecord } from "./span-record.js";
92
45
  /**
93
46
  * Append spans as JSONL to a file. Creates parent directories as needed.
94
47
  *
@@ -119,10 +72,10 @@ export class JsonlFileSpanExporter {
119
72
  for (const span of spans) {
120
73
  await writeLine(this.stream, JSON.stringify(externalSpanRecord(span)) + "\n");
121
74
  }
122
- resultCallback({ code: ExportResultCode.SUCCESS });
75
+ resultCallback({ code: 0 });
123
76
  })
124
77
  .catch((err) => {
125
- resultCallback({ code: ExportResultCode.FAILED, error: err });
78
+ resultCallback({ code: 1, error: err });
126
79
  });
127
80
  }
128
81
  // Stryker disable next-line BlockStatement: shutdown only closes the stream; writeLine already flushed every line to the fd, so emptying it doesn't change observable file output (resource cleanup, not behaviour).
@@ -203,10 +156,10 @@ export class StdoutSpanExporter {
203
156
  process.stdout.write(formatPretty(rec) + "\n");
204
157
  }
205
158
  }
206
- resultCallback({ code: ExportResultCode.SUCCESS });
159
+ resultCallback({ code: 0 });
207
160
  }
208
161
  catch (err) {
209
- resultCallback({ code: ExportResultCode.FAILED, error: err });
162
+ resultCallback({ code: 1, error: err });
210
163
  }
211
164
  }
212
165
  async shutdown() {