@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
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Invocation-scoped cost and asset accounting.
|
|
3
|
+
*
|
|
4
|
+
* The supervisor may only offer `retry` for an invocation that spent nothing
|
|
5
|
+
* and wrote nothing (docs/workflow-supervisor-design.md §5.3). Answering that
|
|
6
|
+
* needs per-invocation numbers, and a stack on the shared `ProcessingContext`
|
|
7
|
+
* cannot supply them: every actor holds the same context and actors complete
|
|
8
|
+
* out of order, so push/pop would credit actor A's charge to actor B whenever
|
|
9
|
+
* A finishes first — precisely the corruption that would re-expose retry after
|
|
10
|
+
* a billed call.
|
|
11
|
+
*
|
|
12
|
+
* So the scope travels with the invocation's async execution instead. Cost and
|
|
13
|
+
* asset hooks write to whichever account is on the async stack; concurrent
|
|
14
|
+
* invocations each have their own, in any completion order.
|
|
15
|
+
*/
|
|
16
|
+
// Lazily resolved so this module still loads in browser/Edge bundles. There the
|
|
17
|
+
// fallback holder has no per-context isolation, and concurrent invocations
|
|
18
|
+
// would share one account — acceptable only because the supervisor that reads
|
|
19
|
+
// these numbers runs in the kernel, which is Node-only.
|
|
20
|
+
import { AsyncLocalStorage } from "./async-local-storage.js";
|
|
21
|
+
const store = new AsyncLocalStorage();
|
|
22
|
+
export function createInvocationAccount() {
|
|
23
|
+
return { costUsd: 0, createdAssets: false };
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Run `fn` inside `account`. The caller owns the account so it can read what
|
|
27
|
+
* the invocation spent even when `fn` throws — which is the case retry safety
|
|
28
|
+
* turns on.
|
|
29
|
+
*/
|
|
30
|
+
export function inInvocationAccount(account, fn) {
|
|
31
|
+
return store.run(account, fn);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Charge the invocation currently on the async stack, if any.
|
|
35
|
+
*
|
|
36
|
+
* A non-finite amount means a provider reported something we cannot add up —
|
|
37
|
+
* and "cannot add up" must not read as "free", or the invocation would look
|
|
38
|
+
* cost-free and re-earn a retry after a real charge. It is recorded as a
|
|
39
|
+
* nominal charge instead: the number is meaningless, the fact of spending is
|
|
40
|
+
* not. `costUsd` stays finite so the escalation record remains JSON-safe.
|
|
41
|
+
*/
|
|
42
|
+
export function recordInvocationCost(usd) {
|
|
43
|
+
if (usd === undefined || usd === null)
|
|
44
|
+
return;
|
|
45
|
+
const account = store.getStore();
|
|
46
|
+
if (!account)
|
|
47
|
+
return;
|
|
48
|
+
account.costUsd += Number.isFinite(usd) ? usd : Number.MIN_VALUE;
|
|
49
|
+
}
|
|
50
|
+
/** Mark the invocation currently on the async stack as having written an asset. */
|
|
51
|
+
export function recordInvocationAsset() {
|
|
52
|
+
const account = store.getStore();
|
|
53
|
+
if (account)
|
|
54
|
+
account.createdAssets = true;
|
|
55
|
+
}
|
|
56
|
+
/** The account for the invocation currently on the async stack, if any. */
|
|
57
|
+
export function currentInvocationAccount() {
|
|
58
|
+
return store.getStore();
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=invocation-account.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invocation-account.js","sourceRoot":"","sources":["../src/invocation-account.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,gFAAgF;AAChF,2EAA2E;AAC3E,8EAA8E;AAC9E,wDAAwD;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAS7D,MAAM,KAAK,GAAG,IAAI,iBAAiB,EAAqB,CAAC;AAEzD,MAAM,UAAU,uBAAuB;IACrC,OAAO,EAAE,OAAO,EAAE,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,CAAC;AAC9C,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,OAA0B,EAC1B,EAAoB;IAEpB,OAAO,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAAC,GAA8B;IACjE,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO;IAC9C,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IACjC,IAAI,CAAC,OAAO;QAAE,OAAO;IACrB,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;AACnE,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,qBAAqB;IACnC,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;IACjC,IAAI,OAAO;QAAE,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;AAC5C,CAAC;AAED,2EAA2E;AAC3E,MAAM,UAAU,wBAAwB;IACtC,OAAO,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC1B,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** Encode bytes → base64 without requiring the `Buffer` global. */
|
|
2
|
+
export declare function encodeBase64(bytes: Uint8Array): string;
|
|
3
|
+
/** Minimal media ref shape for byte resolution (Python bridge + TS nodes). */
|
|
4
|
+
export type MediaRefValue = {
|
|
5
|
+
uri?: string;
|
|
6
|
+
type?: string;
|
|
7
|
+
asset_id?: string | null;
|
|
8
|
+
data?: unknown;
|
|
9
|
+
width?: number;
|
|
10
|
+
height?: number;
|
|
11
|
+
};
|
|
12
|
+
/** Byte sources needed by the shared resolver, without a full processing context. */
|
|
13
|
+
export interface MediaRefContext {
|
|
14
|
+
storage?: {
|
|
15
|
+
retrieve(uri: string): Promise<Uint8Array | null> | Uint8Array | null;
|
|
16
|
+
} | null;
|
|
17
|
+
resolveAssetBytes?: (uri: string, options?: {
|
|
18
|
+
requireOwnedAsset?: boolean;
|
|
19
|
+
}) => Promise<{
|
|
20
|
+
bytes: Uint8Array | null;
|
|
21
|
+
}>;
|
|
22
|
+
}
|
|
23
|
+
/** Caller-specific access and HTTP error behavior. Defaults retain runtime behavior. */
|
|
24
|
+
export interface MediaRefByteOptions {
|
|
25
|
+
allowLocalFile?: boolean;
|
|
26
|
+
/** Must enforce media URL and redirect policy, as fetchExternalMedia does. */
|
|
27
|
+
fetchHttp?: (uri: string) => Promise<Uint8Array | null>;
|
|
28
|
+
}
|
|
29
|
+
export declare function isAbsoluteFilePath(uri: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Resolve bytes for an image/audio/video/model ref.
|
|
32
|
+
* Shared by the Python bridge and TS nodes (e.g. Save Image).
|
|
33
|
+
*/
|
|
34
|
+
export declare function loadMediaRefBytes(value: MediaRefValue, context?: MediaRefContext, options?: MediaRefByteOptions): Promise<Uint8Array | null>;
|
|
35
|
+
//# sourceMappingURL=media-ref-bytes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-ref-bytes.d.ts","sourceRoot":"","sources":["../src/media-ref-bytes.ts"],"names":[],"mappings":"AAqCA,mEAAmE;AACnE,wBAAgB,YAAY,CAAC,KAAK,EAAE,UAAU,GAAG,MAAM,CAUtD;AAUD,8EAA8E;AAC9E,MAAM,MAAM,aAAa,GAAG;IAC1B,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,qFAAqF;AACrF,MAAM,WAAW,eAAe;IAC9B,OAAO,CAAC,EAAE;QACR,QAAQ,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,UAAU,GAAG,IAAI,CAAC;KACvE,GAAG,IAAI,CAAC;IACT,iBAAiB,CAAC,EAAE,CAClB,GAAG,EAAE,MAAM,EACX,OAAO,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,OAAO,CAAA;KAAE,KACtC,OAAO,CAAC;QAAE,KAAK,EAAE,UAAU,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CAC5C;AAED,wFAAwF;AACxF,MAAM,WAAW,mBAAmB;IAClC,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,8EAA8E;IAC9E,SAAS,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC;CACzD;AASD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAIvD;AAgDD;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,aAAa,EACpB,OAAO,CAAC,EAAE,eAAe,EACzB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAiG5B"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { isPackageAssetUri, isRawRgbaImage } from "@nodetool-ai/protocol";
|
|
2
|
+
import { getNodeBuiltinSync } from "@nodetool-ai/config";
|
|
3
|
+
import { fetchExternalMedia } from "./external-media-fetch.js";
|
|
4
|
+
import { encodeRawRgbaToPng } from "./image-codec.js";
|
|
5
|
+
import { isNonEmptyString } from "@nodetool-ai/protocol";
|
|
6
|
+
const _nodeFsP = getNodeBuiltinSync("node:fs/promises");
|
|
7
|
+
const _nodeUrl = getNodeBuiltinSync("node:url");
|
|
8
|
+
const readFile = (...args) => _nodeFsP
|
|
9
|
+
? _nodeFsP.readFile(...args)
|
|
10
|
+
: Promise.reject(new Error("node:fs/promises.readFile requires Node"));
|
|
11
|
+
const fileURLToPath = (u) => {
|
|
12
|
+
if (!_nodeUrl)
|
|
13
|
+
throw new Error("node:url.fileURLToPath requires Node");
|
|
14
|
+
return _nodeUrl.fileURLToPath(u);
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Decode base64 → bytes without requiring the `Buffer` global. This module is
|
|
18
|
+
* shared with the browser bundle (the in-browser runner loads it inside a Web
|
|
19
|
+
* Worker, which has no `Buffer`), so prefer `Buffer` on Node for speed and fall
|
|
20
|
+
* back to `atob` everywhere else.
|
|
21
|
+
*/
|
|
22
|
+
function decodeBase64(b64) {
|
|
23
|
+
if (typeof Buffer !== "undefined") {
|
|
24
|
+
return new Uint8Array(Buffer.from(b64, "base64"));
|
|
25
|
+
}
|
|
26
|
+
const binary = atob(b64);
|
|
27
|
+
const out = new Uint8Array(binary.length);
|
|
28
|
+
for (let i = 0; i < binary.length; i += 1)
|
|
29
|
+
out[i] = binary.charCodeAt(i);
|
|
30
|
+
return out;
|
|
31
|
+
}
|
|
32
|
+
/** Encode bytes → base64 without requiring the `Buffer` global. */
|
|
33
|
+
export function encodeBase64(bytes) {
|
|
34
|
+
if (typeof Buffer !== "undefined") {
|
|
35
|
+
return Buffer.from(bytes).toString("base64");
|
|
36
|
+
}
|
|
37
|
+
const chunks = [];
|
|
38
|
+
const CHUNK = 0x8000;
|
|
39
|
+
for (let i = 0; i < bytes.length; i += CHUNK) {
|
|
40
|
+
chunks.push(String.fromCharCode(...bytes.subarray(i, i + CHUNK)));
|
|
41
|
+
}
|
|
42
|
+
return btoa(chunks.join(""));
|
|
43
|
+
}
|
|
44
|
+
/** Encode a UTF-8 string → bytes without requiring the `Buffer` global. */
|
|
45
|
+
function encodeUtf8(text) {
|
|
46
|
+
if (typeof Buffer !== "undefined") {
|
|
47
|
+
return new Uint8Array(Buffer.from(text, "utf-8"));
|
|
48
|
+
}
|
|
49
|
+
return new TextEncoder().encode(text);
|
|
50
|
+
}
|
|
51
|
+
const ASSET_ID_EXTENSION_CANDIDATES = {
|
|
52
|
+
image: ["png", "jpg", "jpeg", "webp", "gif", "bmp", "svg"],
|
|
53
|
+
audio: ["wav", "mp3", "ogg", "m4a", "aac", "flac"],
|
|
54
|
+
video: ["mp4", "webm", "mov", "avi", "mpeg", "mkv"],
|
|
55
|
+
model3d: ["glb", "gltf", "obj", "fbx"]
|
|
56
|
+
};
|
|
57
|
+
export function isAbsoluteFilePath(uri) {
|
|
58
|
+
return (/^[A-Za-z]:[\\/]/.test(uri) || uri.startsWith("\\\\") || uri.startsWith("/"));
|
|
59
|
+
}
|
|
60
|
+
/** Decode a `data:` URI's payload, honoring the `;base64` header flag. */
|
|
61
|
+
function decodeDataUri(uri) {
|
|
62
|
+
// Split on the FIRST comma only: the header ends there and everything after
|
|
63
|
+
// is payload. `split(",", 2)` would discard payload past a second comma,
|
|
64
|
+
// corrupting non-base64 data (SVG path data, CSV, text) that contains commas.
|
|
65
|
+
const comma = uri.indexOf(",");
|
|
66
|
+
if (comma < 0) {
|
|
67
|
+
return null;
|
|
68
|
+
}
|
|
69
|
+
const header = uri.slice(0, comma);
|
|
70
|
+
const data = uri.slice(comma + 1);
|
|
71
|
+
try {
|
|
72
|
+
// decodeURIComponent throws URIError on a malformed percent-escape; the
|
|
73
|
+
// resolver contract is null-on-failure, so never let that escape.
|
|
74
|
+
return header.includes(";base64")
|
|
75
|
+
? decodeBase64(data)
|
|
76
|
+
: encodeUtf8(decodeURIComponent(data));
|
|
77
|
+
}
|
|
78
|
+
catch {
|
|
79
|
+
return null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
async function readUriBytes(uri) {
|
|
83
|
+
if (uri.startsWith("data:")) {
|
|
84
|
+
return decodeDataUri(uri);
|
|
85
|
+
}
|
|
86
|
+
if (uri.startsWith("file://")) {
|
|
87
|
+
try {
|
|
88
|
+
return await readFile(fileURLToPath(uri));
|
|
89
|
+
}
|
|
90
|
+
catch {
|
|
91
|
+
return null;
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (isAbsoluteFilePath(uri)) {
|
|
95
|
+
try {
|
|
96
|
+
return await readFile(uri);
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
return null;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return null;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Resolve bytes for an image/audio/video/model ref.
|
|
106
|
+
* Shared by the Python bridge and TS nodes (e.g. Save Image).
|
|
107
|
+
*/
|
|
108
|
+
export async function loadMediaRefBytes(value, context, options = {}) {
|
|
109
|
+
if (isRawRgbaImage(value)) {
|
|
110
|
+
return encodeRawRgbaToPng(value.data, value.width, value.height);
|
|
111
|
+
}
|
|
112
|
+
const data = value.data;
|
|
113
|
+
if (isNonEmptyString(data)) {
|
|
114
|
+
return data.startsWith("data:") ? decodeDataUri(data) : decodeBase64(data);
|
|
115
|
+
}
|
|
116
|
+
if (data instanceof Uint8Array && data.length > 0) {
|
|
117
|
+
return data;
|
|
118
|
+
}
|
|
119
|
+
const uri = value.uri;
|
|
120
|
+
if (!uri && !value.asset_id) {
|
|
121
|
+
return null;
|
|
122
|
+
}
|
|
123
|
+
if (uri && (uri.startsWith("asset://") || isPackageAssetUri(uri)) &&
|
|
124
|
+
context?.resolveAssetBytes) {
|
|
125
|
+
const { bytes } = await context.resolveAssetBytes(uri, {
|
|
126
|
+
requireOwnedAsset: true
|
|
127
|
+
});
|
|
128
|
+
return bytes;
|
|
129
|
+
}
|
|
130
|
+
if (!uri && value.asset_id && context?.resolveAssetBytes) {
|
|
131
|
+
const { bytes } = await context.resolveAssetBytes(`asset://${value.asset_id}`, {
|
|
132
|
+
requireOwnedAsset: true
|
|
133
|
+
});
|
|
134
|
+
return bytes;
|
|
135
|
+
}
|
|
136
|
+
// A storage adapter may read local paths itself. Reject before consulting it.
|
|
137
|
+
if (uri && options.allowLocalFile === false &&
|
|
138
|
+
(uri.startsWith("file://") ||
|
|
139
|
+
(isAbsoluteFilePath(uri) &&
|
|
140
|
+
!/^\/api\/storage\/[A-Za-z0-9_-][A-Za-z0-9_.-]*$/.test(uri)))) {
|
|
141
|
+
return null;
|
|
142
|
+
}
|
|
143
|
+
if (context?.storage) {
|
|
144
|
+
const candidates = new Set();
|
|
145
|
+
if (uri) {
|
|
146
|
+
candidates.add(uri);
|
|
147
|
+
}
|
|
148
|
+
if (value.asset_id) {
|
|
149
|
+
const refType = (value.type ?? "").toLowerCase();
|
|
150
|
+
const extensions = ASSET_ID_EXTENSION_CANDIDATES[refType] ?? ["bin"];
|
|
151
|
+
for (const extension of extensions) {
|
|
152
|
+
candidates.add(`/api/storage/${value.asset_id}.${extension}`);
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
for (const candidate of candidates) {
|
|
156
|
+
const stored = await context.storage.retrieve(candidate);
|
|
157
|
+
if (stored !== null) {
|
|
158
|
+
return stored;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
if (!uri) {
|
|
163
|
+
return null;
|
|
164
|
+
}
|
|
165
|
+
const fromUri = options.allowLocalFile === false && !uri.startsWith("data:")
|
|
166
|
+
? null
|
|
167
|
+
: await readUriBytes(uri);
|
|
168
|
+
if (fromUri !== null) {
|
|
169
|
+
return fromUri;
|
|
170
|
+
}
|
|
171
|
+
if (uri.startsWith("http://") || uri.startsWith("https://")) {
|
|
172
|
+
if (options.fetchHttp) {
|
|
173
|
+
return options.fetchHttp(uri);
|
|
174
|
+
}
|
|
175
|
+
// Last resort, and the only branch that opens a socket: the uri is caller
|
|
176
|
+
// data, so it goes through the media-ref egress policy rather than a bare
|
|
177
|
+
// fetch. A refusal throws and lands in the catch, which is this function's
|
|
178
|
+
// contract for "no bytes" either way.
|
|
179
|
+
try {
|
|
180
|
+
const response = await fetchExternalMedia(uri);
|
|
181
|
+
if (response.ok) {
|
|
182
|
+
return new Uint8Array(await response.arrayBuffer());
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
// fall through
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
//# sourceMappingURL=media-ref-bytes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-ref-bytes.js","sourceRoot":"","sources":["../src/media-ref-bytes.ts"],"names":[],"mappings":"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"}
|
package/dist/node-executor.d.ts
CHANGED
|
@@ -6,28 +6,126 @@
|
|
|
6
6
|
* interface for backward compatibility.
|
|
7
7
|
*/
|
|
8
8
|
import type { ProcessingContext } from "./context.js";
|
|
9
|
+
import type { CorrelationLineage } from "@nodetool-ai/protocol";
|
|
9
10
|
/**
|
|
10
11
|
* Read-side interface for streaming input nodes.
|
|
11
12
|
* Nodes call stream() or any() to consume incoming data.
|
|
13
|
+
*
|
|
14
|
+
* The `*WithEnvelope` variants expose correlation lineage and source edge
|
|
15
|
+
* ids; explicit join nodes (Zip/Cross) and forwarding nodes use them to
|
|
16
|
+
* preserve §3 lineage downstream.
|
|
12
17
|
*/
|
|
13
18
|
export interface StreamingInputs {
|
|
14
19
|
/** Yield items for a single handle until EOS. */
|
|
15
20
|
stream(name: string): AsyncGenerator<unknown>;
|
|
21
|
+
/** Yield MessageEnvelopes for a single handle until EOS. §5. */
|
|
22
|
+
streamWithEnvelope(name: string): AsyncGenerator<MessageEnvelopeLike>;
|
|
16
23
|
/** Yield [handle, item] tuples in arrival order across all handles. */
|
|
17
24
|
any(): AsyncGenerator<[string, unknown]>;
|
|
18
|
-
/**
|
|
25
|
+
/** Yield [handle, MessageEnvelope] tuples in arrival order. */
|
|
26
|
+
anyWithEnvelope(): AsyncGenerator<[string, MessageEnvelopeLike]>;
|
|
27
|
+
/**
|
|
28
|
+
* Return the first available item for a handle, or default if EOS.
|
|
29
|
+
*
|
|
30
|
+
* HOLDOUT (anti-slop/no-unknown-returns): the item is an arbitrary workflow
|
|
31
|
+
* value, the same open domain `stream()` and `any()` yield.
|
|
32
|
+
*/
|
|
19
33
|
first(name: string, defaultValue?: unknown): Promise<unknown>;
|
|
34
|
+
/**
|
|
35
|
+
* Static scope (ordered iteration roots, outermost first) for a connected
|
|
36
|
+
* input handle. Returns `[]` if the handle has no static scope (constant /
|
|
37
|
+
* config edge), or if correlation analysis was not run.
|
|
38
|
+
*
|
|
39
|
+
* Used by join nodes (§7) to identify each side's differing iteration root
|
|
40
|
+
* and project to the common parent prefix.
|
|
41
|
+
*/
|
|
42
|
+
scopeFor(handle: string): ReadonlyArray<string>;
|
|
43
|
+
/**
|
|
44
|
+
* The node's invocation scope — the largest non-empty input scope under the
|
|
45
|
+
* legacy comparable-prefix rule, or the longest common parent prefix on
|
|
46
|
+
* join nodes (§7). `[]` when analysis is off or the node has no inputs.
|
|
47
|
+
*/
|
|
48
|
+
invocationScope(): ReadonlyArray<string>;
|
|
49
|
+
/**
|
|
50
|
+
* True if the handle has at least one open upstream source. Distinguishes
|
|
51
|
+
* patched from unpatched optional streaming inputs (upstream counts are
|
|
52
|
+
* registered before actors start, so this is race-free at the top of
|
|
53
|
+
* `run()`).
|
|
54
|
+
*/
|
|
55
|
+
hasStream(name: string): boolean;
|
|
56
|
+
/**
|
|
57
|
+
* True if the handle has items already queued and not yet consumed.
|
|
58
|
+
* Optional: the kernel's `NodeInputs` implements it, hand-rolled test
|
|
59
|
+
* doubles need not. Together with {@link hasStream} it answers "could a
|
|
60
|
+
* take on this handle still produce a value?" — what the Code node's
|
|
61
|
+
* `stream.open(name)` reports to the guest.
|
|
62
|
+
*/
|
|
63
|
+
hasBuffered?(name: string): boolean;
|
|
64
|
+
/**
|
|
65
|
+
* Aborted when the run is cancelled. Producers that emit without waiting
|
|
66
|
+
* on inputs (generators, wall-clock pacers) must observe it — inbox
|
|
67
|
+
* closure only unblocks consumers, it does not stop a producing loop.
|
|
68
|
+
*/
|
|
69
|
+
readonly signal: AbortSignal;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Minimal MessageEnvelope shape visible to nodes. Mirrors
|
|
73
|
+
* `kernel/inbox.MessageEnvelope` without forcing runtime to import kernel
|
|
74
|
+
* (kernel depends on runtime, not the other way around).
|
|
75
|
+
*/
|
|
76
|
+
export interface MessageEnvelopeLike {
|
|
77
|
+
data: unknown;
|
|
78
|
+
metadata: Record<string, unknown>;
|
|
79
|
+
timestamp: number;
|
|
80
|
+
event_id: string;
|
|
81
|
+
correlation_lineage: CorrelationLineage;
|
|
82
|
+
source_edge_id: string;
|
|
20
83
|
}
|
|
21
84
|
/**
|
|
22
85
|
* Write-side interface for streaming output from within a run() method.
|
|
23
86
|
* Nodes call emit() to push partial results downstream immediately.
|
|
87
|
+
*
|
|
88
|
+
* `forward` copies an envelope's correlation lineage onto the emitted value
|
|
89
|
+
* — essential for stream nodes that act as filters/passthroughs. `drop`
|
|
90
|
+
* sends `lineage_done` for the source key so downstream joins do not wait
|
|
91
|
+
* on a key that was deliberately not emitted. §5.
|
|
24
92
|
*/
|
|
25
93
|
export interface StreamingOutputs {
|
|
26
94
|
/** Emit a value to a named output slot. */
|
|
27
|
-
emit(slot: string, value: unknown
|
|
95
|
+
emit(slot: string, value: unknown, opts?: {
|
|
96
|
+
lineage?: CorrelationLineage;
|
|
97
|
+
}): Promise<void>;
|
|
98
|
+
/**
|
|
99
|
+
* Emit a frame of grouped values atomically. Every sibling handle that
|
|
100
|
+
* shares an iteration group (same root id) receives the **same** minted
|
|
101
|
+
* token, so a Zip pair (`{ left, right, index }`) is one logical item
|
|
102
|
+
* downstream — not three independent items with different tokens. §1.
|
|
103
|
+
*
|
|
104
|
+
* Non-iteration handles in `values` inherit the supplied `opts.lineage`
|
|
105
|
+
* (or the actor's ambient invocation lineage if omitted).
|
|
106
|
+
*/
|
|
107
|
+
emitGroup(values: Record<string, unknown>, opts?: {
|
|
108
|
+
lineage?: CorrelationLineage;
|
|
109
|
+
}): Promise<void>;
|
|
110
|
+
/** Forward an envelope's lineage to `slot`. §5. */
|
|
111
|
+
forward(slot: string, envelope: MessageEnvelopeLike, ...overrideValue: [] | [unknown]): Promise<void>;
|
|
112
|
+
/** Send `lineage_done` for `slot` at the envelope's projected key. §5. */
|
|
113
|
+
drop(slot: string, envelope: MessageEnvelopeLike): Promise<void>;
|
|
28
114
|
/** Signal early end-of-stream for a specific output slot. */
|
|
29
115
|
complete(slot: string): void;
|
|
30
116
|
}
|
|
117
|
+
/**
|
|
118
|
+
* A durably stored trigger input delivered into a run. Mirrors
|
|
119
|
+
* `RunJobRequest.trigger_event` and `ProcessingContext.triggerEvent`.
|
|
120
|
+
* `node_id` names the trigger node the event targets; `payload` is the
|
|
121
|
+
* adapter-captured event data; `input_id` is the idempotency key of the
|
|
122
|
+
* `trigger_inputs` row that produced this run.
|
|
123
|
+
*/
|
|
124
|
+
export interface TriggerEvent {
|
|
125
|
+
node_id: string;
|
|
126
|
+
payload: unknown;
|
|
127
|
+
input_id: string;
|
|
128
|
+
}
|
|
31
129
|
export interface NodeExecutor {
|
|
32
130
|
/** One-shot processing (buffered mode). */
|
|
33
131
|
process(inputs: Record<string, unknown>, context?: ProcessingContext): Promise<Record<string, unknown>>;
|
|
@@ -43,11 +141,30 @@ export interface NodeExecutor {
|
|
|
43
141
|
* pushes results via `outputs.emit()`.
|
|
44
142
|
*/
|
|
45
143
|
run?(inputs: StreamingInputs, outputs: StreamingOutputs, context?: ProcessingContext): Promise<void>;
|
|
144
|
+
/**
|
|
145
|
+
* Apply property updates to a live executor instance. Long-running
|
|
146
|
+
* streaming nodes (synth generators, realtime effects) that read their
|
|
147
|
+
* properties per chunk pick the new values up on the next chunk —
|
|
148
|
+
* the basis for live parameter changes while a patch is running.
|
|
149
|
+
*/
|
|
150
|
+
applyProperties?(properties: Record<string, unknown>): void;
|
|
151
|
+
/**
|
|
152
|
+
* List properties whose static items follow the connected items instead of
|
|
153
|
+
* being replaced by them. The actor builds the combined list when it merges
|
|
154
|
+
* edge inputs over the node's properties.
|
|
155
|
+
*/
|
|
156
|
+
appendStaticInputs?: readonly string[];
|
|
46
157
|
/** Called before process/genProcess. */
|
|
47
158
|
preProcess?(): Promise<void>;
|
|
48
159
|
/** Called after process/genProcess completes. */
|
|
49
160
|
finalize?(): Promise<void>;
|
|
50
161
|
/** Called once during graph initialization. */
|
|
51
162
|
initialize?(): Promise<void>;
|
|
163
|
+
/**
|
|
164
|
+
* Trigger entry point. Called instead of genProcess()/run() when the run
|
|
165
|
+
* carries a `trigger_event` targeting this node: emit the event payload
|
|
166
|
+
* on the declared output slots and return — no live listening.
|
|
167
|
+
*/
|
|
168
|
+
emitTriggerEvent?(event: TriggerEvent, outputs: StreamingOutputs): Promise<void>;
|
|
52
169
|
}
|
|
53
170
|
//# sourceMappingURL=node-executor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"node-executor.d.ts","sourceRoot":"","sources":["../src/node-executor.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"node-executor.d.ts","sourceRoot":"","sources":["../src/node-executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The permission gate contract: the mode, the category, the decision matrix,
|
|
3
|
+
* the approval callback, and the context key a host publishes its gate under.
|
|
4
|
+
*
|
|
5
|
+
* It lives here rather than in `@nodetool-ai/agents` because the hosts that
|
|
6
|
+
* run a workflow (`@nodetool-ai/execution`, the headless job runner) sit
|
|
7
|
+
* below `agents` in the package graph and still have to set a gate on the
|
|
8
|
+
* context they build. The ladder that reads the gate, the classification of
|
|
9
|
+
* tool names, and the loops that gate through it stay in `agents`; this is
|
|
10
|
+
* only what a host needs to say "this run is headless".
|
|
11
|
+
*
|
|
12
|
+
* Design: docs/AGENTS.md § "The permission gate",
|
|
13
|
+
* packages/agents/AGENTS.md § "Where the permission gate is set".
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* ProcessingContext variable key under which a host publishes the
|
|
17
|
+
* `PermissionGateOptions` every loop under it must gate through.
|
|
18
|
+
*
|
|
19
|
+
* The gate has to reach loops the host never constructs: an `AgentNode` a chat
|
|
20
|
+
* turn started through `run_node`, a JS script, a sub-agent several levels
|
|
21
|
+
* down. The context bag is the one channel all of them already carry, and
|
|
22
|
+
* `ProcessingContext.copy()` shallow-copies it, so a child context shares the
|
|
23
|
+
* host's gate object rather than a clone — which is what makes
|
|
24
|
+
* `set_permission_mode` mid-turn reach a node that started before it
|
|
25
|
+
* (invariant I-1).
|
|
26
|
+
*
|
|
27
|
+
* Read it with `gateFromContext` in `@nodetool-ai/agents`, never directly: a
|
|
28
|
+
* context with no gate on it is a host that forgot to set one, and the answer
|
|
29
|
+
* there is a gate that denies every call past read, not "ungated".
|
|
30
|
+
*/
|
|
31
|
+
export declare const PERMISSION_GATE_CONTEXT_KEY = "nodetool_permission_gate";
|
|
32
|
+
/** How risky a tool is, independent of the active mode. */
|
|
33
|
+
export type PermissionCategory = "read" | "write" | "execute" | "external";
|
|
34
|
+
/** The user-selected permission mode for a chat turn. */
|
|
35
|
+
export type PermissionMode = "plan" | "default" | "auto";
|
|
36
|
+
/** What the gate decides to do with a single call before any user prompt. */
|
|
37
|
+
export type PermissionDecision = "allow" | "ask" | "block";
|
|
38
|
+
/** The user's answer to an approval prompt. */
|
|
39
|
+
export type ApprovalDecision = "allow" | "allow_for_chat" | "deny";
|
|
40
|
+
/**
|
|
41
|
+
* The matrix: `read` always runs; in `auto` everything runs; in `plan`
|
|
42
|
+
* anything actionable is blocked; in `default` actionable calls ask.
|
|
43
|
+
*/
|
|
44
|
+
export declare function decidePermission(mode: PermissionMode, category: PermissionCategory): PermissionDecision;
|
|
45
|
+
export interface ApprovalRequest {
|
|
46
|
+
toolName: string;
|
|
47
|
+
category: PermissionCategory;
|
|
48
|
+
/** Tool arguments, with the reserved `_message` field stripped. */
|
|
49
|
+
args: Record<string, unknown>;
|
|
50
|
+
/** Resolved user-facing status (LLM `_message` or the tool's template). */
|
|
51
|
+
message: string;
|
|
52
|
+
/**
|
|
53
|
+
* What the call will do, in plain sentences, for the approval dialog to ask
|
|
54
|
+
* about. A high-risk code action supplies one (`execute_code`'s
|
|
55
|
+
* `description`); most calls have none and the dialog shows `message`.
|
|
56
|
+
*/
|
|
57
|
+
description?: string;
|
|
58
|
+
}
|
|
59
|
+
export type RequestApproval = (request: ApprovalRequest) => Promise<ApprovalDecision>;
|
|
60
|
+
/**
|
|
61
|
+
* One actionable call, as the security monitor sees it. Structurally the
|
|
62
|
+
* `PendingAction` the monitor in `@nodetool-ai/agents` evaluates; declared
|
|
63
|
+
* here so the gate carries no dependency on the monitor.
|
|
64
|
+
*/
|
|
65
|
+
export interface PermissionGateAction {
|
|
66
|
+
/** Tool name about to run. */
|
|
67
|
+
name: string;
|
|
68
|
+
/** Permission category of the tool. */
|
|
69
|
+
category: PermissionCategory;
|
|
70
|
+
/** Tool arguments (with the reserved `_message` field already stripped). */
|
|
71
|
+
args: Record<string, unknown>;
|
|
72
|
+
/** Recent transcript text, used to evaluate user-intent clearing of SOFT blocks. */
|
|
73
|
+
transcript?: string;
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* What the monitor answers. The ladder reads `block`, `reason`, and the two
|
|
77
|
+
* labels it prints; the monitor's own narrower unions satisfy this shape.
|
|
78
|
+
*/
|
|
79
|
+
export interface PermissionGateVerdict {
|
|
80
|
+
block: boolean;
|
|
81
|
+
reason: string;
|
|
82
|
+
severity: string;
|
|
83
|
+
tier: string;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* A guest clock the gate can stop while a prompt is open. Structurally the
|
|
87
|
+
* sandbox's `SandboxClock`; declared here so the gate carries no dependency
|
|
88
|
+
* on the sandbox.
|
|
89
|
+
*/
|
|
90
|
+
export interface PermissionGateClock {
|
|
91
|
+
/** Stop the guest's budget until the returned function is called. */
|
|
92
|
+
suspend(): () => void;
|
|
93
|
+
/** Milliseconds suspended so far, including a suspension still open. */
|
|
94
|
+
suspendedMs(): number;
|
|
95
|
+
}
|
|
96
|
+
export interface PermissionGateOptions {
|
|
97
|
+
mode: PermissionMode;
|
|
98
|
+
/**
|
|
99
|
+
* Tool names the user has approved for the rest of the chat. Shared (by
|
|
100
|
+
* reference) across a thread so "Allow for this chat" sticks between turns.
|
|
101
|
+
*/
|
|
102
|
+
sessionAllow: Set<string>;
|
|
103
|
+
/** Round-trips an approval prompt to the UI and resolves with the answer. */
|
|
104
|
+
requestApproval: RequestApproval;
|
|
105
|
+
/**
|
|
106
|
+
* Opt-in LLM-judge consult. When set, every actionable (non-read) tool call
|
|
107
|
+
* that the mode/approval logic would otherwise run is first vetted by the
|
|
108
|
+
* monitor; a `block` verdict stops execution with a structured error. This
|
|
109
|
+
* is a plain callback (NOT the monitor class) so the gate carries no
|
|
110
|
+
* provider/LLM dependency. Default undefined → the gate behaves exactly as
|
|
111
|
+
* before, byte-for-byte. Read-class tools are NEVER consulted, even when set.
|
|
112
|
+
*/
|
|
113
|
+
securityMonitor?: (action: PermissionGateAction) => Promise<PermissionGateVerdict>;
|
|
114
|
+
/**
|
|
115
|
+
* The sandbox clock a code action runs on, when the call comes from one. The
|
|
116
|
+
* gate stops it for the length of an approval prompt or a monitor consult:
|
|
117
|
+
* that wait is the user's (or another model's), not the guest program's, and
|
|
118
|
+
* charging it to the action's wall clock kills the program that asked.
|
|
119
|
+
*/
|
|
120
|
+
clock?: PermissionGateClock;
|
|
121
|
+
/**
|
|
122
|
+
* Optional accessor for the recent transcript text, forwarded into the
|
|
123
|
+
* monitor's {@link PermissionGateAction.transcript} so SOFT-block
|
|
124
|
+
* user-intent clearing has evidence to reason over. Defaults to undefined →
|
|
125
|
+
* empty transcript. Only invoked when {@link securityMonitor} is set.
|
|
126
|
+
*/
|
|
127
|
+
recentTranscript?: () => string;
|
|
128
|
+
}
|
|
129
|
+
/**
|
|
130
|
+
* Why a headless host refuses an escalation, in one sentence naming it.
|
|
131
|
+
*
|
|
132
|
+
* Exported because two callers need the same words: the gate reports it when
|
|
133
|
+
* it denies, and a host that runs headless on purpose (the CLI behind a pipe)
|
|
134
|
+
* prints it once up front so the user is not left guessing why a later call
|
|
135
|
+
* was refused.
|
|
136
|
+
*/
|
|
137
|
+
export declare function headlessDenialReason(hostName: string): string;
|
|
138
|
+
/**
|
|
139
|
+
* The gate for a host with nobody to ask: `auto`, denying every escalation.
|
|
140
|
+
*
|
|
141
|
+
* `decidePermission` allows read, write, execute and external outright in
|
|
142
|
+
* `auto`, so this approver is reached only by a request the ladder itself
|
|
143
|
+
* raises — a security-monitor consult, or a category that starts asking in
|
|
144
|
+
* `auto` later. Denying is the only answer a host with no user can give
|
|
145
|
+
* honestly: resolving `"allow"` would grant exactly what the escalation was
|
|
146
|
+
* raised to withhold, and never resolving would hang the run (invariant I-4).
|
|
147
|
+
*
|
|
148
|
+
* `hostName` names the caller so the refusal says which host had no one to
|
|
149
|
+
* ask, rather than only that something was refused.
|
|
150
|
+
*/
|
|
151
|
+
export declare function headlessGate(hostName: string): PermissionGateOptions;
|
|
152
|
+
//# sourceMappingURL=permission-gate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"permission-gate.d.ts","sourceRoot":"","sources":["../src/permission-gate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH;;;;;;;;;;;;;;;GAeG;AACH,eAAO,MAAM,2BAA2B,6BAA6B,CAAC;AAEtE,2DAA2D;AAC3D,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;AAE3E,yDAAyD;AACzD,MAAM,MAAM,cAAc,GAAG,MAAM,GAAG,SAAS,GAAG,MAAM,CAAC;AAEzD,6EAA6E;AAC7E,MAAM,MAAM,kBAAkB,GAAG,OAAO,GAAG,KAAK,GAAG,OAAO,CAAC;AAE3D,+CAA+C;AAC/C,MAAM,MAAM,gBAAgB,GAAG,OAAO,GAAG,gBAAgB,GAAG,MAAM,CAAC;AAEnE;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,IAAI,EAAE,cAAc,EACpB,QAAQ,EAAE,kBAAkB,GAC3B,kBAAkB,CAWpB;AAED,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,mEAAmE;IACnE,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,2EAA2E;IAC3E,OAAO,EAAE,MAAM,CAAC;IAChB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,MAAM,eAAe,GAAG,CAC5B,OAAO,EAAE,eAAe,KACrB,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAE/B;;;;GAIG;AACH,MAAM,WAAW,oBAAoB;IACnC,8BAA8B;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,QAAQ,EAAE,kBAAkB,CAAC;IAC7B,4EAA4E;IAC5E,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9B,oFAAoF;IACpF,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;GAIG;AACH,MAAM,WAAW,mBAAmB;IAClC,qEAAqE;IACrE,OAAO,IAAI,MAAM,IAAI,CAAC;IACtB,wEAAwE;IACxE,WAAW,IAAI,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,cAAc,CAAC;IACrB;;;OAGG;IACH,YAAY,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC1B,6EAA6E;IAC7E,eAAe,EAAE,eAAe,CAAC;IACjC;;;;;;;OAOG;IACH,eAAe,CAAC,EAAE,CAChB,MAAM,EAAE,oBAAoB,KACzB,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACpC;;;;;OAKG;IACH,KAAK,CAAC,EAAE,mBAAmB,CAAC;IAC5B;;;;;OAKG;IACH,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC;CACjC;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAK7D;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,qBAAqB,CAapE"}
|