@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
|
@@ -1,45 +1,62 @@
|
|
|
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 {
|
|
26
5
|
inputTokens: number;
|
|
27
6
|
outputTokens: number;
|
|
28
7
|
cachedInputTokens?: number;
|
|
29
|
-
|
|
8
|
+
cacheWriteTokens?: number;
|
|
9
|
+
/** Cost of the call in US dollars. */
|
|
30
10
|
cost?: number;
|
|
31
11
|
}
|
|
32
12
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
13
|
+
* Per-call slot carrying the in-flight LLM call's side state: token usage and
|
|
14
|
+
* the exact request payload sent to the provider.
|
|
15
|
+
*
|
|
16
|
+
* Providers' `trackUsage` adds usage via {@link setLastUsage}; providers'
|
|
17
|
+
* `recordRequestPayload` writes the wire payload via {@link setLastRequest}.
|
|
18
|
+
* The traced wrapper reads both back ({@link consumeLastUsage},
|
|
19
|
+
* {@link peekLastRequest}) so it can attach usage to its span and, on failure,
|
|
20
|
+
* log precisely what was sent. Repeated writes in one call are summed so
|
|
21
|
+
* continuation requests keep their full token and cost totals.
|
|
22
|
+
*
|
|
23
|
+
* We use AsyncLocalStorage rather than an instance field so concurrent calls
|
|
24
|
+
* on the same provider instance don't clobber each other.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* The exact body a provider sent, held only so a failure log can sanitize and
|
|
28
|
+
* print it. Every provider records an object (its SDK's request params).
|
|
29
|
+
*/
|
|
30
|
+
export type RecordedRequestPayload = object | null;
|
|
31
|
+
/**
|
|
32
|
+
* Run `fn` inside a fresh per-call slot. `consumeLastUsage()` /
|
|
33
|
+
* `peekLastRequest()` afterwards return whatever the deepest provider hook
|
|
34
|
+
* wrote.
|
|
35
35
|
*/
|
|
36
36
|
export declare function withUsageCapture<T>(fn: () => Promise<T>): Promise<T>;
|
|
37
|
-
/** Provider hook:
|
|
37
|
+
/** Provider hook: add token usage for the in-flight LLM call. */
|
|
38
38
|
export declare function setLastUsage(usage: LlmUsage): void;
|
|
39
39
|
/** Read and clear the most recent usage recorded in this async context. */
|
|
40
40
|
export declare function consumeLastUsage(): LlmUsage | null;
|
|
41
41
|
/** Read (without clearing) the most recent usage in this async context. */
|
|
42
42
|
export declare function peekLastUsage(): LlmUsage | null;
|
|
43
|
+
/**
|
|
44
|
+
* Provider hook: record the exact payload sent to the provider for the
|
|
45
|
+
* in-flight LLM call. The traced wrapper reads this back via
|
|
46
|
+
* {@link peekLastRequest} to log precisely what was sent on failure.
|
|
47
|
+
*/
|
|
48
|
+
export declare function setLastRequest(request: unknown): void;
|
|
49
|
+
/** Read (without clearing) the request payload recorded in this async context. */
|
|
50
|
+
export declare function peekLastRequest(): RecordedRequestPayload;
|
|
51
|
+
/**
|
|
52
|
+
* Run a non-chat modality call (image/video/audio/3D/embedding) inside a fresh
|
|
53
|
+
* per-call slot so `recordRequestPayload` and `peekLastRequest` work the same
|
|
54
|
+
* way they do for chat. `fn` receives whether a modality capture was already
|
|
55
|
+
* active in this async context: nested calls (a batch helper delegating to its
|
|
56
|
+
* singular method) reuse the parent slot and pass `true`, so the caller can log
|
|
57
|
+
* a failure exactly once — at the outermost call.
|
|
58
|
+
*/
|
|
59
|
+
export declare function withModalityCapture<T>(fn: (alreadyActive: boolean) => Promise<T>): Promise<T>;
|
|
43
60
|
/**
|
|
44
61
|
* Create a per-call usage slot that survives across async-generator yields.
|
|
45
62
|
*
|
|
@@ -51,7 +68,16 @@ export declare function peekLastUsage(): LlmUsage | null;
|
|
|
51
68
|
export declare function createUsageSlot(): {
|
|
52
69
|
runInSlot: <T>(fn: () => Promise<T>) => Promise<T>;
|
|
53
70
|
getUsage: () => LlmUsage | null;
|
|
71
|
+
getRequest: () => RecordedRequestPayload;
|
|
54
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;
|
|
79
|
+
/** Wrap a function in an OTel span; pass-through if telemetry is disabled. */
|
|
80
|
+
export declare function withSpan<T>(name: string, attributes: Record<string, unknown>, fn: (span: Span | null) => Promise<T>): Promise<T>;
|
|
55
81
|
/**
|
|
56
82
|
* Wrap an async generator in an OTel span. Each `next()` call runs in the
|
|
57
83
|
* span's context, so any spans created inside `genFactory` nest under it.
|
|
@@ -89,6 +115,13 @@ export declare function withWorkflowSpan<T>(attributes: {
|
|
|
89
115
|
}, fn: (span: Span | null) => Promise<T>): Promise<T>;
|
|
90
116
|
/** Async-generator variant of {@link withAgentSpan}. */
|
|
91
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>;
|
|
92
125
|
/** Wrap a single node execution (kernel Actor) in a span. */
|
|
93
126
|
export declare function withNodeSpan<T>(attributes: {
|
|
94
127
|
nodeId: string;
|
|
@@ -96,4 +129,5 @@ export declare function withNodeSpan<T>(attributes: {
|
|
|
96
129
|
workflowId?: string;
|
|
97
130
|
extra?: Record<string, unknown>;
|
|
98
131
|
}, fn: (span: Span | null) => Promise<T>): Promise<T>;
|
|
132
|
+
export { SpanStatusCode };
|
|
99
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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"}
|
package/dist/tracing-helpers.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { recordAppRunLlmCost } from "./run-context.js";
|
|
1
2
|
/**
|
|
2
3
|
* Helpers for wrapping agent / workflow / node code in OpenTelemetry spans.
|
|
3
4
|
*
|
|
@@ -12,6 +13,12 @@
|
|
|
12
13
|
* llm.chat / llm.stream ← BaseProvider (existing)
|
|
13
14
|
*
|
|
14
15
|
* agent.execute ← `withAgentSpan({ kind: "execute" })`
|
|
16
|
+
*
|
|
17
|
+
* IO- and CPU-bound work (storage, subprocesses, image codecs, Python worker
|
|
18
|
+
* calls) gets its own span through `withTaskSpan`, tagged with
|
|
19
|
+
* `nodetool.task.kind` so a backend can split wall time by resource.
|
|
20
|
+
* Outbound `fetch` calls get `HTTP <method>` spans from the undici
|
|
21
|
+
* instrumentation registered in `initTelemetry`.
|
|
15
22
|
* agent.plan ← `withAgentSpan({ kind: "plan" })`
|
|
16
23
|
* agent.step ← `withAgentSpan({ kind: "step" })`
|
|
17
24
|
* llm.chat / llm.stream ← BaseProvider (existing)
|
|
@@ -19,31 +26,41 @@
|
|
|
19
26
|
* Child spans nest automatically because OTel's `startActiveSpan` makes the
|
|
20
27
|
* span active in AsyncLocalStorage for the duration of the callback.
|
|
21
28
|
*/
|
|
22
|
-
|
|
29
|
+
// `node:async_hooks` is Node-only; in browser/Edge this is a mutable holder,
|
|
30
|
+
// so usage tracking loses concurrency safety there but stays functional.
|
|
31
|
+
import { AsyncLocalStorage } from "./async-local-storage.js";
|
|
23
32
|
import { SpanStatusCode, context as otelContext, trace as otelTrace } from "@opentelemetry/api";
|
|
24
33
|
import { getTracer } from "./telemetry.js";
|
|
25
|
-
|
|
26
|
-
* Per-call usage slot. Providers' `trackUsage` writes into the active slot
|
|
27
|
-
* via {@link setLastUsage}, and the traced wrapper reads it via
|
|
28
|
-
* {@link consumeLastUsage} so it can attach the numbers to its span and
|
|
29
|
-
* `llm_call` event.
|
|
30
|
-
*
|
|
31
|
-
* We use AsyncLocalStorage rather than an instance field so concurrent calls
|
|
32
|
-
* on the same provider instance don't clobber each other.
|
|
33
|
-
*/
|
|
34
|
+
import { recordInvocationCost } from "./invocation-account.js";
|
|
34
35
|
const usageStore = new AsyncLocalStorage();
|
|
35
36
|
/**
|
|
36
|
-
* Run `fn` inside a fresh
|
|
37
|
-
* whatever the deepest
|
|
37
|
+
* Run `fn` inside a fresh per-call slot. `consumeLastUsage()` /
|
|
38
|
+
* `peekLastRequest()` afterwards return whatever the deepest provider hook
|
|
39
|
+
* wrote.
|
|
38
40
|
*/
|
|
39
41
|
export function withUsageCapture(fn) {
|
|
40
|
-
return usageStore.run({ usage: null }, fn);
|
|
42
|
+
return usageStore.run({ usage: null, request: null }, fn);
|
|
41
43
|
}
|
|
42
|
-
/** Provider hook:
|
|
44
|
+
/** Provider hook: add token usage for the in-flight LLM call. */
|
|
43
45
|
export function setLastUsage(usage) {
|
|
46
|
+
// Charge the enclosing node invocation before the slot check: an LLM call
|
|
47
|
+
// made outside a capture slot still cost money, and retry safety turns on
|
|
48
|
+
// whether this invocation spent anything.
|
|
49
|
+
recordInvocationCost(usage.cost);
|
|
50
|
+
recordAppRunLlmCost(usage.cost);
|
|
44
51
|
const slot = usageStore.getStore();
|
|
45
|
-
if (slot)
|
|
46
|
-
|
|
52
|
+
if (!slot)
|
|
53
|
+
return;
|
|
54
|
+
const previous = slot.usage;
|
|
55
|
+
slot.usage = previous
|
|
56
|
+
? {
|
|
57
|
+
inputTokens: previous.inputTokens + usage.inputTokens,
|
|
58
|
+
outputTokens: previous.outputTokens + usage.outputTokens,
|
|
59
|
+
cachedInputTokens: (previous.cachedInputTokens ?? 0) + (usage.cachedInputTokens ?? 0),
|
|
60
|
+
cacheWriteTokens: (previous.cacheWriteTokens ?? 0) + (usage.cacheWriteTokens ?? 0),
|
|
61
|
+
cost: (previous.cost ?? 0) + (usage.cost ?? 0)
|
|
62
|
+
}
|
|
63
|
+
: usage;
|
|
47
64
|
}
|
|
48
65
|
/** Read and clear the most recent usage recorded in this async context. */
|
|
49
66
|
export function consumeLastUsage() {
|
|
@@ -58,6 +75,39 @@ export function consumeLastUsage() {
|
|
|
58
75
|
export function peekLastUsage() {
|
|
59
76
|
return usageStore.getStore()?.usage ?? null;
|
|
60
77
|
}
|
|
78
|
+
/**
|
|
79
|
+
* Provider hook: record the exact payload sent to the provider for the
|
|
80
|
+
* in-flight LLM call. The traced wrapper reads this back via
|
|
81
|
+
* {@link peekLastRequest} to log precisely what was sent on failure.
|
|
82
|
+
*/
|
|
83
|
+
export function setLastRequest(request) {
|
|
84
|
+
const slot = usageStore.getStore();
|
|
85
|
+
// SAFETY: every provider records its SDK's request-params object here.
|
|
86
|
+
// HOLDOUT (anti-slop/no-unknown-parameters): the honest type is
|
|
87
|
+
// `RecordedRequestPayload` (`object | null`), which the enforced
|
|
88
|
+
// `no-object-parameters` rule refuses; no named union covers every
|
|
89
|
+
// provider SDK's request-params type.
|
|
90
|
+
if (slot)
|
|
91
|
+
slot.request = request;
|
|
92
|
+
}
|
|
93
|
+
/** Read (without clearing) the request payload recorded in this async context. */
|
|
94
|
+
export function peekLastRequest() {
|
|
95
|
+
return usageStore.getStore()?.request ?? null;
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Run a non-chat modality call (image/video/audio/3D/embedding) inside a fresh
|
|
99
|
+
* per-call slot so `recordRequestPayload` and `peekLastRequest` work the same
|
|
100
|
+
* way they do for chat. `fn` receives whether a modality capture was already
|
|
101
|
+
* active in this async context: nested calls (a batch helper delegating to its
|
|
102
|
+
* singular method) reuse the parent slot and pass `true`, so the caller can log
|
|
103
|
+
* a failure exactly once — at the outermost call.
|
|
104
|
+
*/
|
|
105
|
+
export function withModalityCapture(fn) {
|
|
106
|
+
const existing = usageStore.getStore();
|
|
107
|
+
if (existing?.modality)
|
|
108
|
+
return fn(true);
|
|
109
|
+
return usageStore.run({ usage: null, request: null, modality: true }, () => fn(false));
|
|
110
|
+
}
|
|
61
111
|
/**
|
|
62
112
|
* Create a per-call usage slot that survives across async-generator yields.
|
|
63
113
|
*
|
|
@@ -67,14 +117,26 @@ export function peekLastUsage() {
|
|
|
67
117
|
* `setLastUsage()` call wrote.
|
|
68
118
|
*/
|
|
69
119
|
export function createUsageSlot() {
|
|
70
|
-
const slot = { usage: null };
|
|
120
|
+
const slot = { usage: null, request: null };
|
|
71
121
|
return {
|
|
72
122
|
runInSlot: (fn) => usageStore.run(slot, fn),
|
|
73
|
-
getUsage: () => slot.usage
|
|
123
|
+
getUsage: () => slot.usage,
|
|
124
|
+
getRequest: () => slot.request
|
|
74
125
|
};
|
|
75
126
|
}
|
|
127
|
+
/**
|
|
128
|
+
* Mark a span failed: ERROR status with the error text (the run-store
|
|
129
|
+
* `error_summary` source) and the recorded exception. Use it when a failure
|
|
130
|
+
* is returned instead of thrown, so the span does not end OK.
|
|
131
|
+
*/
|
|
132
|
+
export function markSpanError(span, err) {
|
|
133
|
+
if (!span)
|
|
134
|
+
return;
|
|
135
|
+
span.setStatus({ code: SpanStatusCode.ERROR, message: String(err) });
|
|
136
|
+
span.recordException(err);
|
|
137
|
+
}
|
|
76
138
|
/** Wrap a function in an OTel span; pass-through if telemetry is disabled. */
|
|
77
|
-
async function withSpan(name, attributes, fn) {
|
|
139
|
+
export async function withSpan(name, attributes, fn) {
|
|
78
140
|
const tracer = getTracer();
|
|
79
141
|
if (!tracer)
|
|
80
142
|
return fn(null);
|
|
@@ -82,12 +144,13 @@ async function withSpan(name, attributes, fn) {
|
|
|
82
144
|
setAttributes(span, attributes);
|
|
83
145
|
try {
|
|
84
146
|
const result = await fn(span);
|
|
85
|
-
span
|
|
147
|
+
if (!spanEndedWithError(span)) {
|
|
148
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
149
|
+
}
|
|
86
150
|
return result;
|
|
87
151
|
}
|
|
88
152
|
catch (err) {
|
|
89
|
-
span
|
|
90
|
-
span.recordException(err);
|
|
153
|
+
markSpanError(span, err);
|
|
91
154
|
throw err;
|
|
92
155
|
}
|
|
93
156
|
finally {
|
|
@@ -119,15 +182,16 @@ export async function* withSpanGen(name, attributes, genFactory) {
|
|
|
119
182
|
const result = await otelContext.with(ctx, () => inner.next());
|
|
120
183
|
if (result.done) {
|
|
121
184
|
exhausted = true;
|
|
122
|
-
span
|
|
185
|
+
if (!spanEndedWithError(span)) {
|
|
186
|
+
span.setStatus({ code: SpanStatusCode.OK });
|
|
187
|
+
}
|
|
123
188
|
return result.value;
|
|
124
189
|
}
|
|
125
190
|
yield result.value;
|
|
126
191
|
}
|
|
127
192
|
}
|
|
128
193
|
catch (err) {
|
|
129
|
-
span
|
|
130
|
-
span.recordException(err);
|
|
194
|
+
markSpanError(span, err);
|
|
131
195
|
throw err;
|
|
132
196
|
}
|
|
133
197
|
finally {
|
|
@@ -141,6 +205,9 @@ export async function* withSpanGen(name, attributes, genFactory) {
|
|
|
141
205
|
span.end();
|
|
142
206
|
}
|
|
143
207
|
}
|
|
208
|
+
function spanEndedWithError(span) {
|
|
209
|
+
return "status" in span && typeof span.status === "object" && span.status !== null && "code" in span.status && span.status.code === SpanStatusCode.ERROR;
|
|
210
|
+
}
|
|
144
211
|
function setAttributes(span, attributes) {
|
|
145
212
|
for (const [k, v] of Object.entries(attributes)) {
|
|
146
213
|
if (v !== undefined && v !== null) {
|
|
@@ -198,6 +265,13 @@ function agentAttrs(kind, attributes) {
|
|
|
198
265
|
Object.assign(attrs, attributes.extra);
|
|
199
266
|
return attrs;
|
|
200
267
|
}
|
|
268
|
+
/**
|
|
269
|
+
* Wrap an IO- or CPU-bound task in a span named `name` carrying
|
|
270
|
+
* `nodetool.task.kind`. Pass-through when telemetry is disabled.
|
|
271
|
+
*/
|
|
272
|
+
export function withTaskSpan(kind, name, attributes, fn) {
|
|
273
|
+
return withSpan(name, { "nodetool.task.kind": kind, ...attributes }, fn);
|
|
274
|
+
}
|
|
201
275
|
/** Wrap a single node execution (kernel Actor) in a span. */
|
|
202
276
|
export function withNodeSpan(attributes, fn) {
|
|
203
277
|
const attrs = {
|
|
@@ -214,4 +288,5 @@ export function withNodeSpan(attributes, fn) {
|
|
|
214
288
|
function truncate(s, max) {
|
|
215
289
|
return s.length > max ? s.slice(0, max - 1) + "…" : s;
|
|
216
290
|
}
|
|
291
|
+
export { SpanStatusCode };
|
|
217
292
|
//# sourceMappingURL=tracing-helpers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracing-helpers.js","sourceRoot":"","sources":["../src/tracing-helpers.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"tracing-helpers.js","sourceRoot":"","sources":["../src/tracing-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Materialize the exact constant-speed source window sent to a video editor.
|
|
3
|
+
* The source asset remains untouched in storage. The returned MP4 starts at
|
|
4
|
+
* time zero so providers receive the same window-relative contract as the
|
|
5
|
+
* timeline candidate.
|
|
6
|
+
*/
|
|
7
|
+
export declare function trimVideoWindow(input: Uint8Array, startMs: number, endMs: number, signal?: AbortSignal): Promise<Uint8Array>;
|
|
8
|
+
//# sourceMappingURL=trim-video-window.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trim-video-window.d.ts","sourceRoot":"","sources":["../src/trim-video-window.ts"],"names":[],"mappings":"AASA;;;;;GAKG;AACH,wBAAsB,eAAe,CACnC,KAAK,EAAE,UAAU,EACjB,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,MAAM,CAAC,EAAE,WAAW,GACnB,OAAO,CAAC,UAAU,CAAC,CAgDrB"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { execFile as execFileCallback } from "node:child_process";
|
|
2
|
+
import { promisify } from "node:util";
|
|
3
|
+
import { promises as fs } from "node:fs";
|
|
4
|
+
import os from "node:os";
|
|
5
|
+
import path from "node:path";
|
|
6
|
+
import { withTaskSpan } from "./tracing-helpers.js";
|
|
7
|
+
const execFile = promisify(execFileCallback);
|
|
8
|
+
/**
|
|
9
|
+
* Materialize the exact constant-speed source window sent to a video editor.
|
|
10
|
+
* The source asset remains untouched in storage. The returned MP4 starts at
|
|
11
|
+
* time zero so providers receive the same window-relative contract as the
|
|
12
|
+
* timeline candidate.
|
|
13
|
+
*/
|
|
14
|
+
export async function trimVideoWindow(input, startMs, endMs, signal) {
|
|
15
|
+
if (input.length === 0 ||
|
|
16
|
+
!Number.isFinite(startMs) ||
|
|
17
|
+
!Number.isFinite(endMs) ||
|
|
18
|
+
startMs < 0 ||
|
|
19
|
+
endMs <= startMs) {
|
|
20
|
+
throw new Error("Video edit source window must be a positive finite range.");
|
|
21
|
+
}
|
|
22
|
+
signal?.throwIfAborted();
|
|
23
|
+
const dir = await fs.mkdtemp(path.join(os.tmpdir(), "nodetool-video-edit-"));
|
|
24
|
+
const inputPath = path.join(dir, "input.mp4");
|
|
25
|
+
const outputPath = path.join(dir, "window.mp4");
|
|
26
|
+
try {
|
|
27
|
+
await fs.writeFile(inputPath, input);
|
|
28
|
+
await withTaskSpan("cpu", "ffmpeg.trim_video_window", { "nodetool.video.input_bytes": input.length }, () => execFile("ffmpeg", [
|
|
29
|
+
"-y",
|
|
30
|
+
"-i",
|
|
31
|
+
inputPath,
|
|
32
|
+
"-ss",
|
|
33
|
+
String(startMs / 1000),
|
|
34
|
+
"-t",
|
|
35
|
+
String((endMs - startMs) / 1000),
|
|
36
|
+
"-c:v",
|
|
37
|
+
"libx264",
|
|
38
|
+
"-c:a",
|
|
39
|
+
"aac",
|
|
40
|
+
"-movflags",
|
|
41
|
+
"+faststart",
|
|
42
|
+
outputPath
|
|
43
|
+
], { maxBuffer: 50 * 1024 * 1024, signal }));
|
|
44
|
+
return new Uint8Array(await fs.readFile(outputPath));
|
|
45
|
+
}
|
|
46
|
+
finally {
|
|
47
|
+
await fs.rm(dir, { recursive: true, force: true });
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
//# sourceMappingURL=trim-video-window.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"trim-video-window.js","sourceRoot":"","sources":["../src/trim-video-window.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,QAAQ,GAAG,SAAS,CAAC,gBAAgB,CAAC,CAAC;AAE7C;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAiB,EACjB,OAAe,EACf,KAAa,EACb,MAAoB;IAEpB,IACE,KAAK,CAAC,MAAM,KAAK,CAAC;QAClB,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC;QACzB,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC;QACvB,OAAO,GAAG,CAAC;QACX,KAAK,IAAI,OAAO,EAChB,CAAC;QACD,MAAM,IAAI,KAAK,CACb,2DAA2D,CAC5D,CAAC;IACJ,CAAC;IACD,MAAM,EAAE,cAAc,EAAE,CAAC;IACzB,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;IAC7E,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IAC9C,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAChD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,YAAY,CAChB,KAAK,EACL,0BAA0B,EAC1B,EAAE,4BAA4B,EAAE,KAAK,CAAC,MAAM,EAAE,EAC9C,GAAG,EAAE,CACH,QAAQ,CACN,QAAQ,EACR;YACE,IAAI;YACJ,IAAI;YACJ,SAAS;YACT,KAAK;YACL,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC;YACtB,IAAI;YACJ,MAAM,CAAC,CAAC,KAAK,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC;YAChC,MAAM;YACN,SAAS;YACT,MAAM;YACN,KAAK;YACL,WAAW;YACX,YAAY;YACZ,UAAU;SACX,EACD,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,MAAM,EAAE,CACxC,CACJ,CAAC;QACF,OAAO,IAAI,UAAU,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IACvD,CAAC;YAAS,CAAC;QACT,MAAM,EAAE,CAAC,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,CAAC;AACH,CAAC"}
|