@nodetool-ai/runtime 0.7.0-rc.23 → 0.8.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +29 -0
- package/dist/.nodetool-build-stamp +1 -0
- package/dist/agent-memory.d.ts +118 -0
- package/dist/agent-memory.d.ts.map +1 -0
- package/dist/agent-memory.js +186 -0
- package/dist/agent-memory.js.map +1 -0
- package/dist/async-local-storage.d.ts +20 -0
- package/dist/async-local-storage.d.ts.map +1 -0
- package/dist/async-local-storage.js +28 -0
- package/dist/async-local-storage.js.map +1 -0
- package/dist/blender-executor.d.ts +93 -0
- package/dist/blender-executor.d.ts.map +1 -0
- package/dist/blender-executor.js +294 -0
- package/dist/blender-executor.js.map +1 -0
- package/dist/comfy-executor.d.ts +23 -1
- package/dist/comfy-executor.d.ts.map +1 -1
- package/dist/comfy-executor.js +234 -55
- package/dist/comfy-executor.js.map +1 -1
- package/dist/context-packer.d.ts +1 -1
- package/dist/context-packer.d.ts.map +1 -1
- package/dist/context-packer.js +23 -25
- package/dist/context-packer.js.map +1 -1
- package/dist/context.d.ts +982 -127
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +2649 -530
- package/dist/context.js.map +1 -1
- package/dist/cost-reconciler.d.ts +32 -0
- package/dist/cost-reconciler.d.ts.map +1 -0
- package/dist/cost-reconciler.js +21 -0
- package/dist/cost-reconciler.js.map +1 -0
- package/dist/entities.d.ts +33 -0
- package/dist/entities.d.ts.map +1 -0
- package/dist/entities.js +43 -0
- package/dist/entities.js.map +1 -0
- package/dist/external-media-fetch.d.ts +29 -0
- package/dist/external-media-fetch.d.ts.map +1 -0
- package/dist/external-media-fetch.js +38 -0
- package/dist/external-media-fetch.js.map +1 -0
- package/dist/generation-receipt.d.ts +86 -0
- package/dist/generation-receipt.d.ts.map +1 -0
- package/dist/generation-receipt.js +137 -0
- package/dist/generation-receipt.js.map +1 -0
- package/dist/generation-registry.d.ts +75 -0
- package/dist/generation-registry.d.ts.map +1 -0
- package/dist/generation-registry.js +144 -0
- package/dist/generation-registry.js.map +1 -0
- package/dist/google/client.d.ts +196 -0
- package/dist/google/client.d.ts.map +1 -0
- package/dist/google/client.js +396 -0
- package/dist/google/client.js.map +1 -0
- package/dist/google/index.d.ts +3 -0
- package/dist/google/index.d.ts.map +1 -0
- package/dist/google/index.js +3 -0
- package/dist/google/index.js.map +1 -0
- package/dist/google/token.d.ts +15 -0
- package/dist/google/token.d.ts.map +1 -0
- package/dist/google/token.js +24 -0
- package/dist/google/token.js.map +1 -0
- package/dist/host-binaries.d.ts +106 -0
- package/dist/host-binaries.d.ts.map +1 -0
- package/dist/host-binaries.js +352 -0
- package/dist/host-binaries.js.map +1 -0
- package/dist/image-codec.d.ts +76 -0
- package/dist/image-codec.d.ts.map +1 -0
- package/dist/image-codec.js +293 -0
- package/dist/image-codec.js.map +1 -0
- package/dist/image-model-tasks.d.ts +15 -0
- package/dist/image-model-tasks.d.ts.map +1 -0
- package/dist/image-model-tasks.js +24 -0
- package/dist/image-model-tasks.js.map +1 -0
- package/dist/index.d.ts +67 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +51 -4
- package/dist/index.js.map +1 -1
- package/dist/invocation-account.d.ts +43 -0
- package/dist/invocation-account.d.ts.map +1 -0
- package/dist/invocation-account.js +60 -0
- package/dist/invocation-account.js.map +1 -0
- package/dist/media-ref-bytes.d.ts +35 -0
- package/dist/media-ref-bytes.d.ts.map +1 -0
- package/dist/media-ref-bytes.js +191 -0
- package/dist/media-ref-bytes.js.map +1 -0
- package/dist/node-executor.d.ts +119 -2
- package/dist/node-executor.d.ts.map +1 -1
- package/dist/permission-gate.d.ts +152 -0
- package/dist/permission-gate.d.ts.map +1 -0
- package/dist/permission-gate.js +87 -0
- package/dist/permission-gate.js.map +1 -0
- package/dist/prefixed-storage-adapter.d.ts +33 -0
- package/dist/prefixed-storage-adapter.d.ts.map +1 -0
- package/dist/prefixed-storage-adapter.js +70 -0
- package/dist/prefixed-storage-adapter.js.map +1 -0
- package/dist/prompt-asset-refs.d.ts +222 -0
- package/dist/prompt-asset-refs.d.ts.map +1 -0
- package/dist/prompt-asset-refs.js +751 -0
- package/dist/prompt-asset-refs.js.map +1 -0
- package/dist/provider-cache.d.ts +3 -0
- package/dist/provider-cache.d.ts.map +1 -0
- package/dist/provider-cache.js +8 -0
- package/dist/provider-cache.js.map +1 -0
- package/dist/providers/aki-provider.d.ts +35 -10
- package/dist/providers/aki-provider.d.ts.map +1 -1
- package/dist/providers/aki-provider.js +90 -77
- package/dist/providers/aki-provider.js.map +1 -1
- package/dist/providers/alibaba-provider.d.ts +39 -0
- package/dist/providers/alibaba-provider.d.ts.map +1 -0
- package/dist/providers/alibaba-provider.js +86 -0
- package/dist/providers/alibaba-provider.js.map +1 -0
- package/dist/providers/anthropic-provider.d.ts +52 -3
- package/dist/providers/anthropic-provider.d.ts.map +1 -1
- package/dist/providers/anthropic-provider.js +1020 -338
- package/dist/providers/anthropic-provider.js.map +1 -1
- package/dist/providers/atlascloud-provider.d.ts +103 -0
- package/dist/providers/atlascloud-provider.d.ts.map +1 -0
- package/dist/providers/atlascloud-provider.js +1031 -0
- package/dist/providers/atlascloud-provider.js.map +1 -0
- package/dist/providers/atlascloud-transport.d.ts +100 -0
- package/dist/providers/atlascloud-transport.d.ts.map +1 -0
- package/dist/providers/atlascloud-transport.js +364 -0
- package/dist/providers/atlascloud-transport.js.map +1 -0
- package/dist/providers/atlascloud-webhook-registry.d.ts +35 -0
- package/dist/providers/atlascloud-webhook-registry.d.ts.map +1 -0
- package/dist/providers/atlascloud-webhook-registry.js +104 -0
- package/dist/providers/atlascloud-webhook-registry.js.map +1 -0
- package/dist/providers/audio-mime.d.ts +11 -0
- package/dist/providers/audio-mime.d.ts.map +1 -0
- package/dist/providers/audio-mime.js +46 -0
- package/dist/providers/audio-mime.js.map +1 -0
- package/dist/providers/base-provider.d.ts +501 -32
- package/dist/providers/base-provider.d.ts.map +1 -1
- package/dist/providers/base-provider.js +1280 -87
- package/dist/providers/base-provider.js.map +1 -1
- package/dist/providers/cassette-provider.d.ts +217 -0
- package/dist/providers/cassette-provider.d.ts.map +1 -0
- package/dist/providers/cassette-provider.js +502 -0
- package/dist/providers/cassette-provider.js.map +1 -0
- package/dist/providers/cerebras-provider.d.ts +6 -12
- package/dist/providers/cerebras-provider.d.ts.map +1 -1
- package/dist/providers/cerebras-provider.js +8 -33
- package/dist/providers/cerebras-provider.js.map +1 -1
- package/dist/providers/claude-agent-provider.d.ts +107 -74
- package/dist/providers/claude-agent-provider.d.ts.map +1 -1
- package/dist/providers/claude-agent-provider.js +1279 -517
- package/dist/providers/claude-agent-provider.js.map +1 -1
- package/dist/providers/codex-provider.d.ts +84 -0
- package/dist/providers/codex-provider.d.ts.map +1 -0
- package/dist/providers/codex-provider.js +505 -0
- package/dist/providers/codex-provider.js.map +1 -0
- package/dist/providers/cohere-provider.d.ts +7 -3
- package/dist/providers/cohere-provider.d.ts.map +1 -1
- package/dist/providers/cohere-provider.js +14 -2
- package/dist/providers/cohere-provider.js.map +1 -1
- package/dist/providers/comfy-cloud-provider.d.ts +30 -0
- package/dist/providers/comfy-cloud-provider.d.ts.map +1 -0
- package/dist/providers/comfy-cloud-provider.js +42 -0
- package/dist/providers/comfy-cloud-provider.js.map +1 -0
- package/dist/providers/content-filter.d.ts +46 -0
- package/dist/providers/content-filter.d.ts.map +1 -0
- package/dist/providers/content-filter.js +92 -0
- package/dist/providers/content-filter.js.map +1 -0
- package/dist/providers/context-exceeded.d.ts +37 -0
- package/dist/providers/context-exceeded.d.ts.map +1 -0
- package/dist/providers/context-exceeded.js +114 -0
- package/dist/providers/context-exceeded.js.map +1 -0
- package/dist/providers/context-window.d.ts +44 -0
- package/dist/providers/context-window.d.ts.map +1 -0
- package/dist/providers/context-window.js +145 -0
- package/dist/providers/context-window.js.map +1 -0
- package/dist/providers/contract/index.d.ts +4 -0
- package/dist/providers/contract/index.d.ts.map +1 -0
- package/dist/providers/contract/index.js +4 -0
- package/dist/providers/contract/index.js.map +1 -0
- package/dist/providers/contract/probe-manifest.d.ts +75 -0
- package/dist/providers/contract/probe-manifest.d.ts.map +1 -0
- package/dist/providers/contract/probe-manifest.js +379 -0
- package/dist/providers/contract/probe-manifest.js.map +1 -0
- package/dist/providers/contract/probe-runner.d.ts +57 -0
- package/dist/providers/contract/probe-runner.d.ts.map +1 -0
- package/dist/providers/contract/probe-runner.js +180 -0
- package/dist/providers/contract/probe-runner.js.map +1 -0
- package/dist/providers/contract/redact.d.ts +29 -0
- package/dist/providers/contract/redact.d.ts.map +1 -0
- package/dist/providers/contract/redact.js +113 -0
- package/dist/providers/contract/redact.js.map +1 -0
- package/dist/providers/core-tools.d.ts +75 -0
- package/dist/providers/core-tools.d.ts.map +1 -0
- package/dist/providers/core-tools.js +128 -0
- package/dist/providers/core-tools.js.map +1 -0
- package/dist/providers/cost-calculator.d.ts +69 -50
- package/dist/providers/cost-calculator.d.ts.map +1 -1
- package/dist/providers/cost-calculator.js +207 -397
- package/dist/providers/cost-calculator.js.map +1 -1
- package/dist/providers/credential-check.d.ts +45 -0
- package/dist/providers/credential-check.d.ts.map +1 -0
- package/dist/providers/credential-check.js +164 -0
- package/dist/providers/credential-check.js.map +1 -0
- package/dist/providers/custom-model-kinds.d.ts +33 -0
- package/dist/providers/custom-model-kinds.d.ts.map +1 -0
- package/dist/providers/custom-model-kinds.js +96 -0
- package/dist/providers/custom-model-kinds.js.map +1 -0
- package/dist/providers/custom-openai-provider.d.ts +83 -0
- package/dist/providers/custom-openai-provider.d.ts.map +1 -0
- package/dist/providers/custom-openai-provider.js +190 -0
- package/dist/providers/custom-openai-provider.js.map +1 -0
- package/dist/providers/custom-provider-registry.d.ts +19 -0
- package/dist/providers/custom-provider-registry.d.ts.map +1 -0
- package/dist/providers/custom-provider-registry.js +52 -0
- package/dist/providers/custom-provider-registry.js.map +1 -0
- package/dist/providers/deepseek-provider.d.ts +8 -14
- package/dist/providers/deepseek-provider.d.ts.map +1 -1
- package/dist/providers/deepseek-provider.js +6 -35
- package/dist/providers/deepseek-provider.js.map +1 -1
- package/dist/providers/defaults.d.ts +12 -0
- package/dist/providers/defaults.d.ts.map +1 -0
- package/dist/providers/defaults.js +12 -0
- package/dist/providers/defaults.js.map +1 -0
- 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 +62 -0
- package/dist/providers/dreamina-provider.d.ts.map +1 -0
- package/dist/providers/dreamina-provider.js +790 -0
- package/dist/providers/dreamina-provider.js.map +1 -0
- package/dist/providers/elevenlabs-provider.d.ts +50 -0
- package/dist/providers/elevenlabs-provider.d.ts.map +1 -0
- package/dist/providers/elevenlabs-provider.js +147 -0
- package/dist/providers/elevenlabs-provider.js.map +1 -0
- package/dist/providers/entity-references.d.ts +31 -0
- package/dist/providers/entity-references.d.ts.map +1 -0
- package/dist/providers/entity-references.js +113 -0
- package/dist/providers/entity-references.js.map +1 -0
- package/dist/providers/evolink-provider.d.ts +40 -0
- package/dist/providers/evolink-provider.d.ts.map +1 -0
- package/dist/providers/evolink-provider.js +312 -0
- package/dist/providers/evolink-provider.js.map +1 -0
- package/dist/providers/fake-provider.d.ts +74 -2
- package/dist/providers/fake-provider.d.ts.map +1 -1
- package/dist/providers/fake-provider.js +213 -1
- package/dist/providers/fake-provider.js.map +1 -1
- package/dist/providers/fal-generations.d.ts +106 -0
- package/dist/providers/fal-generations.d.ts.map +1 -0
- package/dist/providers/fal-generations.js +286 -0
- package/dist/providers/fal-generations.js.map +1 -0
- package/dist/providers/fal-provider.d.ts +173 -8
- package/dist/providers/fal-provider.d.ts.map +1 -1
- package/dist/providers/fal-provider.js +1396 -64
- package/dist/providers/fal-provider.js.map +1 -1
- package/dist/providers/fal-queue.d.ts +47 -0
- package/dist/providers/fal-queue.d.ts.map +1 -0
- package/dist/providers/fal-queue.js +231 -0
- package/dist/providers/fal-queue.js.map +1 -0
- package/dist/providers/gemini-provider.d.ts +150 -9
- package/dist/providers/gemini-provider.d.ts.map +1 -1
- package/dist/providers/gemini-provider.js +1515 -316
- package/dist/providers/gemini-provider.js.map +1 -1
- package/dist/providers/gmi-provider.d.ts +21 -0
- package/dist/providers/gmi-provider.d.ts.map +1 -0
- package/dist/providers/gmi-provider.js +34 -0
- package/dist/providers/gmi-provider.js.map +1 -0
- package/dist/providers/gpt-image-size.d.ts +3 -0
- package/dist/providers/gpt-image-size.d.ts.map +1 -0
- package/dist/providers/gpt-image-size.js +37 -0
- package/dist/providers/gpt-image-size.js.map +1 -0
- package/dist/providers/groq-provider.d.ts +9 -12
- package/dist/providers/groq-provider.d.ts.map +1 -1
- package/dist/providers/groq-provider.js +19 -33
- package/dist/providers/groq-provider.js.map +1 -1
- package/dist/providers/groq-request.d.ts +38 -0
- package/dist/providers/groq-request.d.ts.map +1 -0
- package/dist/providers/groq-request.js +138 -0
- package/dist/providers/groq-request.js.map +1 -0
- package/dist/providers/higgsfield-provider.d.ts +31 -0
- package/dist/providers/higgsfield-provider.d.ts.map +1 -0
- package/dist/providers/higgsfield-provider.js +143 -0
- package/dist/providers/higgsfield-provider.js.map +1 -0
- package/dist/providers/higgsfield-transport.d.ts +106 -0
- package/dist/providers/higgsfield-transport.d.ts.map +1 -0
- package/dist/providers/higgsfield-transport.js +182 -0
- package/dist/providers/higgsfield-transport.js.map +1 -0
- package/dist/providers/http-transport.d.ts +74 -0
- package/dist/providers/http-transport.d.ts.map +1 -0
- package/dist/providers/http-transport.js +152 -0
- package/dist/providers/http-transport.js.map +1 -0
- package/dist/providers/huggingface-provider.d.ts +73 -4
- package/dist/providers/huggingface-provider.d.ts.map +1 -1
- package/dist/providers/huggingface-provider.js +240 -34
- package/dist/providers/huggingface-provider.js.map +1 -1
- package/dist/providers/image-mime.d.ts +39 -0
- package/dist/providers/image-mime.d.ts.map +1 -0
- package/dist/providers/image-mime.js +111 -0
- package/dist/providers/image-mime.js.map +1 -0
- package/dist/providers/image-ref.d.ts +21 -0
- package/dist/providers/image-ref.d.ts.map +1 -0
- package/dist/providers/image-ref.js +44 -0
- package/dist/providers/image-ref.js.map +1 -0
- package/dist/providers/index.d.ts +87 -8
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +250 -56
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/jina-provider.d.ts +12 -3
- package/dist/providers/jina-provider.d.ts.map +1 -1
- package/dist/providers/jina-provider.js +21 -7
- package/dist/providers/jina-provider.js.map +1 -1
- package/dist/providers/kie-provider.d.ts +172 -10
- package/dist/providers/kie-provider.d.ts.map +1 -1
- package/dist/providers/kie-provider.js +1190 -228
- package/dist/providers/kie-provider.js.map +1 -1
- package/dist/providers/kie-webhook-registry.d.ts +28 -0
- package/dist/providers/kie-webhook-registry.d.ts.map +1 -0
- package/dist/providers/kie-webhook-registry.js +91 -0
- package/dist/providers/kie-webhook-registry.js.map +1 -0
- package/dist/providers/llama-provider.d.ts +23 -36
- package/dist/providers/llama-provider.d.ts.map +1 -1
- package/dist/providers/llama-provider.js +50 -355
- package/dist/providers/llama-provider.js.map +1 -1
- package/dist/providers/lmstudio-provider.d.ts +4 -7
- package/dist/providers/lmstudio-provider.d.ts.map +1 -1
- package/dist/providers/lmstudio-provider.js +24 -15
- 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 +341 -1
- package/dist/providers/manifest-models.d.ts.map +1 -1
- package/dist/providers/manifest-models.js +1106 -22
- package/dist/providers/manifest-models.js.map +1 -1
- package/dist/providers/media-mime.d.ts +14 -0
- package/dist/providers/media-mime.d.ts.map +1 -0
- package/dist/providers/media-mime.js +35 -0
- package/dist/providers/media-mime.js.map +1 -0
- package/dist/providers/meshy-provider.d.ts +16 -2
- package/dist/providers/meshy-provider.d.ts.map +1 -1
- package/dist/providers/meshy-provider.js +82 -46
- package/dist/providers/meshy-provider.js.map +1 -1
- package/dist/providers/meta-provider.d.ts +22 -0
- package/dist/providers/meta-provider.d.ts.map +1 -0
- package/dist/providers/meta-provider.js +54 -0
- package/dist/providers/meta-provider.js.map +1 -0
- package/dist/providers/minimax-provider.d.ts +27 -18
- package/dist/providers/minimax-provider.d.ts.map +1 -1
- package/dist/providers/minimax-provider.js +222 -72
- package/dist/providers/minimax-provider.js.map +1 -1
- package/dist/providers/mistral-provider.d.ts +8 -12
- package/dist/providers/mistral-provider.d.ts.map +1 -1
- package/dist/providers/mistral-provider.js +15 -34
- package/dist/providers/mistral-provider.js.map +1 -1
- package/dist/providers/moonshot-provider.d.ts +11 -15
- package/dist/providers/moonshot-provider.d.ts.map +1 -1
- package/dist/providers/moonshot-provider.js +33 -23
- package/dist/providers/moonshot-provider.js.map +1 -1
- package/dist/providers/node-llama-cpp-provider.d.ts +99 -0
- package/dist/providers/node-llama-cpp-provider.d.ts.map +1 -0
- package/dist/providers/node-llama-cpp-provider.js +484 -0
- package/dist/providers/node-llama-cpp-provider.js.map +1 -0
- package/dist/providers/nodetool-provider.d.ts +49 -0
- package/dist/providers/nodetool-provider.d.ts.map +1 -0
- package/dist/providers/nodetool-provider.js +222 -0
- package/dist/providers/nodetool-provider.js.map +1 -0
- package/dist/providers/oauth/browser-launcher.d.ts +23 -0
- package/dist/providers/oauth/browser-launcher.d.ts.map +1 -0
- package/dist/providers/oauth/browser-launcher.js +45 -0
- package/dist/providers/oauth/browser-launcher.js.map +1 -0
- package/dist/providers/oauth/claude-code-credentials.d.ts +74 -0
- package/dist/providers/oauth/claude-code-credentials.d.ts.map +1 -0
- package/dist/providers/oauth/claude-code-credentials.js +133 -0
- package/dist/providers/oauth/claude-code-credentials.js.map +1 -0
- package/dist/providers/oauth/claude-code-login.d.ts +124 -0
- package/dist/providers/oauth/claude-code-login.d.ts.map +1 -0
- package/dist/providers/oauth/claude-code-login.js +230 -0
- package/dist/providers/oauth/claude-code-login.js.map +1 -0
- package/dist/providers/oauth/claude-code-oauth-client.d.ts +111 -0
- package/dist/providers/oauth/claude-code-oauth-client.d.ts.map +1 -0
- package/dist/providers/oauth/claude-code-oauth-client.js +207 -0
- package/dist/providers/oauth/claude-code-oauth-client.js.map +1 -0
- package/dist/providers/oauth/errors.d.ts +54 -0
- package/dist/providers/oauth/errors.d.ts.map +1 -0
- package/dist/providers/oauth/errors.js +79 -0
- package/dist/providers/oauth/errors.js.map +1 -0
- package/dist/providers/oauth/index.d.ts +105 -0
- package/dist/providers/oauth/index.d.ts.map +1 -0
- package/dist/providers/oauth/index.js +167 -0
- package/dist/providers/oauth/index.js.map +1 -0
- package/dist/providers/oauth/jwt-claims.d.ts +23 -0
- package/dist/providers/oauth/jwt-claims.d.ts.map +1 -0
- package/dist/providers/oauth/jwt-claims.js +67 -0
- package/dist/providers/oauth/jwt-claims.js.map +1 -0
- package/dist/providers/oauth/local-callback-server.d.ts +60 -0
- package/dist/providers/oauth/local-callback-server.d.ts.map +1 -0
- package/dist/providers/oauth/local-callback-server.js +148 -0
- package/dist/providers/oauth/local-callback-server.js.map +1 -0
- package/dist/providers/oauth/oauth-client.d.ts +55 -0
- package/dist/providers/oauth/oauth-client.d.ts.map +1 -0
- package/dist/providers/oauth/oauth-client.js +161 -0
- package/dist/providers/oauth/oauth-client.js.map +1 -0
- package/dist/providers/oauth/openai-oauth-provider.d.ts +129 -0
- package/dist/providers/oauth/openai-oauth-provider.d.ts.map +1 -0
- package/dist/providers/oauth/openai-oauth-provider.js +265 -0
- package/dist/providers/oauth/openai-oauth-provider.js.map +1 -0
- package/dist/providers/oauth/pkce-helper.d.ts +43 -0
- package/dist/providers/oauth/pkce-helper.d.ts.map +1 -0
- package/dist/providers/oauth/pkce-helper.js +57 -0
- package/dist/providers/oauth/pkce-helper.js.map +1 -0
- package/dist/providers/oauth/redaction.d.ts +22 -0
- package/dist/providers/oauth/redaction.d.ts.map +1 -0
- package/dist/providers/oauth/redaction.js +59 -0
- package/dist/providers/oauth/redaction.js.map +1 -0
- package/dist/providers/oauth/secure-credential-store.d.ts +67 -0
- package/dist/providers/oauth/secure-credential-store.d.ts.map +1 -0
- package/dist/providers/oauth/secure-credential-store.js +73 -0
- package/dist/providers/oauth/secure-credential-store.js.map +1 -0
- package/dist/providers/oauth/token-store.d.ts +53 -0
- package/dist/providers/oauth/token-store.d.ts.map +1 -0
- package/dist/providers/oauth/token-store.js +78 -0
- package/dist/providers/oauth/token-store.js.map +1 -0
- package/dist/providers/oauth/types.d.ts +64 -0
- package/dist/providers/oauth/types.d.ts.map +1 -0
- package/dist/providers/oauth/types.js +12 -0
- package/dist/providers/oauth/types.js.map +1 -0
- package/dist/providers/object-tracking.d.ts +47 -0
- package/dist/providers/object-tracking.d.ts.map +1 -0
- package/dist/providers/object-tracking.js +46 -0
- package/dist/providers/object-tracking.js.map +1 -0
- package/dist/providers/offline-model-index.d.ts +20 -0
- package/dist/providers/offline-model-index.d.ts.map +1 -0
- package/dist/providers/offline-model-index.js +112 -0
- package/dist/providers/offline-model-index.js.map +1 -0
- package/dist/providers/ollama-provider.d.ts +30 -2
- package/dist/providers/ollama-provider.d.ts.map +1 -1
- package/dist/providers/ollama-provider.js +198 -43
- package/dist/providers/ollama-provider.js.map +1 -1
- package/dist/providers/openai-compat/client.d.ts +57 -0
- package/dist/providers/openai-compat/client.d.ts.map +1 -0
- package/dist/providers/openai-compat/client.js +157 -0
- package/dist/providers/openai-compat/client.js.map +1 -0
- package/dist/providers/openai-compat/decode.d.ts +36 -0
- package/dist/providers/openai-compat/decode.d.ts.map +1 -0
- package/dist/providers/openai-compat/decode.js +55 -0
- package/dist/providers/openai-compat/decode.js.map +1 -0
- package/dist/providers/openai-compat/errors.d.ts +54 -0
- package/dist/providers/openai-compat/errors.d.ts.map +1 -0
- package/dist/providers/openai-compat/errors.js +144 -0
- package/dist/providers/openai-compat/errors.js.map +1 -0
- package/dist/providers/openai-compat/index.d.ts +8 -0
- package/dist/providers/openai-compat/index.d.ts.map +1 -0
- package/dist/providers/openai-compat/index.js +5 -0
- package/dist/providers/openai-compat/index.js.map +1 -0
- package/dist/providers/openai-compat/sse.d.ts +14 -0
- package/dist/providers/openai-compat/sse.d.ts.map +1 -0
- package/dist/providers/openai-compat/sse.js +69 -0
- package/dist/providers/openai-compat/sse.js.map +1 -0
- package/dist/providers/openai-compat/types.d.ts +75 -0
- package/dist/providers/openai-compat/types.d.ts.map +1 -0
- package/dist/providers/openai-compat/types.js +9 -0
- package/dist/providers/openai-compat/types.js.map +1 -0
- package/dist/providers/openai-compat-provider.d.ts +90 -0
- package/dist/providers/openai-compat-provider.d.ts.map +1 -0
- package/dist/providers/openai-compat-provider.js +282 -0
- package/dist/providers/openai-compat-provider.js.map +1 -0
- package/dist/providers/openai-provider.d.ts +98 -27
- package/dist/providers/openai-provider.d.ts.map +1 -1
- package/dist/providers/openai-provider.js +1037 -105
- package/dist/providers/openai-provider.js.map +1 -1
- package/dist/providers/openrouter-provider.d.ts +58 -13
- package/dist/providers/openrouter-provider.d.ts.map +1 -1
- package/dist/providers/openrouter-provider.js +383 -51
- package/dist/providers/openrouter-provider.js.map +1 -1
- package/dist/providers/provider-call-failure.d.ts +39 -0
- package/dist/providers/provider-call-failure.d.ts.map +1 -0
- package/dist/providers/provider-call-failure.js +132 -0
- package/dist/providers/provider-call-failure.js.map +1 -0
- package/dist/providers/provider-error.d.ts +59 -0
- package/dist/providers/provider-error.d.ts.map +1 -0
- package/dist/providers/provider-error.js +171 -0
- package/dist/providers/provider-error.js.map +1 -0
- package/dist/providers/provider-generations.d.ts +99 -0
- package/dist/providers/provider-generations.d.ts.map +1 -0
- package/dist/providers/provider-generations.js +71 -0
- package/dist/providers/provider-generations.js.map +1 -0
- package/dist/providers/provider-queue.d.ts +62 -0
- package/dist/providers/provider-queue.d.ts.map +1 -0
- package/dist/providers/provider-queue.js +28 -0
- package/dist/providers/provider-queue.js.map +1 -0
- package/dist/providers/provider-registry.d.ts +33 -14
- package/dist/providers/provider-registry.d.ts.map +1 -1
- package/dist/providers/provider-registry.js +85 -68
- package/dist/providers/provider-registry.js.map +1 -1
- package/dist/providers/provider-request-log.d.ts +53 -0
- package/dist/providers/provider-request-log.d.ts.map +1 -0
- package/dist/providers/provider-request-log.js +168 -0
- package/dist/providers/provider-request-log.js.map +1 -0
- package/dist/providers/provider-session.d.ts +3 -0
- package/dist/providers/provider-session.d.ts.map +1 -0
- package/dist/providers/provider-session.js +10 -0
- package/dist/providers/provider-session.js.map +1 -0
- package/dist/providers/provider-transport.d.ts +11 -0
- package/dist/providers/provider-transport.d.ts.map +1 -0
- package/dist/providers/provider-transport.js +11 -0
- package/dist/providers/provider-transport.js.map +1 -0
- package/dist/providers/python-provider.d.ts +26 -13
- package/dist/providers/python-provider.d.ts.map +1 -1
- package/dist/providers/python-provider.js +204 -25
- package/dist/providers/python-provider.js.map +1 -1
- package/dist/providers/replicate-provider.d.ts +91 -8
- package/dist/providers/replicate-provider.d.ts.map +1 -1
- package/dist/providers/replicate-provider.js +823 -65
- package/dist/providers/replicate-provider.js.map +1 -1
- package/dist/providers/replicate-retry.d.ts +30 -0
- package/dist/providers/replicate-retry.d.ts.map +1 -0
- package/dist/providers/replicate-retry.js +97 -0
- package/dist/providers/replicate-retry.js.map +1 -0
- 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 +27 -0
- package/dist/providers/responses-api.d.ts.map +1 -0
- package/dist/providers/responses-api.js +297 -0
- package/dist/providers/responses-api.js.map +1 -0
- package/dist/providers/reve-provider.d.ts +46 -0
- package/dist/providers/reve-provider.d.ts.map +1 -0
- package/dist/providers/reve-provider.js +165 -0
- package/dist/providers/reve-provider.js.map +1 -0
- package/dist/providers/rodin-provider.d.ts +25 -2
- package/dist/providers/rodin-provider.d.ts.map +1 -1
- package/dist/providers/rodin-provider.js +95 -51
- package/dist/providers/rodin-provider.js.map +1 -1
- package/dist/providers/safe-url.d.ts +70 -0
- package/dist/providers/safe-url.d.ts.map +1 -0
- package/dist/providers/safe-url.js +277 -0
- package/dist/providers/safe-url.js.map +1 -0
- package/dist/providers/scripted-provider.d.ts +9 -0
- package/dist/providers/scripted-provider.d.ts.map +1 -1
- package/dist/providers/scripted-provider.js +86 -10
- package/dist/providers/scripted-provider.js.map +1 -1
- package/dist/providers/structured-output.d.ts +42 -0
- package/dist/providers/structured-output.d.ts.map +1 -0
- package/dist/providers/structured-output.js +83 -0
- package/dist/providers/structured-output.js.map +1 -0
- 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 +18 -18
- package/dist/providers/together-provider.d.ts.map +1 -1
- package/dist/providers/together-provider.js +140 -367
- package/dist/providers/together-provider.js.map +1 -1
- package/dist/providers/topaz-provider.d.ts +45 -0
- package/dist/providers/topaz-provider.d.ts.map +1 -0
- package/dist/providers/topaz-provider.js +244 -0
- package/dist/providers/topaz-provider.js.map +1 -0
- package/dist/providers/types.d.ts +641 -4
- package/dist/providers/types.d.ts.map +1 -1
- package/dist/providers/types.js +81 -1
- package/dist/providers/types.js.map +1 -1
- package/dist/providers/useapi-provider.d.ts +28 -0
- package/dist/providers/useapi-provider.d.ts.map +1 -0
- package/dist/providers/useapi-provider.js +274 -0
- package/dist/providers/useapi-provider.js.map +1 -0
- package/dist/providers/video-duration.d.ts +6 -0
- package/dist/providers/video-duration.d.ts.map +1 -0
- package/dist/providers/video-duration.js +63 -0
- package/dist/providers/video-duration.js.map +1 -0
- package/dist/providers/video-frame-fallback.d.ts +39 -0
- package/dist/providers/video-frame-fallback.d.ts.map +1 -0
- package/dist/providers/video-frame-fallback.js +155 -0
- package/dist/providers/video-frame-fallback.js.map +1 -0
- package/dist/providers/video-frames.d.ts +61 -0
- package/dist/providers/video-frames.d.ts.map +1 -0
- package/dist/providers/video-frames.js +208 -0
- package/dist/providers/video-frames.js.map +1 -0
- package/dist/providers/video-mime.d.ts +14 -0
- package/dist/providers/video-mime.d.ts.map +1 -0
- package/dist/providers/video-mime.js +44 -0
- package/dist/providers/video-mime.js.map +1 -0
- package/dist/providers/video-to-audio.d.ts +34 -0
- package/dist/providers/video-to-audio.d.ts.map +1 -0
- package/dist/providers/video-to-audio.js +62 -0
- package/dist/providers/video-to-audio.js.map +1 -0
- package/dist/providers/vllm-provider.d.ts +20 -8
- package/dist/providers/vllm-provider.d.ts.map +1 -1
- package/dist/providers/vllm-provider.js +44 -23
- package/dist/providers/vllm-provider.js.map +1 -1
- package/dist/providers/voyage-provider.d.ts +12 -3
- package/dist/providers/voyage-provider.d.ts.map +1 -1
- package/dist/providers/voyage-provider.js +21 -7
- package/dist/providers/voyage-provider.js.map +1 -1
- package/dist/providers/xai-provider.d.ts +56 -13
- package/dist/providers/xai-provider.d.ts.map +1 -1
- package/dist/providers/xai-provider.js +307 -22
- package/dist/providers/xai-provider.js.map +1 -1
- package/dist/python-bridge-base.d.ts +358 -0
- package/dist/python-bridge-base.d.ts.map +1 -0
- package/dist/python-bridge-base.js +1557 -0
- package/dist/python-bridge-base.js.map +1 -0
- package/dist/python-bridge-codec.d.ts +28 -0
- package/dist/python-bridge-codec.d.ts.map +1 -0
- package/dist/python-bridge-codec.js +39 -0
- package/dist/python-bridge-codec.js.map +1 -0
- package/dist/python-bridge-factory.d.ts +52 -0
- package/dist/python-bridge-factory.d.ts.map +1 -0
- package/dist/python-bridge-factory.js +69 -0
- package/dist/python-bridge-factory.js.map +1 -0
- package/dist/python-bridge-framing.d.ts +68 -0
- package/dist/python-bridge-framing.d.ts.map +1 -0
- package/dist/python-bridge-framing.js +91 -0
- package/dist/python-bridge-framing.js.map +1 -0
- package/dist/python-bridge-types.d.ts +545 -2
- package/dist/python-bridge-types.d.ts.map +1 -1
- package/dist/python-bridge-types.js +49 -1
- package/dist/python-bridge-types.js.map +1 -1
- package/dist/python-graph-resolver.d.ts +57 -0
- package/dist/python-graph-resolver.d.ts.map +1 -0
- package/dist/python-graph-resolver.js +79 -0
- package/dist/python-graph-resolver.js.map +1 -0
- package/dist/python-node-executor.d.ts +36 -4
- package/dist/python-node-executor.d.ts.map +1 -1
- package/dist/python-node-executor.js +177 -86
- package/dist/python-node-executor.js.map +1 -1
- package/dist/python-stdio-bridge.d.ts +18 -37
- package/dist/python-stdio-bridge.d.ts.map +1 -1
- package/dist/python-stdio-bridge.js +148 -475
- package/dist/python-stdio-bridge.js.map +1 -1
- package/dist/python-websocket-bridge.d.ts +140 -0
- package/dist/python-websocket-bridge.d.ts.map +1 -0
- package/dist/python-websocket-bridge.js +561 -0
- package/dist/python-websocket-bridge.js.map +1 -0
- package/dist/python-worker-stderr.d.ts +4 -0
- package/dist/python-worker-stderr.d.ts.map +1 -0
- package/dist/python-worker-stderr.js +24 -0
- package/dist/python-worker-stderr.js.map +1 -0
- package/dist/recommended-models.d.ts +2 -2
- package/dist/recommended-models.d.ts.map +1 -1
- package/dist/recommended-models.js +44 -4
- package/dist/recommended-models.js.map +1 -1
- package/dist/recoverable-node-error.d.ts +31 -0
- package/dist/recoverable-node-error.d.ts.map +1 -0
- package/dist/recoverable-node-error.js +37 -0
- package/dist/recoverable-node-error.js.map +1 -0
- package/dist/redact-params.d.ts +13 -0
- package/dist/redact-params.d.ts.map +1 -0
- package/dist/redact-params.js +57 -0
- package/dist/redact-params.js.map +1 -0
- 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 +30 -0
- package/dist/run-trace-context.d.ts.map +1 -0
- package/dist/run-trace-context.js +80 -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 +417 -0
- package/dist/run-trace-processor.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 +113 -0
- package/dist/run-trace-serialization.js.map +1 -0
- package/dist/sandbox-module-catalog.d.ts +43 -0
- package/dist/sandbox-module-catalog.d.ts.map +1 -0
- package/dist/sandbox-module-catalog.js +25 -0
- package/dist/sandbox-module-catalog.js.map +1 -0
- package/dist/storage-workspace.d.ts +62 -0
- package/dist/storage-workspace.d.ts.map +1 -0
- package/dist/storage-workspace.js +441 -0
- package/dist/storage-workspace.js.map +1 -0
- package/dist/swappable-python-bridge.d.ts +83 -0
- package/dist/swappable-python-bridge.d.ts.map +1 -0
- package/dist/swappable-python-bridge.js +246 -0
- package/dist/swappable-python-bridge.js.map +1 -0
- package/dist/telemetry.d.ts +16 -3
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +76 -20
- package/dist/telemetry.js.map +1 -1
- package/dist/testing.d.ts +81 -0
- package/dist/testing.d.ts.map +1 -0
- package/dist/testing.js +130 -0
- package/dist/testing.js.map +1 -0
- package/dist/token-counter.d.ts +30 -0
- package/dist/token-counter.d.ts.map +1 -0
- package/dist/token-counter.js +156 -0
- package/dist/token-counter.js.map +1 -0
- package/dist/trace-exporters.d.ts +11 -28
- package/dist/trace-exporters.d.ts.map +1 -1
- package/dist/trace-exporters.js +69 -22
- package/dist/trace-exporters.js.map +1 -1
- package/dist/tracing-helpers.d.ts +60 -26
- package/dist/tracing-helpers.d.ts.map +1 -1
- package/dist/tracing-helpers.js +100 -25
- 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/dist/turn-budget.d.ts +278 -0
- package/dist/turn-budget.d.ts.map +1 -0
- package/dist/turn-budget.js +365 -0
- package/dist/turn-budget.js.map +1 -0
- package/dist/variable-channel.d.ts +48 -0
- package/dist/variable-channel.d.ts.map +1 -0
- package/dist/variable-channel.js +110 -0
- package/dist/variable-channel.js.map +1 -0
- package/dist/workspace.d.ts +119 -0
- package/dist/workspace.d.ts.map +1 -0
- package/dist/workspace.js +112 -0
- package/dist/workspace.js.map +1 -0
- package/package.json +121 -19
package/dist/testing.js
ADDED
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test-only helpers that wire a {@link ProcessingContext} to in-memory fakes
|
|
3
|
+
* for every external dependency a workflow might touch.
|
|
4
|
+
*
|
|
5
|
+
* The goal is to let workflow examples *execute* end-to-end inside a unit
|
|
6
|
+
* test without making any provider call, opening any socket, or touching
|
|
7
|
+
* the user's file system. Imports are kept lean so the module stays cheap
|
|
8
|
+
* to load from any package's tests.
|
|
9
|
+
*/
|
|
10
|
+
import { getNodeBuiltinSync } from "@nodetool-ai/config";
|
|
11
|
+
const os = getNodeBuiltinSync("node:os");
|
|
12
|
+
const path = getNodeBuiltinSync("node:path");
|
|
13
|
+
const fs = getNodeBuiltinSync("node:fs");
|
|
14
|
+
import { InMemoryStorageAdapter } from "@nodetool-ai/storage";
|
|
15
|
+
import { ProcessingContext, MemoryCache } from "./context.js";
|
|
16
|
+
import { FakeProvider } from "./providers/fake-provider.js";
|
|
17
|
+
import { isString } from "@nodetool-ai/protocol";
|
|
18
|
+
/**
|
|
19
|
+
* Default `fetch` stub. Returns an empty `200 OK` `text/plain` response
|
|
20
|
+
* for every URL. Real workflows expecting JSON will get `{}` back.
|
|
21
|
+
*/
|
|
22
|
+
function defaultFakeFetch() {
|
|
23
|
+
return async (input, _init) => {
|
|
24
|
+
const url = isString(input) ? input : String(input);
|
|
25
|
+
const body = url.endsWith(".json") || url.includes("/api/") ? "{}" : "";
|
|
26
|
+
return new Response(body, {
|
|
27
|
+
status: 200,
|
|
28
|
+
headers: { "content-type": "text/plain" }
|
|
29
|
+
});
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* 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
|
|
35
|
+
* the temp workspace dir; call `cleanup()` when done.
|
|
36
|
+
*/
|
|
37
|
+
export function createFakeContext(options = {}) {
|
|
38
|
+
const ownsWorkspaceDir = options.workspaceDir == null;
|
|
39
|
+
const workspaceDir = options.workspaceDir ??
|
|
40
|
+
fs.mkdtempSync(path.join(os.tmpdir(), "nodetool-fake-ws-"));
|
|
41
|
+
const providers = new Map();
|
|
42
|
+
for (const [id, prov] of Object.entries(options.providers ?? {})) {
|
|
43
|
+
providers.set(id, prov);
|
|
44
|
+
}
|
|
45
|
+
const context = new ProcessingContext({
|
|
46
|
+
jobId: options.jobId ?? "fake-job",
|
|
47
|
+
userId: "fake-user",
|
|
48
|
+
workspaceDir,
|
|
49
|
+
cache: new MemoryCache(),
|
|
50
|
+
storage: new InMemoryStorageAdapter(),
|
|
51
|
+
workspaceStorage: new InMemoryStorageAdapter(),
|
|
52
|
+
variables: options.variables ?? {},
|
|
53
|
+
persistOutputAssets: options.persistOutputAssets ?? true,
|
|
54
|
+
fetchFn: options.fetchFn ?? defaultFakeFetch(),
|
|
55
|
+
secretResolver: (key) => {
|
|
56
|
+
if (options.secretResolver) {
|
|
57
|
+
const v = options.secretResolver(key);
|
|
58
|
+
if (v !== null)
|
|
59
|
+
return v;
|
|
60
|
+
}
|
|
61
|
+
// Default to empty so nodes that bypass the provider abstraction
|
|
62
|
+
// (e.g. SerpAPI search nodes calling `fetch` directly) error out on
|
|
63
|
+
// a missing key instead of hitting the real network with a junk
|
|
64
|
+
// credential. Providers don't consult this resolver because the
|
|
65
|
+
// provider-resolver short-circuits the secret lookup.
|
|
66
|
+
return "";
|
|
67
|
+
}
|
|
68
|
+
});
|
|
69
|
+
context.setProviderResolver((providerId) => {
|
|
70
|
+
const existing = providers.get(providerId);
|
|
71
|
+
if (existing)
|
|
72
|
+
return existing;
|
|
73
|
+
const fresh = options.defaultProvider ?? new FakeProvider();
|
|
74
|
+
providers.set(providerId, fresh);
|
|
75
|
+
return fresh;
|
|
76
|
+
});
|
|
77
|
+
return {
|
|
78
|
+
context,
|
|
79
|
+
workspaceDir,
|
|
80
|
+
providers,
|
|
81
|
+
cleanup: () => {
|
|
82
|
+
// Only remove the workspace dir if we created it. When the caller
|
|
83
|
+
// supplied their own path, leave the directory alone — a stray
|
|
84
|
+
// `rm -rf` on a caller-owned path would be dangerous.
|
|
85
|
+
if (!ownsWorkspaceDir)
|
|
86
|
+
return;
|
|
87
|
+
try {
|
|
88
|
+
fs.rmSync(workspaceDir, { recursive: true, force: true });
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
// Best effort — tests that already cleaned up shouldn't fail here.
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Replace `globalThis.fetch` with a stub that returns a `200 OK` empty
|
|
98
|
+
* response. Returns a restore function that puts the original `fetch`
|
|
99
|
+
* back. Useful for tests that touch nodes which bypass
|
|
100
|
+
* {@link ProcessingContext}'s fetch indirection (e.g. SerpAPI-backed
|
|
101
|
+
* search nodes that call `fetch` directly) and would otherwise reach
|
|
102
|
+
* the real network with stub credentials.
|
|
103
|
+
*
|
|
104
|
+
* Pass a `responder` to return per-URL responses instead of the empty
|
|
105
|
+
* default — handy when a test wants to assert behaviour on a specific
|
|
106
|
+
* endpoint.
|
|
107
|
+
*/
|
|
108
|
+
export function stubGlobalFetch(responder) {
|
|
109
|
+
const original = globalThis.fetch;
|
|
110
|
+
const stub = async (input, init) => {
|
|
111
|
+
const url = isString(input)
|
|
112
|
+
? input
|
|
113
|
+
: input instanceof URL
|
|
114
|
+
? input.toString()
|
|
115
|
+
: input.url;
|
|
116
|
+
if (responder) {
|
|
117
|
+
return responder(url, init);
|
|
118
|
+
}
|
|
119
|
+
const body = url.endsWith(".json") || url.includes("/api/") ? "{}" : "";
|
|
120
|
+
return new Response(body, {
|
|
121
|
+
status: 200,
|
|
122
|
+
headers: { "content-type": "text/plain" }
|
|
123
|
+
});
|
|
124
|
+
};
|
|
125
|
+
globalThis.fetch = stub;
|
|
126
|
+
return () => {
|
|
127
|
+
globalThis.fetch = original;
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=testing.js.map
|
|
@@ -0,0 +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,EAAE,WAAW;QACnB,YAAY;QACZ,KAAK,EAAE,IAAI,WAAW,EAAE;QACxB,OAAO,EAAE,IAAI,sBAAsB,EAAE;QACrC,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;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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accurate token counting via js-tiktoken.
|
|
3
|
+
*
|
|
4
|
+
* All token counting in the codebase routes through this module so estimates
|
|
5
|
+
* match the BPE tokenization real models use instead of char- or word-based
|
|
6
|
+
* approximations. Uses the `cl100k_base` encoding (GPT-3.5/4 family), a good
|
|
7
|
+
* general-purpose proxy across providers for budgeting, packing and eviction.
|
|
8
|
+
*
|
|
9
|
+
* The encoder is built once and cached — `getEncoding` bundles the BPE ranks,
|
|
10
|
+
* so there is no I/O after the first call.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Count BPE tokens in a string. Returns 0 for empty/nullish input.
|
|
14
|
+
*/
|
|
15
|
+
export declare function countTokens(text: string | null | undefined): number;
|
|
16
|
+
/**
|
|
17
|
+
* Truncate text to at most `maxTokens` BPE tokens, decoding the kept prefix
|
|
18
|
+
* back to a string. Returns "" when `maxTokens <= 0`.
|
|
19
|
+
*
|
|
20
|
+
* Encodes piece-by-piece (same splitting as {@link countTokens}) and stops once
|
|
21
|
+
* the budget is reached, so it never feeds a huge boundary-free run to `encode`
|
|
22
|
+
* in one shot — the input is bounded the same way the count is.
|
|
23
|
+
*
|
|
24
|
+
* A token boundary can fall in the middle of a multi-byte UTF-8 character, so
|
|
25
|
+
* decoding the kept prefix can leave a trailing U+FFFD replacement character or
|
|
26
|
+
* a lone UTF-16 surrogate. Any such trailing partial character is stripped so
|
|
27
|
+
* the result is always well-formed text.
|
|
28
|
+
*/
|
|
29
|
+
export declare function truncateToTokens(text: string, maxTokens: number): string;
|
|
30
|
+
//# sourceMappingURL=token-counter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-counter.d.ts","sourceRoot":"","sources":["../src/token-counter.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AA4EH;;GAEG;AACH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,GAAG,MAAM,CAQnE;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAkBxE"}
|
|
@@ -0,0 +1,156 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Accurate token counting via js-tiktoken.
|
|
3
|
+
*
|
|
4
|
+
* All token counting in the codebase routes through this module so estimates
|
|
5
|
+
* match the BPE tokenization real models use instead of char- or word-based
|
|
6
|
+
* approximations. Uses the `cl100k_base` encoding (GPT-3.5/4 family), a good
|
|
7
|
+
* general-purpose proxy across providers for budgeting, packing and eviction.
|
|
8
|
+
*
|
|
9
|
+
* The encoder is built once and cached — `getEncoding` bundles the BPE ranks,
|
|
10
|
+
* so there is no I/O after the first call.
|
|
11
|
+
*/
|
|
12
|
+
import { getEncoding } from "js-tiktoken";
|
|
13
|
+
let cachedEncoder = null;
|
|
14
|
+
function getEncoder() {
|
|
15
|
+
if (cachedEncoder === null) {
|
|
16
|
+
cachedEncoder = getEncoding("cl100k_base");
|
|
17
|
+
}
|
|
18
|
+
return cachedEncoder;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* js-tiktoken's pure-JS BPE is O(n²) within a single regex "piece", so a long
|
|
22
|
+
* run of characters with no internal whitespace (a hash, base64 blob, or a
|
|
23
|
+
* `"x".repeat(20000)` tool result) can take tens of seconds to encode.
|
|
24
|
+
*
|
|
25
|
+
* To bound that, the input is split *before* each whitespace run so every piece
|
|
26
|
+
* keeps its leading whitespace — these boundaries coincide with cl100k's own
|
|
27
|
+
* regex-piece boundaries, so summing the per-piece counts is exact for normal
|
|
28
|
+
* text. Whitespace-delimited pieces are then packed up to {@link PACK_LIMIT}
|
|
29
|
+
* chars to keep the number of `encode` calls small; a single boundary-free run
|
|
30
|
+
* longer than {@link RUN_LIMIT} is hard-split, capping the worst case (~0.4s
|
|
31
|
+
* for a 50k-char unbroken run instead of minutes).
|
|
32
|
+
*/
|
|
33
|
+
const PACK_LIMIT = 4096;
|
|
34
|
+
const RUN_LIMIT = 128;
|
|
35
|
+
/**
|
|
36
|
+
* Split text into bounded pieces for encoding. Splitting *before* each
|
|
37
|
+
* whitespace run keeps the leading whitespace with each piece, so the cut
|
|
38
|
+
* points coincide with cl100k's own regex-piece boundaries — per-piece token
|
|
39
|
+
* counts therefore sum exactly for normal text. Whitespace-delimited pieces are
|
|
40
|
+
* packed up to {@link PACK_LIMIT} chars to keep the `encode` call count low; a
|
|
41
|
+
* single boundary-free run longer than {@link RUN_LIMIT} is hard-split.
|
|
42
|
+
*/
|
|
43
|
+
function* encodingPieces(text) {
|
|
44
|
+
let buf = "";
|
|
45
|
+
for (const segment of text.split(/(?=\s)/)) {
|
|
46
|
+
if (segment.length > RUN_LIMIT) {
|
|
47
|
+
// A boundary-free run — hard-split it to bound the per-piece BPE cost.
|
|
48
|
+
if (buf) {
|
|
49
|
+
yield buf;
|
|
50
|
+
buf = "";
|
|
51
|
+
}
|
|
52
|
+
for (let i = 0; i < segment.length;) {
|
|
53
|
+
let end = Math.min(i + RUN_LIMIT, segment.length);
|
|
54
|
+
// Never cut between a surrogate pair: if the last code unit of the
|
|
55
|
+
// slice is a high surrogate, back off by one so the astral character
|
|
56
|
+
// stays whole. Splitting it would encode each half as U+FFFD, both
|
|
57
|
+
// overcounting tokens and leaving a replacement char in truncated text.
|
|
58
|
+
if (end < segment.length &&
|
|
59
|
+
segment.charCodeAt(end - 1) >= 0xd800 &&
|
|
60
|
+
segment.charCodeAt(end - 1) <= 0xdbff) {
|
|
61
|
+
end -= 1;
|
|
62
|
+
}
|
|
63
|
+
yield segment.slice(i, end);
|
|
64
|
+
i = end;
|
|
65
|
+
}
|
|
66
|
+
continue;
|
|
67
|
+
}
|
|
68
|
+
if (buf.length + segment.length > PACK_LIMIT) {
|
|
69
|
+
yield buf;
|
|
70
|
+
buf = segment;
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
buf += segment;
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
if (buf) {
|
|
77
|
+
yield buf;
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Count BPE tokens in a string. Returns 0 for empty/nullish input.
|
|
82
|
+
*/
|
|
83
|
+
export function countTokens(text) {
|
|
84
|
+
if (!text)
|
|
85
|
+
return 0;
|
|
86
|
+
const encoder = getEncoder();
|
|
87
|
+
let total = 0;
|
|
88
|
+
for (const piece of encodingPieces(text)) {
|
|
89
|
+
total += encoder.encode(piece, [], []).length;
|
|
90
|
+
}
|
|
91
|
+
return total;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Truncate text to at most `maxTokens` BPE tokens, decoding the kept prefix
|
|
95
|
+
* back to a string. Returns "" when `maxTokens <= 0`.
|
|
96
|
+
*
|
|
97
|
+
* Encodes piece-by-piece (same splitting as {@link countTokens}) and stops once
|
|
98
|
+
* the budget is reached, so it never feeds a huge boundary-free run to `encode`
|
|
99
|
+
* in one shot — the input is bounded the same way the count is.
|
|
100
|
+
*
|
|
101
|
+
* A token boundary can fall in the middle of a multi-byte UTF-8 character, so
|
|
102
|
+
* decoding the kept prefix can leave a trailing U+FFFD replacement character or
|
|
103
|
+
* a lone UTF-16 surrogate. Any such trailing partial character is stripped so
|
|
104
|
+
* the result is always well-formed text.
|
|
105
|
+
*/
|
|
106
|
+
export function truncateToTokens(text, maxTokens) {
|
|
107
|
+
if (maxTokens <= 0)
|
|
108
|
+
return "";
|
|
109
|
+
const encoder = getEncoder();
|
|
110
|
+
const kept = [];
|
|
111
|
+
let truncated = false;
|
|
112
|
+
for (const piece of encodingPieces(text)) {
|
|
113
|
+
for (const token of encoder.encode(piece, [], [])) {
|
|
114
|
+
if (kept.length >= maxTokens) {
|
|
115
|
+
truncated = true;
|
|
116
|
+
break;
|
|
117
|
+
}
|
|
118
|
+
kept.push(token);
|
|
119
|
+
}
|
|
120
|
+
if (truncated)
|
|
121
|
+
break;
|
|
122
|
+
}
|
|
123
|
+
// Within budget: return the original text untouched (no decode round-trip).
|
|
124
|
+
if (!truncated)
|
|
125
|
+
return text;
|
|
126
|
+
return stripTrailingPartialChar(encoder.decode(kept));
|
|
127
|
+
}
|
|
128
|
+
/**
|
|
129
|
+
* Drop a trailing partial character left by cutting at a token boundary: a
|
|
130
|
+
* U+FFFD replacement char (an incomplete UTF-8 sequence), a lone high surrogate
|
|
131
|
+
* (an incomplete UTF-16 pair), or a lone low surrogate not preceded by a high
|
|
132
|
+
* surrogate (a dangling second half of a pair).
|
|
133
|
+
*/
|
|
134
|
+
function stripTrailingPartialChar(text) {
|
|
135
|
+
let end = text.length;
|
|
136
|
+
while (end > 0) {
|
|
137
|
+
const code = text.charCodeAt(end - 1);
|
|
138
|
+
if (code === 0xfffd || (code >= 0xd800 && code <= 0xdbff)) {
|
|
139
|
+
end -= 1;
|
|
140
|
+
}
|
|
141
|
+
else if (code >= 0xdc00 && code <= 0xdfff) {
|
|
142
|
+
// Trailing low surrogate: only a valid pair if preceded by a high
|
|
143
|
+
// surrogate. If it is, leave the pair intact; otherwise strip the lone
|
|
144
|
+
// low surrogate.
|
|
145
|
+
const prev = end >= 2 ? text.charCodeAt(end - 2) : 0;
|
|
146
|
+
if (prev >= 0xd800 && prev <= 0xdbff)
|
|
147
|
+
break;
|
|
148
|
+
end -= 1;
|
|
149
|
+
}
|
|
150
|
+
else {
|
|
151
|
+
break;
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
return end === text.length ? text : text.slice(0, end);
|
|
155
|
+
}
|
|
156
|
+
//# sourceMappingURL=token-counter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"token-counter.js","sourceRoot":"","sources":["../src/token-counter.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,36 +8,11 @@
|
|
|
8
8
|
* Both produce the same structured shape, so an analyzer agent reading either
|
|
9
9
|
* file or stdout output gets identical fields.
|
|
10
10
|
*/
|
|
11
|
+
type WriteStream = ReturnType<typeof import("node:fs").createWriteStream>;
|
|
11
12
|
import type { ReadableSpan, SpanExporter } from "@opentelemetry/sdk-trace-base";
|
|
12
13
|
import { type ExportResult } from "@opentelemetry/core";
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
*
|
|
16
|
-
* `start_time_ms` / `end_time_ms` are unix-epoch milliseconds; `duration_ms`
|
|
17
|
-
* is end−start. Timestamps are ms (not ns) because that's what every
|
|
18
|
-
* downstream consumer (logs, dashboards, LLMs) actually uses.
|
|
19
|
-
*/
|
|
20
|
-
export interface TraceRecord {
|
|
21
|
-
trace_id: string;
|
|
22
|
-
span_id: string;
|
|
23
|
-
parent_span_id: string | null;
|
|
24
|
-
name: string;
|
|
25
|
-
kind: string;
|
|
26
|
-
start_time_ms: number;
|
|
27
|
-
end_time_ms: number;
|
|
28
|
-
duration_ms: number;
|
|
29
|
-
status: {
|
|
30
|
-
code: string;
|
|
31
|
-
message?: string;
|
|
32
|
-
};
|
|
33
|
-
attributes: Record<string, unknown>;
|
|
34
|
-
events: Array<{
|
|
35
|
-
name: string;
|
|
36
|
-
time_ms: number;
|
|
37
|
-
attributes?: Record<string, unknown>;
|
|
38
|
-
}>;
|
|
39
|
-
resource: Record<string, unknown>;
|
|
40
|
-
}
|
|
14
|
+
import type { TraceRecord } from "@nodetool-ai/protocol";
|
|
15
|
+
export type { TraceRecord } from "@nodetool-ai/protocol";
|
|
41
16
|
export declare function spanToRecord(span: ReadableSpan): TraceRecord;
|
|
42
17
|
/**
|
|
43
18
|
* Append spans as JSONL to a file. Creates parent directories as needed.
|
|
@@ -57,6 +32,14 @@ export declare class JsonlFileSpanExporter implements SpanExporter {
|
|
|
57
32
|
shutdown(): Promise<void>;
|
|
58
33
|
forceFlush(): Promise<void>;
|
|
59
34
|
}
|
|
35
|
+
/**
|
|
36
|
+
* Write a single line to a WriteStream, respecting backpressure.
|
|
37
|
+
*
|
|
38
|
+
* Resolves once the write callback has fired AND the stream has drained
|
|
39
|
+
* (if `write()` returned false). Rejects on any stream error during the
|
|
40
|
+
* write — caller is responsible for re-attaching listeners afterwards.
|
|
41
|
+
*/
|
|
42
|
+
export declare function writeLine(stream: WriteStream, line: string): Promise<void>;
|
|
60
43
|
export type StdoutFormat = "pretty" | "json";
|
|
61
44
|
/**
|
|
62
45
|
* Write spans to stdout. `format: "json"` emits JSONL; `format: "pretty"`
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-exporters.d.ts","sourceRoot":"","sources":["../src/trace-exporters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
1
|
+
{"version":3,"file":"trace-exporters.d.ts","sourceRoot":"","sources":["../src/trace-exporters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAWH,KAAK,WAAW,GAAG,UAAU,CAAC,cAAc,SAAS,EAAE,iBAAiB,CAAC,CAAC;AAiC1E,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,MAAM,+BAA+B,CAAC;AAChF,OAAO,EAAoB,KAAK,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAC1E,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEzD,YAAY,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAuBzD,wBAAgB,YAAY,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,CA2B5D;AAED;;;;;;;;;GASG;AACH,qBAAa,qBAAsB,YAAW,YAAY;IACxD,OAAO,CAAC,MAAM,CAA4B;IAC1C,OAAO,CAAC,WAAW,CAAgB;IAEnC,YAAY,QAAQ,EAAE,MAAM,EAK3B;IAED,MAAM,CACJ,KAAK,EAAE,YAAY,EAAE,EACrB,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAC7C,IAAI,CAkBN;IAGK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAS9B;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhC;CACF;AAED;;;;;;GAMG;AACH,wBAAgB,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAgC1E;AAED,MAAM,MAAM,YAAY,GAAG,QAAQ,GAAG,MAAM,CAAC;AAE7C;;;GAGG;AACH,qBAAa,kBAAmB,YAAW,YAAY;IAEzC,OAAO,CAAC,QAAQ,CAAC,MAAM;IAAnC,YAA6B,MAAM,GAAE,YAAuB,EAAI;IAEhE,MAAM,CACJ,KAAK,EAAE,YAAY,EAAE,EACrB,cAAc,EAAE,CAAC,MAAM,EAAE,YAAY,KAAK,IAAI,GAC7C,IAAI,CAcN;IAEK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAE9B;IAEK,UAAU,IAAI,OAAO,CAAC,IAAI,CAAC,CAEhC;CACF"}
|
package/dist/trace-exporters.js
CHANGED
|
@@ -8,10 +8,47 @@
|
|
|
8
8
|
* Both produce the same structured shape, so an analyzer agent reading either
|
|
9
9
|
* file or stdout output gets identical fields.
|
|
10
10
|
*/
|
|
11
|
-
import {
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
import { getNodeBuiltinSync } from "@nodetool-ai/config";
|
|
12
|
+
// Trace-exporter file/stream APIs require Node — lazy-load so this
|
|
13
|
+
// module loads on non-Node runtimes (where file exporters are unused).
|
|
14
|
+
const nodeFs = getNodeBuiltinSync("node:fs");
|
|
15
|
+
const nodeFsP = getNodeBuiltinSync("node:fs/promises");
|
|
16
|
+
const nodePath = getNodeBuiltinSync("node:path");
|
|
17
|
+
// The `!node*` guards below only fire in a non-Node runtime (browser/edge),
|
|
18
|
+
// which the test environment never is — unreachable here, so suppressed.
|
|
19
|
+
function createWriteStream(...args) {
|
|
20
|
+
// Stryker disable all
|
|
21
|
+
if (!nodeFs) {
|
|
22
|
+
throw new Error("JsonlFileSpanExporter requires node:fs (Node-only feature)");
|
|
23
|
+
}
|
|
24
|
+
// Stryker restore all
|
|
25
|
+
return nodeFs.createWriteStream(...args);
|
|
26
|
+
}
|
|
27
|
+
async function mkdir(...args) {
|
|
28
|
+
// Stryker disable all
|
|
29
|
+
if (!nodeFsP) {
|
|
30
|
+
throw new Error("File span exporter requires node:fs/promises");
|
|
31
|
+
}
|
|
32
|
+
// Stryker restore all
|
|
33
|
+
return nodeFsP.mkdir(...args);
|
|
34
|
+
}
|
|
35
|
+
function dirname(p) {
|
|
36
|
+
// Stryker disable all
|
|
37
|
+
if (!nodePath) {
|
|
38
|
+
throw new Error("File span exporter requires node:path");
|
|
39
|
+
}
|
|
40
|
+
// Stryker restore all
|
|
41
|
+
return nodePath.dirname(p);
|
|
42
|
+
}
|
|
14
43
|
import { ExportResultCode } from "@opentelemetry/core";
|
|
44
|
+
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
|
+
*/
|
|
15
52
|
const SPAN_KINDS = ["INTERNAL", "SERVER", "CLIENT", "PRODUCER", "CONSUMER"];
|
|
16
53
|
const STATUS_CODES = ["UNSET", "OK", "ERROR"];
|
|
17
54
|
/**
|
|
@@ -28,6 +65,10 @@ export function spanToRecord(span) {
|
|
|
28
65
|
const ctx = span.spanContext();
|
|
29
66
|
const startMs = hrTimeToMs(span.startTime);
|
|
30
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;
|
|
31
72
|
return {
|
|
32
73
|
trace_id: ctx.traceId,
|
|
33
74
|
span_id: ctx.spanId,
|
|
@@ -37,16 +78,14 @@ export function spanToRecord(span) {
|
|
|
37
78
|
start_time_ms: startMs,
|
|
38
79
|
end_time_ms: endMs,
|
|
39
80
|
duration_ms: endMs - startMs,
|
|
40
|
-
status
|
|
41
|
-
code: STATUS_CODES[span.status.code] ?? "UNSET",
|
|
42
|
-
...(span.status.message ? { message: span.status.message } : {})
|
|
43
|
-
},
|
|
81
|
+
status,
|
|
44
82
|
attributes: { ...span.attributes },
|
|
45
|
-
events: span.events.map((e) =>
|
|
46
|
-
name: e.name,
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
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
|
+
}),
|
|
50
89
|
resource: { ...span.resource.attributes }
|
|
51
90
|
};
|
|
52
91
|
}
|
|
@@ -72,10 +111,13 @@ export class JsonlFileSpanExporter {
|
|
|
72
111
|
export(spans, resultCallback) {
|
|
73
112
|
void this.streamReady
|
|
74
113
|
.then(async () => {
|
|
114
|
+
// Unreachable: streamReady only resolves after `this.stream` is assigned;
|
|
115
|
+
// if init failed it rejects and we go to .catch instead. Defensive guard.
|
|
116
|
+
// Stryker disable next-line ConditionalExpression,StringLiteral
|
|
75
117
|
if (!this.stream)
|
|
76
118
|
throw new Error("trace stream not initialized");
|
|
77
119
|
for (const span of spans) {
|
|
78
|
-
await writeLine(this.stream, JSON.stringify(
|
|
120
|
+
await writeLine(this.stream, JSON.stringify(externalSpanRecord(span)) + "\n");
|
|
79
121
|
}
|
|
80
122
|
resultCallback({ code: ExportResultCode.SUCCESS });
|
|
81
123
|
})
|
|
@@ -83,9 +125,13 @@ export class JsonlFileSpanExporter {
|
|
|
83
125
|
resultCallback({ code: ExportResultCode.FAILED, error: err });
|
|
84
126
|
});
|
|
85
127
|
}
|
|
128
|
+
// 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).
|
|
86
129
|
async shutdown() {
|
|
87
130
|
await this.streamReady;
|
|
88
131
|
await new Promise((resolve) => {
|
|
132
|
+
// Unreachable in practice: if streamReady resolved, the stream is set; if it
|
|
133
|
+
// rejected, the await above already threw. Defensive guard.
|
|
134
|
+
// Stryker disable next-line ConditionalExpression,BooleanLiteral
|
|
89
135
|
if (!this.stream)
|
|
90
136
|
return resolve();
|
|
91
137
|
this.stream.end(resolve);
|
|
@@ -102,7 +148,7 @@ export class JsonlFileSpanExporter {
|
|
|
102
148
|
* (if `write()` returned false). Rejects on any stream error during the
|
|
103
149
|
* write — caller is responsible for re-attaching listeners afterwards.
|
|
104
150
|
*/
|
|
105
|
-
function writeLine(stream, line) {
|
|
151
|
+
export function writeLine(stream, line) {
|
|
106
152
|
return new Promise((resolve, reject) => {
|
|
107
153
|
let written = false;
|
|
108
154
|
let drained = false;
|
|
@@ -118,6 +164,7 @@ function writeLine(stream, line) {
|
|
|
118
164
|
const maybeDone = () => {
|
|
119
165
|
if (written && (!needsDrain || drained)) {
|
|
120
166
|
stream.off("error", onError);
|
|
167
|
+
// Stryker disable next-line StringLiteral: redundant — resolving under backpressure means the once("drain") listener already fired and auto-removed itself, so there is never a drain listener to remove here.
|
|
121
168
|
stream.off("drain", onDrain);
|
|
122
169
|
resolve();
|
|
123
170
|
}
|
|
@@ -141,13 +188,14 @@ function writeLine(stream, line) {
|
|
|
141
188
|
*/
|
|
142
189
|
export class StdoutSpanExporter {
|
|
143
190
|
format;
|
|
191
|
+
// Stryker disable next-line StringLiteral: only `=== "json"` is checked, so any non-"json" default (incl. "") yields pretty — the default value is equivalent.
|
|
144
192
|
constructor(format = "pretty") {
|
|
145
193
|
this.format = format;
|
|
146
194
|
}
|
|
147
195
|
export(spans, resultCallback) {
|
|
148
196
|
try {
|
|
149
197
|
for (const span of spans) {
|
|
150
|
-
const rec =
|
|
198
|
+
const rec = externalSpanRecord(span);
|
|
151
199
|
if (this.format === "json") {
|
|
152
200
|
process.stdout.write(JSON.stringify(rec) + "\n");
|
|
153
201
|
}
|
|
@@ -172,8 +220,10 @@ const COLOR = {
|
|
|
172
220
|
dim: "\x1b[2m",
|
|
173
221
|
red: "\x1b[31m",
|
|
174
222
|
yellow: "\x1b[33m",
|
|
223
|
+
// Stryker disable next-line StringLiteral: `green`/`bold` are part of the palette but unused by formatPretty; kept for completeness.
|
|
175
224
|
green: "\x1b[32m",
|
|
176
225
|
cyan: "\x1b[36m",
|
|
226
|
+
// Stryker disable next-line StringLiteral: see above.
|
|
177
227
|
bold: "\x1b[1m",
|
|
178
228
|
reset: "\x1b[0m"
|
|
179
229
|
};
|
|
@@ -181,12 +231,9 @@ function colorize(s, color) {
|
|
|
181
231
|
return process.stdout.isTTY ? `${COLOR[color]}${s}${COLOR.reset}` : s;
|
|
182
232
|
}
|
|
183
233
|
function formatPretty(r) {
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
: r.status.code === "OK"
|
|
188
|
-
? "green"
|
|
189
|
-
: "dim";
|
|
234
|
+
// duration_ms is already integer-rounded by hrTimeToMs, so toFixed(1) only
|
|
235
|
+
// ever appended a meaningless ".0".
|
|
236
|
+
const dur = `${r.duration_ms}ms`;
|
|
190
237
|
const tags = [];
|
|
191
238
|
// Surface the most useful attributes inline, in priority order.
|
|
192
239
|
const inlineKeys = [
|
|
@@ -206,7 +253,7 @@ function formatPretty(r) {
|
|
|
206
253
|
}
|
|
207
254
|
}
|
|
208
255
|
const status = r.status.code === "ERROR"
|
|
209
|
-
? colorize(`[${r.status.code}${r.status.message ? `: ${r.status.message}` : ""}]`,
|
|
256
|
+
? colorize(`[${r.status.code}${r.status.message ? `: ${r.status.message}` : ""}]`, "red")
|
|
210
257
|
: "";
|
|
211
258
|
return `${colorize(r.name, "cyan")} ${colorize(dur, "yellow")} ${tags.join(" ")} ${status}`.trimEnd();
|
|
212
259
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trace-exporters.js","sourceRoot":"","sources":["../src/trace-exporters.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"trace-exporters.js","sourceRoot":"","sources":["../src/trace-exporters.ts"],"names":[],"mappings":"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"}
|