@nodetool-ai/runtime 0.8.1 → 0.8.3
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/context.d.ts +31 -3
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +369 -160
- package/dist/context.js.map +1 -1
- package/dist/generation-registry.d.ts +8 -0
- package/dist/generation-registry.d.ts.map +1 -1
- package/dist/generation-registry.js +18 -0
- package/dist/generation-registry.js.map +1 -1
- package/dist/host-binaries.d.ts.map +1 -1
- package/dist/host-binaries.js +18 -10
- package/dist/host-binaries.js.map +1 -1
- package/dist/image-codec.d.ts +2 -0
- package/dist/image-codec.d.ts.map +1 -1
- package/dist/image-codec.js +23 -3
- package/dist/image-codec.js.map +1 -1
- package/dist/image-model-tasks.d.ts +35 -0
- package/dist/image-model-tasks.d.ts.map +1 -0
- package/dist/image-model-tasks.js +67 -0
- package/dist/image-model-tasks.js.map +1 -0
- package/dist/index.d.ts +14 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +10 -2
- package/dist/index.js.map +1 -1
- package/dist/media-ref-bytes.d.ts +18 -2
- package/dist/media-ref-bytes.d.ts.map +1 -1
- package/dist/media-ref-bytes.js +26 -16
- package/dist/media-ref-bytes.js.map +1 -1
- package/dist/node-executor.d.ts +6 -0
- package/dist/node-executor.d.ts.map +1 -1
- 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/aki-provider.d.ts +2 -0
- package/dist/providers/aki-provider.d.ts.map +1 -1
- package/dist/providers/aki-provider.js +6 -0
- package/dist/providers/aki-provider.js.map +1 -1
- 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/atlascloud-provider.d.ts +2 -0
- package/dist/providers/atlascloud-provider.d.ts.map +1 -1
- package/dist/providers/atlascloud-provider.js +22 -0
- package/dist/providers/atlascloud-provider.js.map +1 -1
- package/dist/providers/base-provider.d.ts +36 -24
- package/dist/providers/base-provider.d.ts.map +1 -1
- package/dist/providers/base-provider.js +145 -150
- package/dist/providers/base-provider.js.map +1 -1
- 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 +506 -0
- package/dist/providers/chatgpt-provider.js.map +1 -0
- package/dist/providers/claude-agent-provider.d.ts +6 -36
- package/dist/providers/claude-agent-provider.d.ts.map +1 -1
- package/dist/providers/claude-agent-provider.js +208 -26
- package/dist/providers/claude-agent-provider.js.map +1 -1
- package/dist/providers/codex-provider.d.ts +2 -0
- package/dist/providers/codex-provider.d.ts.map +1 -1
- package/dist/providers/codex-provider.js +15 -2
- package/dist/providers/codex-provider.js.map +1 -1
- package/dist/providers/cohere-provider.d.ts +2 -1
- package/dist/providers/cohere-provider.d.ts.map +1 -1
- package/dist/providers/cohere-provider.js +5 -0
- package/dist/providers/cohere-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 +2 -1
- package/dist/providers/core-tools.d.ts.map +1 -1
- package/dist/providers/core-tools.js +2 -1
- 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 +27 -0
- package/dist/providers/credential-check.js.map +1 -1
- package/dist/providers/custom-openai-provider.d.ts +2 -0
- package/dist/providers/custom-openai-provider.d.ts.map +1 -1
- package/dist/providers/custom-openai-provider.js +27 -1
- package/dist/providers/custom-openai-provider.js.map +1 -1
- package/dist/providers/dreamina-models.d.ts +5 -0
- package/dist/providers/dreamina-models.d.ts.map +1 -0
- package/dist/providers/dreamina-models.js +57 -0
- package/dist/providers/dreamina-models.js.map +1 -0
- package/dist/providers/dreamina-music.d.ts +52 -0
- package/dist/providers/dreamina-music.d.ts.map +1 -0
- package/dist/providers/dreamina-music.js +115 -0
- package/dist/providers/dreamina-music.js.map +1 -0
- package/dist/providers/dreamina-provider.d.ts +64 -0
- package/dist/providers/dreamina-provider.d.ts.map +1 -0
- package/dist/providers/dreamina-provider.js +1001 -0
- package/dist/providers/dreamina-provider.js.map +1 -0
- package/dist/providers/elevenlabs-provider.d.ts +2 -1
- package/dist/providers/elevenlabs-provider.d.ts.map +1 -1
- package/dist/providers/elevenlabs-provider.js +5 -0
- package/dist/providers/elevenlabs-provider.js.map +1 -1
- package/dist/providers/evolink-provider.d.ts +2 -0
- package/dist/providers/evolink-provider.d.ts.map +1 -1
- package/dist/providers/evolink-provider.js +8 -0
- package/dist/providers/evolink-provider.js.map +1 -1
- package/dist/providers/extension-tab.d.ts +29 -0
- package/dist/providers/extension-tab.d.ts.map +1 -0
- package/dist/providers/extension-tab.js +144 -0
- package/dist/providers/extension-tab.js.map +1 -0
- package/dist/providers/fake-provider.d.ts +5 -2
- package/dist/providers/fake-provider.d.ts.map +1 -1
- package/dist/providers/fake-provider.js +73 -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 +2 -1
- package/dist/providers/fal-provider.d.ts.map +1 -1
- package/dist/providers/fal-provider.js +32 -2
- package/dist/providers/fal-provider.js.map +1 -1
- package/dist/providers/gemini-provider.d.ts +2 -1
- package/dist/providers/gemini-provider.d.ts.map +1 -1
- package/dist/providers/gemini-provider.js +15 -0
- package/dist/providers/gemini-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 +752 -0
- package/dist/providers/gemini-web-provider.js.map +1 -0
- package/dist/providers/higgsfield-provider.d.ts +2 -1
- package/dist/providers/higgsfield-provider.d.ts.map +1 -1
- package/dist/providers/higgsfield-provider.js +12 -0
- package/dist/providers/higgsfield-provider.js.map +1 -1
- package/dist/providers/huggingface-provider.d.ts +2 -1
- package/dist/providers/huggingface-provider.d.ts.map +1 -1
- package/dist/providers/huggingface-provider.js +27 -1
- package/dist/providers/huggingface-provider.js.map +1 -1
- package/dist/providers/index.d.ts +14 -3
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +48 -9
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/jina-provider.d.ts +2 -1
- package/dist/providers/jina-provider.d.ts.map +1 -1
- package/dist/providers/jina-provider.js +5 -0
- package/dist/providers/jina-provider.js.map +1 -1
- package/dist/providers/kie-provider.d.ts +2 -1
- package/dist/providers/kie-provider.d.ts.map +1 -1
- package/dist/providers/kie-provider.js +14 -0
- package/dist/providers/kie-provider.js.map +1 -1
- package/dist/providers/llama-provider.d.ts +12 -1
- package/dist/providers/llama-provider.d.ts.map +1 -1
- package/dist/providers/llama-provider.js +29 -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/loop-tracing.d.ts +17 -0
- package/dist/providers/loop-tracing.d.ts.map +1 -0
- package/dist/providers/loop-tracing.js +132 -0
- package/dist/providers/loop-tracing.js.map +1 -0
- 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/meshy-provider.d.ts +2 -1
- package/dist/providers/meshy-provider.d.ts.map +1 -1
- package/dist/providers/meshy-provider.js +6 -0
- package/dist/providers/meshy-provider.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/minimax-provider.d.ts +2 -0
- package/dist/providers/minimax-provider.d.ts.map +1 -1
- package/dist/providers/minimax-provider.js +11 -0
- package/dist/providers/minimax-provider.js.map +1 -1
- package/dist/providers/mistral-provider.d.ts +2 -0
- package/dist/providers/mistral-provider.d.ts.map +1 -1
- package/dist/providers/mistral-provider.js +5 -0
- package/dist/providers/mistral-provider.js.map +1 -1
- package/dist/providers/node-llama-cpp-provider.d.ts +8 -4
- package/dist/providers/node-llama-cpp-provider.d.ts.map +1 -1
- package/dist/providers/node-llama-cpp-provider.js +83 -61
- package/dist/providers/node-llama-cpp-provider.js.map +1 -1
- package/dist/providers/nodetool-provider.d.ts +1 -1
- package/dist/providers/nodetool-provider.d.ts.map +1 -1
- package/dist/providers/nodetool-provider.js +0 -2
- package/dist/providers/nodetool-provider.js.map +1 -1
- package/dist/providers/ollama-provider.d.ts +25 -1
- package/dist/providers/ollama-provider.d.ts.map +1 -1
- package/dist/providers/ollama-provider.js +145 -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 +23 -2
- package/dist/providers/openai-provider.d.ts.map +1 -1
- package/dist/providers/openai-provider.js +102 -21
- package/dist/providers/openai-provider.js.map +1 -1
- package/dist/providers/openrouter-provider.d.ts +52 -1
- package/dist/providers/openrouter-provider.d.ts.map +1 -1
- package/dist/providers/openrouter-provider.js +372 -11
- package/dist/providers/openrouter-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-error.d.ts.map +1 -1
- package/dist/providers/provider-error.js +7 -1
- package/dist/providers/provider-error.js.map +1 -1
- package/dist/providers/provider-generations.d.ts +2 -2
- package/dist/providers/provider-generations.js +2 -2
- package/dist/providers/provider-request-log.d.ts.map +1 -1
- package/dist/providers/provider-request-log.js +19 -7
- package/dist/providers/provider-request-log.js.map +1 -1
- package/dist/providers/python-provider.d.ts +6 -1
- package/dist/providers/python-provider.d.ts.map +1 -1
- package/dist/providers/python-provider.js +35 -14
- package/dist/providers/python-provider.js.map +1 -1
- package/dist/providers/replicate-provider.d.ts +2 -1
- package/dist/providers/replicate-provider.d.ts.map +1 -1
- package/dist/providers/replicate-provider.js +22 -0
- package/dist/providers/replicate-provider.js.map +1 -1
- package/dist/providers/requesty-provider.d.ts +30 -0
- package/dist/providers/requesty-provider.d.ts.map +1 -0
- package/dist/providers/requesty-provider.js +87 -0
- package/dist/providers/requesty-provider.js.map +1 -0
- 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/reve-provider.d.ts +2 -1
- package/dist/providers/reve-provider.d.ts.map +1 -1
- package/dist/providers/reve-provider.js +6 -0
- package/dist/providers/reve-provider.js.map +1 -1
- package/dist/providers/rodin-provider.d.ts +2 -1
- package/dist/providers/rodin-provider.d.ts.map +1 -1
- package/dist/providers/rodin-provider.js +6 -0
- package/dist/providers/rodin-provider.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/together-operations.d.ts +27 -0
- package/dist/providers/together-operations.d.ts.map +1 -0
- package/dist/providers/together-operations.js +95 -0
- package/dist/providers/together-operations.js.map +1 -0
- package/dist/providers/together-provider.d.ts +5 -8
- package/dist/providers/together-provider.d.ts.map +1 -1
- package/dist/providers/together-provider.js +54 -159
- package/dist/providers/together-provider.js.map +1 -1
- package/dist/providers/topaz-provider.d.ts +2 -1
- package/dist/providers/topaz-provider.d.ts.map +1 -1
- package/dist/providers/topaz-provider.js +5 -0
- package/dist/providers/topaz-provider.js.map +1 -1
- package/dist/providers/types.d.ts +54 -0
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/providers/useapi-provider.d.ts +2 -1
- package/dist/providers/useapi-provider.d.ts.map +1 -1
- package/dist/providers/useapi-provider.js +8 -0
- package/dist/providers/useapi-provider.js.map +1 -1
- package/dist/providers/vllm-provider.d.ts +9 -4
- package/dist/providers/vllm-provider.d.ts.map +1 -1
- package/dist/providers/vllm-provider.js +16 -8
- package/dist/providers/vllm-provider.js.map +1 -1
- package/dist/providers/voyage-provider.d.ts +2 -1
- package/dist/providers/voyage-provider.d.ts.map +1 -1
- package/dist/providers/voyage-provider.js +5 -0
- package/dist/providers/voyage-provider.js.map +1 -1
- package/dist/providers/xai-provider.d.ts +2 -0
- package/dist/providers/xai-provider.d.ts.map +1 -1
- package/dist/providers/xai-provider.js +8 -0
- package/dist/providers/xai-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-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 +25 -2
- package/dist/python-stdio-bridge.js.map +1 -1
- package/dist/recommended-models.d.ts.map +1 -1
- package/dist/recommended-models.js +20 -0
- package/dist/recommended-models.js.map +1 -1
- package/dist/run-context.d.ts +20 -0
- package/dist/run-context.d.ts.map +1 -0
- package/dist/run-context.js +18 -0
- package/dist/run-context.js.map +1 -0
- package/dist/run-trace-context.d.ts +5 -0
- package/dist/run-trace-context.d.ts.map +1 -0
- package/dist/run-trace-context.js +33 -0
- package/dist/run-trace-context.js.map +1 -0
- package/dist/run-trace-processor.d.ts +65 -0
- package/dist/run-trace-processor.d.ts.map +1 -0
- package/dist/run-trace-processor.js +418 -0
- package/dist/run-trace-processor.js.map +1 -0
- 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 +5 -0
- package/dist/run-trace-serialization.d.ts.map +1 -0
- package/dist/run-trace-serialization.js +114 -0
- package/dist/run-trace-serialization.js.map +1 -0
- 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/storage-workspace.d.ts +3 -0
- package/dist/storage-workspace.d.ts.map +1 -1
- package/dist/storage-workspace.js +32 -17
- package/dist/storage-workspace.js.map +1 -1
- 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 +9 -3
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +53 -20
- 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/trace-exporters.d.ts +2 -30
- package/dist/trace-exporters.d.ts.map +1 -1
- package/dist/trace-exporters.js +4 -42
- package/dist/trace-exporters.js.map +1 -1
- 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-helpers.d.ts +15 -22
- package/dist/tracing-helpers.d.ts.map +1 -1
- package/dist/tracing-helpers.js +38 -6
- package/dist/tracing-helpers.js.map +1 -1
- package/dist/trim-video-window.d.ts +8 -0
- package/dist/trim-video-window.d.ts.map +1 -0
- package/dist/trim-video-window.js +50 -0
- package/dist/trim-video-window.js.map +1 -0
- package/package.json +21 -5
package/dist/telemetry.js
CHANGED
|
@@ -10,7 +10,11 @@
|
|
|
10
10
|
*
|
|
11
11
|
* OpenTelemetry / OTLP:
|
|
12
12
|
* TRACELOOP_API_KEY — Traceloop cloud API key
|
|
13
|
-
* OTEL_EXPORTER_OTLP_ENDPOINT — Any OTLP-compatible backend
|
|
13
|
+
* OTEL_EXPORTER_OTLP_ENDPOINT — Any OTLP-compatible backend (`/v1/traces`
|
|
14
|
+
* is appended)
|
|
15
|
+
* OTEL_EXPORTER_OTLP_TRACES_ENDPOINT — Full traces URL, used as given;
|
|
16
|
+
* wins over OTEL_EXPORTER_OTLP_ENDPOINT
|
|
17
|
+
* OTEL_EXPORTER_OTLP_HEADERS — Extra exporter headers (read by the SDK)
|
|
14
18
|
* OTEL_SERVICE_NAME — Service name tag (default: "nodetool")
|
|
15
19
|
* OTEL_TRACES_EXPORTER=console — Print spans to stdout via OTel SDK
|
|
16
20
|
* TRACELOOP_DISABLE_BATCH=true — Flush spans immediately (dev mode)
|
|
@@ -22,22 +26,28 @@
|
|
|
22
26
|
* All NodeTool sinks emit the same {@link TraceRecord} shape (see
|
|
23
27
|
* trace-exporters.ts) so a downstream agent can ingest either one.
|
|
24
28
|
*/
|
|
25
|
-
import {
|
|
29
|
+
import { context, propagation, trace } from "@opentelemetry/api";
|
|
30
|
+
import { createLogger, setLogHook } from "@nodetool-ai/config";
|
|
31
|
+
import { ContentFilteringSpanExporter, RunTraceSpanProcessor, installRunTraceLogHook } from "./run-trace-processor.js";
|
|
32
|
+
import { getRunTraceScope } from "./run-trace-context.js";
|
|
33
|
+
import { TRACE_SPAN_EVENT_LIMIT } from "@nodetool-ai/protocol";
|
|
26
34
|
const log = createLogger("nodetool.runtime.telemetry");
|
|
27
35
|
let _tracer = null;
|
|
28
36
|
let _initialized = false;
|
|
29
37
|
let _sdk = null;
|
|
38
|
+
let _processors = [];
|
|
30
39
|
/**
|
|
31
40
|
* Initialize OpenTelemetry instrumentation.
|
|
32
41
|
*
|
|
33
42
|
* Idempotent: calling more than once is a no-op (returns the previous result).
|
|
34
|
-
*
|
|
43
|
+
* The durable processor is always active. External sinks remain optional.
|
|
35
44
|
*/
|
|
36
45
|
export async function initTelemetry(options = {}) {
|
|
37
46
|
if (_initialized)
|
|
38
47
|
return _tracer !== null;
|
|
39
48
|
const traceloopKey = process.env["TRACELOOP_API_KEY"];
|
|
40
49
|
const otlpEndpoint = process.env["OTEL_EXPORTER_OTLP_ENDPOINT"];
|
|
50
|
+
const otlpTracesEndpoint = process.env["OTEL_EXPORTER_OTLP_TRACES_ENDPOINT"];
|
|
41
51
|
const consoleMode = options.console || process.env["OTEL_TRACES_EXPORTER"] === "console";
|
|
42
52
|
const stdoutFormat = (() => {
|
|
43
53
|
if (options.stdout === false)
|
|
@@ -53,52 +63,63 @@ export async function initTelemetry(options = {}) {
|
|
|
53
63
|
return null;
|
|
54
64
|
})();
|
|
55
65
|
const traceFilePath = options.traceFile ?? process.env["NODETOOL_TRACE_FILE"];
|
|
56
|
-
const hasOtlp = !!(traceloopKey || otlpEndpoint);
|
|
57
|
-
if (!hasOtlp && !consoleMode && !stdoutFormat && !traceFilePath) {
|
|
58
|
-
_initialized = true;
|
|
59
|
-
return false;
|
|
60
|
-
}
|
|
66
|
+
const hasOtlp = !!(traceloopKey || otlpEndpoint || otlpTracesEndpoint);
|
|
61
67
|
const { NodeSDK } = await import("@opentelemetry/sdk-node");
|
|
62
68
|
const { resourceFromAttributes } = await import("@opentelemetry/resources");
|
|
63
69
|
const { ATTR_SERVICE_NAME } = await import("@opentelemetry/semantic-conventions");
|
|
64
70
|
const otelApi = await import("@opentelemetry/api");
|
|
65
|
-
const { BatchSpanProcessor, SimpleSpanProcessor, ConsoleSpanExporter } = await import("@opentelemetry/sdk-trace-base");
|
|
71
|
+
const { BatchSpanProcessor, SimpleSpanProcessor, ConsoleSpanExporter, RandomIdGenerator, AlwaysOnSampler } = await import("@opentelemetry/sdk-trace-base");
|
|
66
72
|
const serviceName = options.serviceName ?? process.env["OTEL_SERVICE_NAME"] ?? "nodetool";
|
|
67
73
|
const disableBatch = options.disableBatch ?? process.env["TRACELOOP_DISABLE_BATCH"] === "true";
|
|
68
|
-
const
|
|
69
|
-
const
|
|
74
|
+
const processor = new RunTraceSpanProcessor();
|
|
75
|
+
const processors = [processor];
|
|
76
|
+
_processors = processors;
|
|
77
|
+
const destinations = ["run-store"];
|
|
70
78
|
if (hasOtlp) {
|
|
71
79
|
const { OTLPTraceExporter } = await import("@opentelemetry/exporter-trace-otlp-proto");
|
|
72
|
-
const url =
|
|
73
|
-
?
|
|
74
|
-
:
|
|
80
|
+
const url = otlpTracesEndpoint
|
|
81
|
+
? otlpTracesEndpoint
|
|
82
|
+
: otlpEndpoint
|
|
83
|
+
? `${otlpEndpoint.replace(/\/+$/, "")}/v1/traces`
|
|
84
|
+
: "https://api.traceloop.com/v1/traces";
|
|
75
85
|
const headers = traceloopKey
|
|
76
86
|
? { Authorization: `Bearer ${traceloopKey}` }
|
|
77
87
|
: {};
|
|
78
88
|
const exporter = new OTLPTraceExporter({ url, headers });
|
|
79
89
|
const Proc = disableBatch ? SimpleSpanProcessor : BatchSpanProcessor;
|
|
80
|
-
processors.push(new Proc(exporter));
|
|
81
|
-
destinations.push(traceloopKey ? "traceloop" : `otlp:${
|
|
90
|
+
processors.push(new Proc(new ContentFilteringSpanExporter(exporter)));
|
|
91
|
+
destinations.push(traceloopKey ? "traceloop" : `otlp:${url}`);
|
|
82
92
|
}
|
|
83
93
|
if (consoleMode) {
|
|
84
|
-
processors.push(new SimpleSpanProcessor(new ConsoleSpanExporter()));
|
|
94
|
+
processors.push(new SimpleSpanProcessor(new ContentFilteringSpanExporter(new ConsoleSpanExporter())));
|
|
85
95
|
destinations.push("otel-console");
|
|
86
96
|
}
|
|
87
97
|
if (stdoutFormat) {
|
|
88
98
|
const { StdoutSpanExporter } = await import("./trace-exporters.js");
|
|
89
|
-
processors.push(new SimpleSpanProcessor(new StdoutSpanExporter(stdoutFormat)));
|
|
99
|
+
processors.push(new SimpleSpanProcessor(new ContentFilteringSpanExporter(new StdoutSpanExporter(stdoutFormat))));
|
|
90
100
|
destinations.push(`stdout:${stdoutFormat}`);
|
|
91
101
|
}
|
|
92
102
|
if (traceFilePath) {
|
|
93
103
|
const { JsonlFileSpanExporter } = await import("./trace-exporters.js");
|
|
94
104
|
// SimpleSpanProcessor — we want the file written eagerly so a crash
|
|
95
105
|
// doesn't lose recent spans, and disk I/O is cheap enough.
|
|
96
|
-
processors.push(new SimpleSpanProcessor(new JsonlFileSpanExporter(traceFilePath)));
|
|
106
|
+
processors.push(new SimpleSpanProcessor(new ContentFilteringSpanExporter(new JsonlFileSpanExporter(traceFilePath))));
|
|
97
107
|
destinations.push(`file:${traceFilePath}`);
|
|
98
108
|
}
|
|
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
|
+
const ids = new RandomIdGenerator();
|
|
99
115
|
const sdk = new NodeSDK({
|
|
100
116
|
resource: resourceFromAttributes({ [ATTR_SERVICE_NAME]: serviceName }),
|
|
101
|
-
|
|
117
|
+
autoDetectResources: false,
|
|
118
|
+
spanProcessors: processors,
|
|
119
|
+
sampler: new AlwaysOnSampler(),
|
|
120
|
+
spanLimits: { eventCountLimit: TRACE_SPAN_EVENT_LIMIT },
|
|
121
|
+
idGenerator: { generateTraceId: () => getRunTraceScope()?.traceId ?? ids.generateTraceId(), generateSpanId: () => ids.generateSpanId() },
|
|
122
|
+
instrumentations: [new UndiciInstrumentation()]
|
|
102
123
|
});
|
|
103
124
|
// sdk.start() is typed as void in current SDK versions, but historically
|
|
104
125
|
// returned a Promise — `await` is a no-op on non-thenable values, so this
|
|
@@ -108,6 +129,7 @@ export async function initTelemetry(options = {}) {
|
|
|
108
129
|
_sdk = sdk;
|
|
109
130
|
_tracer = otelApi.trace.getTracer("nodetool", "0.1.0");
|
|
110
131
|
_initialized = true;
|
|
132
|
+
installRunTraceLogHook();
|
|
111
133
|
if (!options.silent) {
|
|
112
134
|
log.info("OpenTelemetry initialized", {
|
|
113
135
|
destinations: destinations.join(", ")
|
|
@@ -130,6 +152,7 @@ export async function shutdownTelemetry() {
|
|
|
130
152
|
_sdk = null;
|
|
131
153
|
_tracer = null;
|
|
132
154
|
_initialized = false;
|
|
155
|
+
_processors = [];
|
|
133
156
|
if (sdk) {
|
|
134
157
|
try {
|
|
135
158
|
await sdk.shutdown();
|
|
@@ -138,6 +161,11 @@ export async function shutdownTelemetry() {
|
|
|
138
161
|
log.warn("Telemetry shutdown failed", err instanceof Error ? err : new Error(String(err)));
|
|
139
162
|
}
|
|
140
163
|
}
|
|
164
|
+
setLogHook(null);
|
|
165
|
+
}
|
|
166
|
+
/** Wait until the durable processor has persisted every queued completed record. */
|
|
167
|
+
export async function flushTelemetry() {
|
|
168
|
+
await Promise.all(_processors.map((processor) => processor.forceFlush()));
|
|
141
169
|
}
|
|
142
170
|
/**
|
|
143
171
|
* Reset the telemetry singleton. Test-only — production code should call
|
|
@@ -147,5 +175,10 @@ export function _resetTelemetryForTest() {
|
|
|
147
175
|
_tracer = null;
|
|
148
176
|
_initialized = false;
|
|
149
177
|
_sdk = null;
|
|
178
|
+
_processors = [];
|
|
179
|
+
setLogHook(null);
|
|
180
|
+
trace.disable();
|
|
181
|
+
context.disable();
|
|
182
|
+
propagation.disable();
|
|
150
183
|
}
|
|
151
184
|
//# sourceMappingURL=telemetry.js.map
|
package/dist/telemetry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA
|
|
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":"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"}
|
|
@@ -11,35 +11,8 @@
|
|
|
11
11
|
type WriteStream = ReturnType<typeof import("node:fs").createWriteStream>;
|
|
12
12
|
import type { ReadableSpan, SpanExporter } from "@opentelemetry/sdk-trace-base";
|
|
13
13
|
import { type ExportResult } from "@opentelemetry/core";
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
*
|
|
17
|
-
* `start_time_ms` / `end_time_ms` are unix-epoch milliseconds; `duration_ms`
|
|
18
|
-
* is end−start. Timestamps are ms (not ns) because that's what every
|
|
19
|
-
* downstream consumer (logs, dashboards, LLMs) actually uses.
|
|
20
|
-
*/
|
|
21
|
-
export interface TraceRecord {
|
|
22
|
-
trace_id: string;
|
|
23
|
-
span_id: string;
|
|
24
|
-
parent_span_id: string | null;
|
|
25
|
-
name: string;
|
|
26
|
-
kind: string;
|
|
27
|
-
start_time_ms: number;
|
|
28
|
-
end_time_ms: number;
|
|
29
|
-
duration_ms: number;
|
|
30
|
-
status: {
|
|
31
|
-
code: string;
|
|
32
|
-
message?: string;
|
|
33
|
-
};
|
|
34
|
-
attributes: Record<string, unknown>;
|
|
35
|
-
events: Array<{
|
|
36
|
-
name: string;
|
|
37
|
-
time_ms: number;
|
|
38
|
-
attributes?: Record<string, unknown>;
|
|
39
|
-
}>;
|
|
40
|
-
resource: Record<string, unknown>;
|
|
41
|
-
}
|
|
42
|
-
export declare function spanToRecord(span: ReadableSpan): TraceRecord;
|
|
14
|
+
export type { TraceRecord } from "@nodetool-ai/protocol";
|
|
15
|
+
export { spanToRecord } from "./span-record.js";
|
|
43
16
|
/**
|
|
44
17
|
* Append spans as JSONL to a file. Creates parent directories as needed.
|
|
45
18
|
*
|
|
@@ -78,5 +51,4 @@ export declare class StdoutSpanExporter implements SpanExporter {
|
|
|
78
51
|
shutdown(): Promise<void>;
|
|
79
52
|
forceFlush(): Promise<void>;
|
|
80
53
|
}
|
|
81
|
-
export {};
|
|
82
54
|
//# sourceMappingURL=trace-exporters.d.ts.map
|
|
@@ -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;
|
|
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;AAG1E,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
|
@@ -41,46 +41,8 @@ function dirname(p) {
|
|
|
41
41
|
return nodePath.dirname(p);
|
|
42
42
|
}
|
|
43
43
|
import { ExportResultCode } from "@opentelemetry/core";
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
/**
|
|
47
|
-
* Convert an OTel hrTime ([seconds, nanoseconds]) to integer unix-epoch ms.
|
|
48
|
-
*
|
|
49
|
-
* We round (rather than truncate) so a 0.6ms span doesn't read as 0ms, and
|
|
50
|
-
* we keep the schema integer-typed for downstream JSONL consumers that
|
|
51
|
-
* assume `start_time_ms`/`end_time_ms`/`duration_ms` are whole numbers.
|
|
52
|
-
*/
|
|
53
|
-
function hrTimeToMs(hrTime) {
|
|
54
|
-
return Math.round(hrTime[0] * 1000 + hrTime[1] / 1_000_000);
|
|
55
|
-
}
|
|
56
|
-
export function spanToRecord(span) {
|
|
57
|
-
const ctx = span.spanContext();
|
|
58
|
-
const startMs = hrTimeToMs(span.startTime);
|
|
59
|
-
const endMs = hrTimeToMs(span.endTime);
|
|
60
|
-
const statusCode = { code: STATUS_CODES[span.status.code] ?? "UNSET" };
|
|
61
|
-
const status = span.status.message
|
|
62
|
-
? { ...statusCode, message: span.status.message }
|
|
63
|
-
: statusCode;
|
|
64
|
-
return {
|
|
65
|
-
trace_id: ctx.traceId,
|
|
66
|
-
span_id: ctx.spanId,
|
|
67
|
-
parent_span_id: span.parentSpanContext?.spanId ?? null,
|
|
68
|
-
name: span.name,
|
|
69
|
-
kind: SPAN_KINDS[span.kind] ?? "INTERNAL",
|
|
70
|
-
start_time_ms: startMs,
|
|
71
|
-
end_time_ms: endMs,
|
|
72
|
-
duration_ms: endMs - startMs,
|
|
73
|
-
status,
|
|
74
|
-
attributes: { ...span.attributes },
|
|
75
|
-
events: span.events.map((e) => {
|
|
76
|
-
const event = { name: e.name, time_ms: hrTimeToMs(e.time) };
|
|
77
|
-
return e.attributes
|
|
78
|
-
? { ...event, attributes: { ...e.attributes } }
|
|
79
|
-
: event;
|
|
80
|
-
}),
|
|
81
|
-
resource: { ...span.resource.attributes }
|
|
82
|
-
};
|
|
83
|
-
}
|
|
44
|
+
import { externalSpanRecord } from "./run-trace-processor.js";
|
|
45
|
+
export { spanToRecord } from "./span-record.js";
|
|
84
46
|
/**
|
|
85
47
|
* Append spans as JSONL to a file. Creates parent directories as needed.
|
|
86
48
|
*
|
|
@@ -109,7 +71,7 @@ export class JsonlFileSpanExporter {
|
|
|
109
71
|
if (!this.stream)
|
|
110
72
|
throw new Error("trace stream not initialized");
|
|
111
73
|
for (const span of spans) {
|
|
112
|
-
await writeLine(this.stream, JSON.stringify(
|
|
74
|
+
await writeLine(this.stream, JSON.stringify(externalSpanRecord(span)) + "\n");
|
|
113
75
|
}
|
|
114
76
|
resultCallback({ code: ExportResultCode.SUCCESS });
|
|
115
77
|
})
|
|
@@ -187,7 +149,7 @@ export class StdoutSpanExporter {
|
|
|
187
149
|
export(spans, resultCallback) {
|
|
188
150
|
try {
|
|
189
151
|
for (const span of spans) {
|
|
190
|
-
const rec =
|
|
152
|
+
const rec = externalSpanRecord(span);
|
|
191
153
|
if (this.format === "json") {
|
|
192
154
|
process.stdout.write(JSON.stringify(rec) + "\n");
|
|
193
155
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-exporters.js","sourceRoot":"","sources":["../src/trace-exporters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,mEAAmE;AACnE,uEAAuE;AACvE,MAAM,MAAM,GAAG,kBAAkB,CAA2B,SAAS,CAAC,CAAC;AACvE,MAAM,OAAO,GACX,kBAAkB,CAAoC,kBAAkB,CAAC,CAAC;AAC5E,MAAM,QAAQ,GAAG,kBAAkB,CAA6B,WAAW,CAAC,CAAC;AAG7E,4EAA4E;AAC5E,yEAAyE;AACzE,SAAS,iBAAiB,CACxB,GAAG,IAA4D;IAE/D,sBAAsB;IACtB,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,4DAA4D,CAC7D,CAAC;IACJ,CAAC;IACD,sBAAsB;IACtB,OAAO,MAAM,CAAC,iBAAiB,CAAC,GAAG,IAAI,CAAC,CAAC;AAC3C,CAAC;AACD,KAAK,UAAU,KAAK,CAClB,GAAG,IAAyD;IAE5D,sBAAsB;IACtB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,CAAC;IACD,sBAAsB;IACtB,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;AAChC,CAAC;AACD,SAAS,OAAO,CAAC,CAAS;IACxB,sBAAsB;IACtB,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,sBAAsB;IACtB,OAAO,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AAC7B,CAAC;AAED,OAAO,EAAE,gBAAgB,EAAqB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"trace-exporters.js","sourceRoot":"","sources":["../src/trace-exporters.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `storage.*` IO spans around a run's asset storage adapter.
|
|
3
|
+
*
|
|
4
|
+
* Object stores already show their requests as `HTTP <method>` spans. The
|
|
5
|
+
* local file store does its IO on disk, so without these spans a slow asset
|
|
6
|
+
* save or load is invisible. The span names the call; it never carries a key,
|
|
7
|
+
* a URI or the bytes.
|
|
8
|
+
*/
|
|
9
|
+
import type { StorageAdapter } from "@nodetool-ai/storage";
|
|
10
|
+
/**
|
|
11
|
+
* Trace `store`, `retrieve`, `delete` and `list` on `adapter` itself, once.
|
|
12
|
+
* Hosts share one adapter between runs, so the methods are replaced on the
|
|
13
|
+
* instance: identity and `instanceof` checks keep working, and the spans are
|
|
14
|
+
* no-ops while telemetry is off.
|
|
15
|
+
*/
|
|
16
|
+
export declare function traceStorageAdapter(adapter: StorageAdapter | null): StorageAdapter | null;
|
|
17
|
+
//# sourceMappingURL=traced-storage.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traced-storage.d.ts","sourceRoot":"","sources":["../src/traced-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAK3D;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,GAAG,cAAc,GAAG,IAAI,CA0BzF"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `storage.*` IO spans around a run's asset storage adapter.
|
|
3
|
+
*
|
|
4
|
+
* Object stores already show their requests as `HTTP <method>` spans. The
|
|
5
|
+
* local file store does its IO on disk, so without these spans a slow asset
|
|
6
|
+
* save or load is invisible. The span names the call; it never carries a key,
|
|
7
|
+
* a URI or the bytes.
|
|
8
|
+
*/
|
|
9
|
+
import { withTaskSpan } from "./tracing-helpers.js";
|
|
10
|
+
const traced = new WeakSet();
|
|
11
|
+
/**
|
|
12
|
+
* Trace `store`, `retrieve`, `delete` and `list` on `adapter` itself, once.
|
|
13
|
+
* Hosts share one adapter between runs, so the methods are replaced on the
|
|
14
|
+
* instance: identity and `instanceof` checks keep working, and the spans are
|
|
15
|
+
* no-ops while telemetry is off.
|
|
16
|
+
*/
|
|
17
|
+
export function traceStorageAdapter(adapter) {
|
|
18
|
+
if (!adapter || traced.has(adapter)) {
|
|
19
|
+
return adapter;
|
|
20
|
+
}
|
|
21
|
+
traced.add(adapter);
|
|
22
|
+
const backend = { "nodetool.storage.backend": adapter.constructor.name };
|
|
23
|
+
const store = adapter.store.bind(adapter);
|
|
24
|
+
const retrieve = adapter.retrieve.bind(adapter);
|
|
25
|
+
const remove = adapter.delete.bind(adapter);
|
|
26
|
+
const list = adapter.list.bind(adapter);
|
|
27
|
+
adapter.store = (key, data, contentType) => withTaskSpan("io", "storage.store", { ...backend, "nodetool.storage.bytes": data.byteLength }, () => store(key, data, contentType));
|
|
28
|
+
adapter.retrieve = (uri) => withTaskSpan("io", "storage.retrieve", backend, async (span) => {
|
|
29
|
+
const bytes = await retrieve(uri);
|
|
30
|
+
span?.setAttribute("nodetool.storage.bytes", bytes?.byteLength ?? 0);
|
|
31
|
+
return bytes;
|
|
32
|
+
});
|
|
33
|
+
adapter.delete = (uri) => withTaskSpan("io", "storage.delete", backend, () => remove(uri));
|
|
34
|
+
adapter.list = (prefix, opts) => withTaskSpan("io", "storage.list", backend, async (span) => {
|
|
35
|
+
const result = await list(prefix, opts);
|
|
36
|
+
span?.setAttribute("nodetool.storage.entry_count", result.entries.length);
|
|
37
|
+
return result;
|
|
38
|
+
});
|
|
39
|
+
return adapter;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=traced-storage.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"traced-storage.js","sourceRoot":"","sources":["../src/traced-storage.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,MAAM,GAAG,IAAI,OAAO,EAAkB,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,UAAU,mBAAmB,CAAC,OAA8B;IAChE,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,OAAO,CAAC;IAAC,CAAC;IACxD,MAAM,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;IACpB,MAAM,OAAO,GAAG,EAAE,0BAA0B,EAAE,OAAO,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;IACzE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC1C,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IACxC,OAAO,CAAC,KAAK,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,EAAE,EAAE,CACzC,YAAY,CAAC,IAAI,EAAE,eAAe,EAAE,EAAE,GAAG,OAAO,EAAE,wBAAwB,EAAE,IAAI,CAAC,UAAU,EAAE,EAAE,GAAG,EAAE,CAClG,KAAK,CAAC,GAAG,EAAE,IAAI,EAAE,WAAW,CAAC,CAC9B,CAAC;IACJ,OAAO,CAAC,QAAQ,GAAG,CAAC,GAAG,EAAE,EAAE,CACzB,YAAY,CAAC,IAAI,EAAE,kBAAkB,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QAC7D,MAAM,KAAK,GAAG,MAAM,QAAQ,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,EAAE,YAAY,CAAC,wBAAwB,EAAE,KAAK,EAAE,UAAU,IAAI,CAAC,CAAC,CAAC;QACrE,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;IACL,OAAO,CAAC,MAAM,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,EAAE,gBAAgB,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3F,OAAO,CAAC,IAAI,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,EAAE,CAC9B,YAAY,CAAC,IAAI,EAAE,cAAc,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE;QACzD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACxC,IAAI,EAAE,YAAY,CAAC,8BAA8B,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAC1E,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC,CAAC;IACL,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,25 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
* Helpers for wrapping agent / workflow / node code in OpenTelemetry spans.
|
|
3
|
-
*
|
|
4
|
-
* All helpers degrade gracefully when telemetry is disabled (no tracer
|
|
5
|
-
* configured) — the wrapped function runs as if no span existed, with
|
|
6
|
-
* essentially zero overhead.
|
|
7
|
-
*
|
|
8
|
-
* # Span hierarchy
|
|
9
|
-
*
|
|
10
|
-
* workflow.run ← `withWorkflowSpan`
|
|
11
|
-
* node.process (per node) ← `withNodeSpan`
|
|
12
|
-
* llm.chat / llm.stream ← BaseProvider (existing)
|
|
13
|
-
*
|
|
14
|
-
* agent.execute ← `withAgentSpan({ kind: "execute" })`
|
|
15
|
-
* agent.plan ← `withAgentSpan({ kind: "plan" })`
|
|
16
|
-
* agent.step ← `withAgentSpan({ kind: "step" })`
|
|
17
|
-
* llm.chat / llm.stream ← BaseProvider (existing)
|
|
18
|
-
*
|
|
19
|
-
* Child spans nest automatically because OTel's `startActiveSpan` makes the
|
|
20
|
-
* span active in AsyncLocalStorage for the duration of the callback.
|
|
21
|
-
*/
|
|
22
|
-
import { type Span } from "@opentelemetry/api";
|
|
1
|
+
import { SpanStatusCode, type Span } from "@opentelemetry/api";
|
|
23
2
|
export type AgentSpanKind = "execute" | "plan" | "step";
|
|
24
3
|
/** Token counts and computed cost for one LLM call. */
|
|
25
4
|
export interface LlmUsage {
|
|
@@ -91,6 +70,12 @@ export declare function createUsageSlot(): {
|
|
|
91
70
|
getUsage: () => LlmUsage | null;
|
|
92
71
|
getRequest: () => RecordedRequestPayload;
|
|
93
72
|
};
|
|
73
|
+
/**
|
|
74
|
+
* Mark a span failed: ERROR status with the error text (the run-store
|
|
75
|
+
* `error_summary` source) and the recorded exception. Use it when a failure
|
|
76
|
+
* is returned instead of thrown, so the span does not end OK.
|
|
77
|
+
*/
|
|
78
|
+
export declare function markSpanError(span: Span | null, err: unknown): void;
|
|
94
79
|
/** Wrap a function in an OTel span; pass-through if telemetry is disabled. */
|
|
95
80
|
export declare function withSpan<T>(name: string, attributes: Record<string, unknown>, fn: (span: Span | null) => Promise<T>): Promise<T>;
|
|
96
81
|
/**
|
|
@@ -130,6 +115,13 @@ export declare function withWorkflowSpan<T>(attributes: {
|
|
|
130
115
|
}, fn: (span: Span | null) => Promise<T>): Promise<T>;
|
|
131
116
|
/** Async-generator variant of {@link withAgentSpan}. */
|
|
132
117
|
export declare function withAgentSpanGen<T, TReturn = void>(kind: AgentSpanKind, attributes: Parameters<typeof withAgentSpan>[1], genFactory: () => AsyncGenerator<T, TReturn>): AsyncGenerator<T, TReturn>;
|
|
118
|
+
/** Which resource a task span spends: waiting on IO, or burning CPU. */
|
|
119
|
+
export type TaskKind = "io" | "cpu";
|
|
120
|
+
/**
|
|
121
|
+
* Wrap an IO- or CPU-bound task in a span named `name` carrying
|
|
122
|
+
* `nodetool.task.kind`. Pass-through when telemetry is disabled.
|
|
123
|
+
*/
|
|
124
|
+
export declare function withTaskSpan<T>(kind: TaskKind, name: string, attributes: Record<string, unknown>, fn: (span: Span | null) => Promise<T>): Promise<T>;
|
|
133
125
|
/** Wrap a single node execution (kernel Actor) in a span. */
|
|
134
126
|
export declare function withNodeSpan<T>(attributes: {
|
|
135
127
|
nodeId: string;
|
|
@@ -137,4 +129,5 @@ export declare function withNodeSpan<T>(attributes: {
|
|
|
137
129
|
workflowId?: string;
|
|
138
130
|
extra?: Record<string, unknown>;
|
|
139
131
|
}, fn: (span: Span | null) => Promise<T>): Promise<T>;
|
|
132
|
+
export { SpanStatusCode };
|
|
140
133
|
//# sourceMappingURL=tracing-helpers.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing-helpers.d.ts","sourceRoot":"","sources":["../src/tracing-helpers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tracing-helpers.d.ts","sourceRoot":"","sources":["../src/tracing-helpers.ts"],"names":[],"mappings":"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"}
|