@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.
- package/dist/.nodetool-build-stamp +1 -1
- package/dist/canvas-codec.d.ts +3 -0
- package/dist/canvas-codec.d.ts.map +1 -0
- package/dist/canvas-codec.js +12 -0
- package/dist/canvas-codec.js.map +1 -0
- package/dist/context-packer.d.ts +1 -1
- package/dist/context-packer.js +1 -1
- package/dist/context.d.ts +3 -0
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +16 -5
- package/dist/context.js.map +1 -1
- package/dist/host-binaries.d.ts.map +1 -1
- package/dist/host-binaries.js +4 -3
- package/dist/host-binaries.js.map +1 -1
- package/dist/http-client-spans.d.ts +9 -0
- package/dist/http-client-spans.d.ts.map +1 -0
- package/dist/http-client-spans.js +88 -0
- package/dist/http-client-spans.js.map +1 -0
- package/dist/image-codec.d.ts +6 -3
- package/dist/image-codec.d.ts.map +1 -1
- package/dist/image-codec.js +17 -17
- package/dist/image-codec.js.map +1 -1
- package/dist/image-model-tasks.d.ts +20 -0
- package/dist/image-model-tasks.d.ts.map +1 -1
- package/dist/image-model-tasks.js +44 -1
- package/dist/image-model-tasks.js.map +1 -1
- package/dist/index.d.ts +4 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/media-ref-bytes.d.ts.map +1 -1
- package/dist/media-ref-bytes.js +31 -6
- package/dist/media-ref-bytes.js.map +1 -1
- package/dist/otlp-json-trace-exporter.d.ts +89 -0
- package/dist/otlp-json-trace-exporter.d.ts.map +1 -0
- package/dist/otlp-json-trace-exporter.js +155 -0
- package/dist/otlp-json-trace-exporter.js.map +1 -0
- package/dist/prompt-asset-refs.d.ts +12 -1
- package/dist/prompt-asset-refs.d.ts.map +1 -1
- package/dist/prompt-asset-refs.js +9 -4
- package/dist/prompt-asset-refs.js.map +1 -1
- package/dist/providers/antigravity-provider.d.ts +113 -0
- package/dist/providers/antigravity-provider.d.ts.map +1 -0
- package/dist/providers/antigravity-provider.js +527 -0
- package/dist/providers/antigravity-provider.js.map +1 -0
- package/dist/providers/api-route-provider.d.ts +22 -0
- package/dist/providers/api-route-provider.d.ts.map +1 -0
- package/dist/providers/api-route-provider.js +56 -0
- package/dist/providers/api-route-provider.js.map +1 -0
- package/dist/providers/azure-openai-provider.d.ts +69 -0
- package/dist/providers/azure-openai-provider.d.ts.map +1 -0
- package/dist/providers/azure-openai-provider.js +233 -0
- package/dist/providers/azure-openai-provider.js.map +1 -0
- package/dist/providers/base-provider.d.ts.map +1 -1
- package/dist/providers/base-provider.js +41 -4
- package/dist/providers/base-provider.js.map +1 -1
- package/dist/providers/bedrock-provider.d.ts +52 -0
- package/dist/providers/bedrock-provider.d.ts.map +1 -0
- package/dist/providers/bedrock-provider.js +648 -0
- package/dist/providers/bedrock-provider.js.map +1 -0
- package/dist/providers/bedrock-transport.d.ts +37 -0
- package/dist/providers/bedrock-transport.d.ts.map +1 -0
- package/dist/providers/bedrock-transport.js +186 -0
- package/dist/providers/bedrock-transport.js.map +1 -0
- package/dist/providers/chatgpt-provider.d.ts +48 -0
- package/dist/providers/chatgpt-provider.d.ts.map +1 -0
- package/dist/providers/chatgpt-provider.js +551 -0
- package/dist/providers/chatgpt-provider.js.map +1 -0
- package/dist/providers/claude-agent-provider.d.ts +29 -51
- package/dist/providers/claude-agent-provider.d.ts.map +1 -1
- package/dist/providers/claude-agent-provider.js +144 -202
- package/dist/providers/claude-agent-provider.js.map +1 -1
- package/dist/providers/claude-cli.d.ts +265 -0
- package/dist/providers/claude-cli.d.ts.map +1 -0
- package/dist/providers/claude-cli.js +488 -0
- package/dist/providers/claude-cli.js.map +1 -0
- package/dist/providers/codex-provider.d.ts +9 -2
- package/dist/providers/codex-provider.d.ts.map +1 -1
- package/dist/providers/codex-provider.js +25 -11
- package/dist/providers/codex-provider.js.map +1 -1
- package/dist/providers/context-window.d.ts.map +1 -1
- package/dist/providers/context-window.js +1 -0
- package/dist/providers/context-window.js.map +1 -1
- package/dist/providers/core-tools.d.ts +4 -1
- package/dist/providers/core-tools.d.ts.map +1 -1
- package/dist/providers/core-tools.js +5 -3
- package/dist/providers/core-tools.js.map +1 -1
- package/dist/providers/cost-calculator.d.ts.map +1 -1
- package/dist/providers/cost-calculator.js +9 -0
- package/dist/providers/cost-calculator.js.map +1 -1
- package/dist/providers/credential-check.d.ts +8 -0
- package/dist/providers/credential-check.d.ts.map +1 -1
- package/dist/providers/credential-check.js +22 -0
- package/dist/providers/credential-check.js.map +1 -1
- package/dist/providers/custom-openai-provider.d.ts.map +1 -1
- package/dist/providers/custom-openai-provider.js +19 -1
- package/dist/providers/custom-openai-provider.js.map +1 -1
- package/dist/providers/dreamina-pending.d.ts +22 -0
- package/dist/providers/dreamina-pending.d.ts.map +1 -0
- package/dist/providers/dreamina-pending.js +86 -0
- package/dist/providers/dreamina-pending.js.map +1 -0
- package/dist/providers/dreamina-provider.d.ts +10 -3
- package/dist/providers/dreamina-provider.d.ts.map +1 -1
- package/dist/providers/dreamina-provider.js +325 -45
- package/dist/providers/dreamina-provider.js.map +1 -1
- package/dist/providers/extension-tab.d.ts +42 -0
- package/dist/providers/extension-tab.d.ts.map +1 -0
- package/dist/providers/extension-tab.js +200 -0
- package/dist/providers/extension-tab.js.map +1 -0
- package/dist/providers/fake-provider.d.ts +3 -1
- package/dist/providers/fake-provider.d.ts.map +1 -1
- package/dist/providers/fake-provider.js +63 -9
- package/dist/providers/fake-provider.js.map +1 -1
- package/dist/providers/fake-schema-answer.d.ts +10 -0
- package/dist/providers/fake-schema-answer.d.ts.map +1 -0
- package/dist/providers/fake-schema-answer.js +64 -0
- package/dist/providers/fake-schema-answer.js.map +1 -0
- package/dist/providers/fal-provider.d.ts.map +1 -1
- package/dist/providers/fal-provider.js +5 -2
- package/dist/providers/fal-provider.js.map +1 -1
- package/dist/providers/gemini-web-provider.d.ts +76 -0
- package/dist/providers/gemini-web-provider.d.ts.map +1 -0
- package/dist/providers/gemini-web-provider.js +827 -0
- package/dist/providers/gemini-web-provider.js.map +1 -0
- package/dist/providers/http-transport.d.ts.map +1 -1
- package/dist/providers/http-transport.js +2 -0
- package/dist/providers/http-transport.js.map +1 -1
- package/dist/providers/huggingface-provider.d.ts.map +1 -1
- package/dist/providers/huggingface-provider.js +17 -1
- package/dist/providers/huggingface-provider.js.map +1 -1
- package/dist/providers/index.d.ts +18 -2
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +66 -15
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/llama-provider.d.ts +8 -0
- package/dist/providers/llama-provider.d.ts.map +1 -1
- package/dist/providers/llama-provider.js +23 -5
- package/dist/providers/llama-provider.js.map +1 -1
- package/dist/providers/lmstudio-provider.js +2 -2
- package/dist/providers/lmstudio-provider.js.map +1 -1
- package/dist/providers/manifest-models.d.ts +2 -12
- package/dist/providers/manifest-models.d.ts.map +1 -1
- package/dist/providers/manifest-models.js +45 -3
- package/dist/providers/manifest-models.js.map +1 -1
- package/dist/providers/meta-provider.d.ts +53 -6
- package/dist/providers/meta-provider.d.ts.map +1 -1
- package/dist/providers/meta-provider.js +289 -6
- package/dist/providers/meta-provider.js.map +1 -1
- package/dist/providers/meta-segmentation.d.ts +27 -0
- package/dist/providers/meta-segmentation.d.ts.map +1 -0
- package/dist/providers/meta-segmentation.js +141 -0
- package/dist/providers/meta-segmentation.js.map +1 -0
- package/dist/providers/meta-transcription.d.ts +31 -0
- package/dist/providers/meta-transcription.d.ts.map +1 -0
- package/dist/providers/meta-transcription.js +187 -0
- package/dist/providers/meta-transcription.js.map +1 -0
- package/dist/providers/node-llama-cpp-provider.d.ts +6 -3
- package/dist/providers/node-llama-cpp-provider.d.ts.map +1 -1
- package/dist/providers/node-llama-cpp-provider.js +77 -62
- package/dist/providers/node-llama-cpp-provider.js.map +1 -1
- package/dist/providers/ollama-provider.d.ts +23 -0
- package/dist/providers/ollama-provider.d.ts.map +1 -1
- package/dist/providers/ollama-provider.js +140 -27
- package/dist/providers/ollama-provider.js.map +1 -1
- package/dist/providers/openai-compat/client.d.ts +10 -1
- package/dist/providers/openai-compat/client.d.ts.map +1 -1
- package/dist/providers/openai-compat/client.js +21 -3
- package/dist/providers/openai-compat/client.js.map +1 -1
- package/dist/providers/openai-compat/index.d.ts +1 -1
- package/dist/providers/openai-compat/index.d.ts.map +1 -1
- package/dist/providers/openai-compat/index.js +1 -1
- package/dist/providers/openai-compat/index.js.map +1 -1
- package/dist/providers/openai-compat/types.d.ts +4 -0
- package/dist/providers/openai-compat/types.d.ts.map +1 -1
- package/dist/providers/openai-compat-provider.d.ts +11 -0
- package/dist/providers/openai-compat-provider.d.ts.map +1 -1
- package/dist/providers/openai-compat-provider.js +47 -2
- package/dist/providers/openai-compat-provider.js.map +1 -1
- package/dist/providers/openai-provider.d.ts +15 -0
- package/dist/providers/openai-provider.d.ts.map +1 -1
- package/dist/providers/openai-provider.js +50 -12
- package/dist/providers/openai-provider.js.map +1 -1
- package/dist/providers/opper-provider.d.ts +31 -0
- package/dist/providers/opper-provider.d.ts.map +1 -0
- package/dist/providers/opper-provider.js +91 -0
- package/dist/providers/opper-provider.js.map +1 -0
- package/dist/providers/provider-request-log.d.ts.map +1 -1
- package/dist/providers/provider-request-log.js +3 -2
- package/dist/providers/provider-request-log.js.map +1 -1
- package/dist/providers/python-provider.d.ts.map +1 -1
- package/dist/providers/python-provider.js +5 -3
- package/dist/providers/python-provider.js.map +1 -1
- package/dist/providers/responses-api.d.ts +12 -2
- package/dist/providers/responses-api.d.ts.map +1 -1
- package/dist/providers/responses-api.js +54 -3
- package/dist/providers/responses-api.js.map +1 -1
- package/dist/providers/safe-url.d.ts.map +1 -1
- package/dist/providers/safe-url.js +8 -0
- package/dist/providers/safe-url.js.map +1 -1
- package/dist/providers/scripted-provider.d.ts.map +1 -1
- package/dist/providers/scripted-provider.js +6 -1
- package/dist/providers/scripted-provider.js.map +1 -1
- package/dist/providers/types.d.ts +16 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/providers/vgenv-provider.d.ts +33 -0
- package/dist/providers/vgenv-provider.d.ts.map +1 -0
- package/dist/providers/vgenv-provider.js +261 -0
- package/dist/providers/vgenv-provider.js.map +1 -0
- package/dist/providers/vllm-provider.d.ts +7 -0
- package/dist/providers/vllm-provider.d.ts.map +1 -1
- package/dist/providers/vllm-provider.js +15 -3
- package/dist/providers/vllm-provider.js.map +1 -1
- package/dist/python-bridge-base.d.ts +16 -6
- package/dist/python-bridge-base.d.ts.map +1 -1
- package/dist/python-bridge-base.js +117 -40
- package/dist/python-bridge-base.js.map +1 -1
- package/dist/python-bridge-codec.d.ts +16 -1
- package/dist/python-bridge-codec.d.ts.map +1 -1
- package/dist/python-bridge-codec.js +60 -2
- package/dist/python-bridge-codec.js.map +1 -1
- package/dist/python-bridge-framing.d.ts +10 -1
- package/dist/python-bridge-framing.d.ts.map +1 -1
- package/dist/python-bridge-framing.js +33 -8
- package/dist/python-bridge-framing.js.map +1 -1
- package/dist/python-bridge-types.d.ts +26 -5
- package/dist/python-bridge-types.d.ts.map +1 -1
- package/dist/python-bridge-types.js.map +1 -1
- package/dist/python-graph-resolver.d.ts.map +1 -1
- package/dist/python-graph-resolver.js +12 -2
- package/dist/python-graph-resolver.js.map +1 -1
- package/dist/python-node-executor.d.ts +14 -3
- package/dist/python-node-executor.d.ts.map +1 -1
- package/dist/python-node-executor.js +185 -3
- package/dist/python-node-executor.js.map +1 -1
- package/dist/python-stdio-bridge.d.ts +6 -0
- package/dist/python-stdio-bridge.d.ts.map +1 -1
- package/dist/python-stdio-bridge.js +58 -12
- package/dist/python-stdio-bridge.js.map +1 -1
- package/dist/run-trace-context.d.ts +2 -27
- package/dist/run-trace-context.d.ts.map +1 -1
- package/dist/run-trace-context.js +4 -51
- package/dist/run-trace-context.js.map +1 -1
- package/dist/run-trace-processor.d.ts +3 -0
- package/dist/run-trace-processor.d.ts.map +1 -1
- package/dist/run-trace-processor.js +63 -46
- package/dist/run-trace-processor.js.map +1 -1
- package/dist/run-trace-scope.d.ts +28 -0
- package/dist/run-trace-scope.d.ts.map +1 -0
- package/dist/run-trace-scope.js +51 -0
- package/dist/run-trace-scope.js.map +1 -0
- package/dist/run-trace-serialization.d.ts.map +1 -1
- package/dist/run-trace-serialization.js +4 -3
- package/dist/run-trace-serialization.js.map +1 -1
- package/dist/span-record.d.ts +4 -0
- package/dist/span-record.d.ts.map +1 -0
- package/dist/span-record.js +48 -0
- package/dist/span-record.js.map +1 -0
- package/dist/swappable-python-bridge.d.ts +6 -6
- package/dist/swappable-python-bridge.d.ts.map +1 -1
- package/dist/swappable-python-bridge.js +10 -10
- package/dist/swappable-python-bridge.js.map +1 -1
- package/dist/telemetry.d.ts +2 -2
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +33 -34
- package/dist/telemetry.js.map +1 -1
- package/dist/testing.d.ts +1 -1
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +55 -3
- package/dist/testing.js.map +1 -1
- package/dist/token-counter.d.ts +4 -13
- package/dist/token-counter.d.ts.map +1 -1
- package/dist/token-counter.js +68 -18
- package/dist/token-counter.js.map +1 -1
- package/dist/trace-context-manager.d.ts +12 -0
- package/dist/trace-context-manager.d.ts.map +1 -0
- package/dist/trace-context-manager.js +30 -0
- package/dist/trace-context-manager.js.map +1 -0
- package/dist/trace-exporters.d.ts +2 -3
- package/dist/trace-exporters.d.ts.map +1 -1
- package/dist/trace-exporters.js +5 -52
- package/dist/trace-exporters.js.map +1 -1
- package/dist/trace-semantic-conventions.d.ts +2 -0
- package/dist/trace-semantic-conventions.d.ts.map +1 -0
- package/dist/trace-semantic-conventions.js +2 -0
- package/dist/trace-semantic-conventions.js.map +1 -0
- package/dist/traced-storage.d.ts +17 -0
- package/dist/traced-storage.d.ts.map +1 -0
- package/dist/traced-storage.js +41 -0
- package/dist/traced-storage.js.map +1 -0
- package/dist/tracing-module.d.ts +3 -0
- package/dist/tracing-module.d.ts.map +1 -0
- package/dist/tracing-module.js +12 -0
- package/dist/tracing-module.js.map +1 -0
- 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 (
|
|
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
|
-
*
|
|
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
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
const {
|
|
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 {
|
|
80
|
-
const
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
|
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
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
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 =
|
|
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 = [];
|
package/dist/telemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AAEH,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,EAAe,MAAM,oBAAoB,CAAC;AAC9E,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AAE/D,OAAO,EAAE,4BAA4B,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAC;
|
|
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;
|
package/dist/testing.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
|
63
|
+
userId,
|
|
48
64
|
workspaceDir,
|
|
49
65
|
cache: new MemoryCache(),
|
|
50
|
-
storage
|
|
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) => {
|
package/dist/testing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,EAAE,GAAG,kBAAkB,CAC3B,SAAS,CACkB,CAAC;AAC9B,MAAM,IAAI,GAAG,kBAAkB,CAC7B,WAAW,CACkB,CAAC;AAChC,MAAM,EAAE,GAAG,kBAAkB,CAC3B,SAAS,CACkB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AA+DjD;;;GAGG;AACH,SAAS,gBAAgB;IAIvB,OAAO,KAAK,EAAE,KAAa,EAAE,KAAmB,EAAE,EAAE;QAClD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;YACxB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAO,GAAuB,EAAE;IAEhC,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC;IACtD,MAAM,YAAY,GAChB,OAAO,CAAC,YAAY;QACpB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE9D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;IAClD,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC;QACpC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,UAAU;QAClC,MAAM
|
|
1
|
+
{"version":3,"file":"testing.js","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AACH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,MAAM,EAAE,GAAG,kBAAkB,CAC3B,SAAS,CACkB,CAAC;AAC9B,MAAM,IAAI,GAAG,kBAAkB,CAC7B,WAAW,CACkB,CAAC;AAChC,MAAM,EAAE,GAAG,kBAAkB,CAC3B,SAAS,CACkB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAC9D,OAAO,EAAE,iBAAiB,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC9D,OAAO,EAAE,YAAY,EAAE,MAAM,8BAA8B,CAAC;AAE5D,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AA+DjD;;;GAGG;AACH,SAAS,gBAAgB;IAIvB,OAAO,KAAK,EAAE,KAAa,EAAE,KAAmB,EAAE,EAAE;QAClD,MAAM,GAAG,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;YACxB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC;AAED,+DAA+D;AAC/D,MAAM,cAAc,GAA2B;IAC7C,WAAW,EAAE,KAAK;IAClB,YAAY,EAAE,KAAK;IACnB,YAAY,EAAE,MAAM;IACpB,WAAW,EAAE,KAAK;IAClB,WAAW,EAAE,KAAK;IAClB,aAAa,EAAE,KAAK;IACpB,YAAY,EAAE,KAAK;IACnB,mBAAmB,EAAE,KAAK;CAC3B,CAAC;AAEF;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAO,GAAuB,EAAE;IAEhC,MAAM,gBAAgB,GAAG,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC;IACtD,MAAM,YAAY,GAChB,OAAO,CAAC,YAAY;QACpB,EAAE,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,mBAAmB,CAAC,CAAC,CAAC;IAE9D,MAAM,SAAS,GAAG,IAAI,GAAG,EAAwB,CAAC;IAClD,KAAK,MAAM,CAAC,EAAE,EAAE,IAAI,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,SAAS,IAAI,EAAE,CAAC,EAAE,CAAC;QACjE,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,MAAM,MAAM,GAAG,WAAW,CAAC;IAC3B,MAAM,OAAO,GAAG,IAAI,sBAAsB,EAAE,CAAC;IAC7C,IAAI,YAAY,GAAG,CAAC,CAAC;IACrB,IAAI,eAAe,GAAG,CAAC,CAAC;IACxB,MAAM,SAAS,GAAG,IAAI,GAAG,EAA0B,CAAC;IAEpD,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC;QACpC,KAAK,EAAE,OAAO,CAAC,KAAK,IAAI,UAAU;QAClC,MAAM;QACN,YAAY;QACZ,KAAK,EAAE,IAAI,WAAW,EAAE;QACxB,OAAO;QACP,gBAAgB,EAAE,IAAI,sBAAsB,EAAE;QAC9C,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,EAAE;QAClC,mBAAmB,EAAE,OAAO,CAAC,mBAAmB,IAAI,IAAI;QACxD,OAAO,EAAE,OAAO,CAAC,OAAO,IAAI,gBAAgB,EAAE;QAC9C,cAAc,EAAE,CAAC,GAAW,EAAE,EAAE;YAC9B,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC;gBAC3B,MAAM,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC;gBACtC,IAAI,CAAC,KAAK,IAAI;oBAAE,OAAO,CAAC,CAAC;YAC3B,CAAC;YACD,iEAAiE;YACjE,oEAAoE;YACpE,gEAAgE;YAChE,gEAAgE;YAChE,sDAAsD;YACtD,OAAO,EAAE,CAAC;QACZ,CAAC;QACD,eAAe,EAAE;YACf,gEAAgE;YAChE,uEAAuE;YACvE,uEAAuE;YACvE,WAAW,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;gBAC1B,YAAY,IAAI,CAAC,CAAC;gBAClB,MAAM,EAAE,GAAG,YAAY,MAAM,CAAC,YAAY,CAAC,CAAC,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE,CAAC;gBAChE,MAAM,IAAI,GAAG,IAAI,GAAG,CAAS;oBAC3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;oBAChC,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;iBACvC,CAAC,CAAC;gBACH,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,MAAM,IAAI,EAAE,EAAE,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC;gBACvE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;oBACvB,IAAI,GAAG,EAAE,CAAC;wBACR,MAAM,OAAO,CAAC,KAAK,CACjB,GAAG,MAAM,IAAI,EAAE,IAAI,GAAG,EAAE,EACxB,IAAI,CAAC,OAAO,EACZ,IAAI,CAAC,WAAW,CACjB,CAAC;oBACJ,CAAC;gBACH,CAAC;gBACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,YAAY,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;YACjE,CAAC;YACD,kEAAkE;YAClE,sBAAsB,EAAE,KAAK,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;gBAC7C,eAAe,IAAI,CAAC,CAAC;gBACrB,MAAM,EAAE,GAAG,iBAAiB,eAAe,EAAE,CAAC;gBAC9C,MAAM,KAAK,GAAG,EAAE,GAAI,QAAoC,EAAE,EAAE,EAAE,CAAC;gBAC/D,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBACzB,OAAO,KAAK,CAAC;YACf,CAAC;YACD,mBAAmB,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI;YAChE,sBAAsB,EAAE,KAAK,EAAE,EAAE,EAAE,EAAE,QAAQ,EAAE,EAAE,EAAE;gBACjD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,OAAO,IAAI,CAAC;gBACpC,MAAM,KAAK,GAAG,EAAE,GAAI,QAAoC,EAAE,EAAE,EAAE,CAAC;gBAC/D,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;gBACzB,OAAO,KAAK,CAAC;YACf,CAAC;SACF;KACF,CAAC,CAAC;IAEH,OAAO,CAAC,mBAAmB,CAAC,CAAC,UAAkB,EAAE,EAAE;QACjD,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC3C,IAAI,QAAQ;YAAE,OAAO,QAAQ,CAAC;QAC9B,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,IAAI,IAAI,YAAY,EAAE,CAAC;QAC5D,SAAS,CAAC,GAAG,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QACjC,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,OAAO;QACL,OAAO;QACP,YAAY;QACZ,SAAS;QACT,OAAO,EAAE,GAAG,EAAE;YACZ,kEAAkE;YAClE,+DAA+D;YAC/D,sDAAsD;YACtD,IAAI,CAAC,gBAAgB;gBAAE,OAAO;YAC9B,IAAI,CAAC;gBACH,EAAE,CAAC,MAAM,CAAC,YAAY,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;YAC5D,CAAC;YAAC,MAAM,CAAC;gBACP,mEAAmE;YACrE,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,eAAe,CAC7B,SAA6E;IAE7E,MAAM,QAAQ,GAAG,UAAU,CAAC,KAAK,CAAC;IAClC,MAAM,IAAI,GAAG,KAAK,EAChB,KAAwB,EACxB,IAAkB,EACC,EAAE;QACrB,MAAM,GAAG,GACP,QAAQ,CAAC,KAAK,CAAC;YACb,CAAC,CAAC,KAAK;YACP,CAAC,CAAC,KAAK,YAAY,GAAG;gBACpB,CAAC,CAAC,KAAK,CAAC,QAAQ,EAAE;gBAClB,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QAClB,IAAI,SAAS,EAAE,CAAC;YACd,OAAO,SAAS,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC9B,CAAC;QACD,MAAM,IAAI,GAAG,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;QACxE,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE;YACxB,MAAM,EAAE,GAAG;YACX,OAAO,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE;SAC1C,CAAC,CAAC;IACL,CAAC,CAAC;IACF,UAAU,CAAC,KAAK,GAAG,IAAI,CAAC;IACxB,OAAO,GAAG,EAAE;QACV,UAAU,CAAC,KAAK,GAAG,QAAQ,CAAC;IAC9B,CAAC,CAAC;AACJ,CAAC"}
|
package/dist/token-counter.d.ts
CHANGED
|
@@ -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
|
-
*
|
|
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`
|
|
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":"
|
|
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"}
|
package/dist/token-counter.js
CHANGED
|
@@ -1,21 +1,56 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
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 {
|
|
5
|
+
import { importOptionalModule } from "@nodetool-ai/config";
|
|
13
6
|
let cachedEncoder = null;
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
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
|
|
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
|
|
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 =
|
|
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`
|
|
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 =
|
|
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":"AAAA
|
|
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 {
|
|
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
|
|
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,
|
|
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"}
|
package/dist/trace-exporters.js
CHANGED
|
@@ -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:
|
|
75
|
+
resultCallback({ code: 0 });
|
|
123
76
|
})
|
|
124
77
|
.catch((err) => {
|
|
125
|
-
resultCallback({ code:
|
|
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:
|
|
159
|
+
resultCallback({ code: 0 });
|
|
207
160
|
}
|
|
208
161
|
catch (err) {
|
|
209
|
-
resultCallback({ code:
|
|
162
|
+
resultCallback({ code: 1, error: err });
|
|
210
163
|
}
|
|
211
164
|
}
|
|
212
165
|
async shutdown() {
|