@nodetool-ai/runtime 0.7.0-rc.23 → 0.8.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/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 +954 -127
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +2424 -513
- 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 +67 -0
- package/dist/generation-registry.d.ts.map +1 -0
- package/dist/generation-registry.js +126 -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 +344 -0
- package/dist/host-binaries.js.map +1 -0
- package/dist/image-codec.d.ts +74 -0
- package/dist/image-codec.d.ts.map +1 -0
- package/dist/image-codec.js +273 -0
- package/dist/image-codec.js.map +1 -0
- package/dist/index.d.ts +56 -6
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +43 -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 +19 -0
- package/dist/media-ref-bytes.d.ts.map +1 -0
- package/dist/media-ref-bytes.js +181 -0
- package/dist/media-ref-bytes.js.map +1 -0
- package/dist/node-executor.d.ts +113 -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 +33 -10
- package/dist/providers/aki-provider.d.ts.map +1 -1
- package/dist/providers/aki-provider.js +84 -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 +101 -0
- package/dist/providers/atlascloud-provider.d.ts.map +1 -0
- package/dist/providers/atlascloud-provider.js +1009 -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 +481 -24
- package/dist/providers/base-provider.d.ts.map +1 -1
- package/dist/providers/base-provider.js +1259 -42
- 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 +131 -68
- package/dist/providers/claude-agent-provider.d.ts.map +1 -1
- package/dist/providers/claude-agent-provider.js +1095 -515
- package/dist/providers/claude-agent-provider.js.map +1 -1
- package/dist/providers/codex-provider.d.ts +82 -0
- package/dist/providers/codex-provider.d.ts.map +1 -0
- package/dist/providers/codex-provider.js +492 -0
- package/dist/providers/codex-provider.js.map +1 -0
- package/dist/providers/cohere-provider.d.ts +5 -2
- package/dist/providers/cohere-provider.d.ts.map +1 -1
- package/dist/providers/cohere-provider.js +9 -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 +74 -0
- package/dist/providers/core-tools.d.ts.map +1 -0
- package/dist/providers/core-tools.js +127 -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 +159 -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 +81 -0
- package/dist/providers/custom-openai-provider.d.ts.map +1 -0
- package/dist/providers/custom-openai-provider.js +182 -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/elevenlabs-provider.d.ts +49 -0
- package/dist/providers/elevenlabs-provider.d.ts.map +1 -0
- package/dist/providers/elevenlabs-provider.js +142 -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 +38 -0
- package/dist/providers/evolink-provider.d.ts.map +1 -0
- package/dist/providers/evolink-provider.js +304 -0
- package/dist/providers/evolink-provider.js.map +1 -0
- package/dist/providers/fake-provider.d.ts +72 -1
- package/dist/providers/fake-provider.d.ts.map +1 -1
- package/dist/providers/fake-provider.js +203 -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 +171 -7
- package/dist/providers/fal-provider.d.ts.map +1 -1
- package/dist/providers/fal-provider.js +1369 -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 +148 -8
- package/dist/providers/gemini-provider.d.ts.map +1 -1
- package/dist/providers/gemini-provider.js +1500 -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 +30 -0
- package/dist/providers/higgsfield-provider.d.ts.map +1 -0
- package/dist/providers/higgsfield-provider.js +131 -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 +71 -3
- package/dist/providers/huggingface-provider.d.ts.map +1 -1
- package/dist/providers/huggingface-provider.js +230 -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 +84 -8
- package/dist/providers/index.d.ts.map +1 -1
- package/dist/providers/index.js +239 -56
- package/dist/providers/index.js.map +1 -1
- package/dist/providers/jina-provider.d.ts +10 -2
- package/dist/providers/jina-provider.d.ts.map +1 -1
- package/dist/providers/jina-provider.js +16 -7
- package/dist/providers/jina-provider.js.map +1 -1
- package/dist/providers/kie-provider.d.ts +170 -9
- package/dist/providers/kie-provider.d.ts.map +1 -1
- package/dist/providers/kie-provider.js +1176 -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 +21 -37
- package/dist/providers/llama-provider.d.ts.map +1 -1
- package/dist/providers/llama-provider.js +43 -354
- 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/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 +14 -1
- package/dist/providers/meshy-provider.d.ts.map +1 -1
- package/dist/providers/meshy-provider.js +76 -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 +25 -18
- package/dist/providers/minimax-provider.d.ts.map +1 -1
- package/dist/providers/minimax-provider.js +211 -72
- package/dist/providers/minimax-provider.js.map +1 -1
- package/dist/providers/mistral-provider.d.ts +6 -12
- package/dist/providers/mistral-provider.d.ts.map +1 -1
- package/dist/providers/mistral-provider.js +10 -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 +98 -0
- package/dist/providers/node-llama-cpp-provider.d.ts.map +1 -0
- package/dist/providers/node-llama-cpp-provider.js +479 -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 +224 -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 +28 -1
- package/dist/providers/ollama-provider.d.ts.map +1 -1
- package/dist/providers/ollama-provider.js +193 -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 +89 -26
- package/dist/providers/openai-provider.d.ts.map +1 -1
- package/dist/providers/openai-provider.js +990 -105
- package/dist/providers/openai-provider.js.map +1 -1
- package/dist/providers/openrouter-provider.d.ts +6 -12
- package/dist/providers/openrouter-provider.d.ts.map +1 -1
- package/dist/providers/openrouter-provider.js +24 -53
- 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 +165 -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 +157 -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 +20 -12
- package/dist/providers/python-provider.d.ts.map +1 -1
- package/dist/providers/python-provider.js +185 -25
- package/dist/providers/python-provider.js.map +1 -1
- package/dist/providers/replicate-provider.d.ts +89 -7
- package/dist/providers/replicate-provider.d.ts.map +1 -1
- package/dist/providers/replicate-provider.js +801 -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/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 +45 -0
- package/dist/providers/reve-provider.d.ts.map +1 -0
- package/dist/providers/reve-provider.js +159 -0
- package/dist/providers/reve-provider.js.map +1 -0
- package/dist/providers/rodin-provider.d.ts +23 -1
- package/dist/providers/rodin-provider.d.ts.map +1 -1
- package/dist/providers/rodin-provider.js +89 -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-provider.d.ts +19 -16
- package/dist/providers/together-provider.d.ts.map +1 -1
- package/dist/providers/together-provider.js +103 -225
- package/dist/providers/together-provider.js.map +1 -1
- package/dist/providers/topaz-provider.d.ts +44 -0
- package/dist/providers/topaz-provider.d.ts.map +1 -0
- package/dist/providers/topaz-provider.js +239 -0
- package/dist/providers/topaz-provider.js.map +1 -0
- package/dist/providers/types.d.ts +603 -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 +27 -0
- package/dist/providers/useapi-provider.d.ts.map +1 -0
- package/dist/providers/useapi-provider.js +266 -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 +22 -8
- package/dist/providers/vllm-provider.d.ts.map +1 -1
- package/dist/providers/vllm-provider.js +48 -23
- package/dist/providers/vllm-provider.js.map +1 -1
- package/dist/providers/voyage-provider.d.ts +10 -2
- package/dist/providers/voyage-provider.d.ts.map +1 -1
- package/dist/providers/voyage-provider.js +16 -7
- package/dist/providers/voyage-provider.js.map +1 -1
- package/dist/providers/xai-provider.d.ts +54 -13
- package/dist/providers/xai-provider.d.ts.map +1 -1
- package/dist/providers/xai-provider.js +299 -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 +24 -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/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 +59 -0
- package/dist/storage-workspace.d.ts.map +1 -0
- package/dist/storage-workspace.js +426 -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 +7 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/telemetry.js +23 -0
- 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 +10 -0
- package/dist/trace-exporters.d.ts.map +1 -1
- package/dist/trace-exporters.js +59 -20
- package/dist/trace-exporters.js.map +1 -1
- package/dist/tracing-helpers.d.ts +45 -4
- package/dist/tracing-helpers.d.ts.map +1 -1
- package/dist/tracing-helpers.js +62 -19
- package/dist/tracing-helpers.js.map +1 -1
- 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 +107 -19
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NodeTool's own managed models — the provider behind the credits product.
|
|
3
|
+
*
|
|
4
|
+
* Every model in the curated catalog (`NODETOOL_MODELS` in
|
|
5
|
+
* `@nodetool-ai/protocol`) names a delegate provider + model; this provider
|
|
6
|
+
* runs the delegate on *platform-owned* keys (`NODETOOL_PLATFORM_FAL_KEY`,
|
|
7
|
+
* `NODETOOL_PLATFORM_ANTHROPIC_KEY`) rather than the user's. That split is
|
|
8
|
+
* the whole billing model: calls through `nodetool` are metered against the
|
|
9
|
+
* user's credit balance server-side, while BYOK providers keep running on the
|
|
10
|
+
* user's own keys, unmetered.
|
|
11
|
+
*
|
|
12
|
+
* Cost is accounted at the delegate's price: each call absorbs the inner
|
|
13
|
+
* provider's cost delta into this instance, so the host's prediction logging
|
|
14
|
+
* records real USD under provider "nodetool".
|
|
15
|
+
*
|
|
16
|
+
* The provider itself is cloud-only (`CLOUD_ONLY_PROVIDER_IDS`): off the cloud
|
|
17
|
+
* profile it is never registered, because a desktop or self-hosted server has
|
|
18
|
+
* no platform keys and no account to bill. Where it does run, a model is
|
|
19
|
+
* served only when it is both **funded** (the delegate's platform key is set)
|
|
20
|
+
* and **allowed** (`NODETOOL_CREDIT_MODELS` names it, or names nothing at
|
|
21
|
+
* all). The listers hide what fails either test and `delegateFor` refuses it,
|
|
22
|
+
* so a whitelist an operator narrows can never be spent past by a client
|
|
23
|
+
* holding a stale menu.
|
|
24
|
+
*/
|
|
25
|
+
import { NODETOOL_MODELS, isNonEmptyString, nodetoolModelById } from "@nodetool-ai/protocol";
|
|
26
|
+
import { isCreditModelAllowed } from "@nodetool-ai/config";
|
|
27
|
+
import { BaseProvider } from "./base-provider.js";
|
|
28
|
+
import { FalProvider } from "./fal-provider.js";
|
|
29
|
+
import { AnthropicProvider } from "./anthropic-provider.js";
|
|
30
|
+
const PLATFORM_KEYS = {
|
|
31
|
+
fal_ai: "NODETOOL_PLATFORM_FAL_KEY",
|
|
32
|
+
anthropic: "NODETOOL_PLATFORM_ANTHROPIC_KEY"
|
|
33
|
+
};
|
|
34
|
+
export class NodetoolProvider extends BaseProvider {
|
|
35
|
+
secrets;
|
|
36
|
+
_absorbedCost = 0;
|
|
37
|
+
static requiredSecrets() {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
constructor(secrets = {}) {
|
|
41
|
+
super("nodetool");
|
|
42
|
+
this.secrets = secrets;
|
|
43
|
+
}
|
|
44
|
+
platformKey(delegateProvider) {
|
|
45
|
+
const keyName = PLATFORM_KEYS[delegateProvider];
|
|
46
|
+
const value = keyName ? this.secrets[keyName] : null;
|
|
47
|
+
return isNonEmptyString(value) ? value : null;
|
|
48
|
+
}
|
|
49
|
+
isFunded(delegateProvider) {
|
|
50
|
+
return this.platformKey(delegateProvider) != null;
|
|
51
|
+
}
|
|
52
|
+
/** Funded by a platform key and whitelisted for spend on this server. */
|
|
53
|
+
isServable(def) {
|
|
54
|
+
return this.isFunded(def.delegate.provider) && isCreditModelAllowed(def.id);
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The delegate serving a nodetool model id, constructed on platform keys.
|
|
58
|
+
* A fresh instance per call on purpose: cost is read off the delegate's
|
|
59
|
+
* cumulative counter after the call, and a shared delegate serving
|
|
60
|
+
* overlapping calls would double-count one call's cost into another's
|
|
61
|
+
* absorption window. Construction is cheap — both delegates build their
|
|
62
|
+
* network clients lazily.
|
|
63
|
+
*/
|
|
64
|
+
delegateFor(modelId, task) {
|
|
65
|
+
const def = nodetoolModelById(modelId);
|
|
66
|
+
if (!def) {
|
|
67
|
+
throw new Error(`Unknown NodeTool model "${modelId}".`);
|
|
68
|
+
}
|
|
69
|
+
if (!isCreditModelAllowed(def.id)) {
|
|
70
|
+
throw new Error(`NodeTool model "${modelId}" is not available on this server.`);
|
|
71
|
+
}
|
|
72
|
+
if (task && Array.isArray(def.tasks) && !def.tasks.includes(task)) {
|
|
73
|
+
throw new Error(`NodeTool model "${modelId}" does not support ${task}.`);
|
|
74
|
+
}
|
|
75
|
+
const delegate = (task === "image_to_image" ? def.editDelegate : undefined) ??
|
|
76
|
+
(task === "text_to_video" ? def.textDelegate : undefined) ??
|
|
77
|
+
def.delegate;
|
|
78
|
+
const key = this.platformKey(delegate.provider);
|
|
79
|
+
if (!key) {
|
|
80
|
+
throw new Error(`NodeTool model "${modelId}" is not available on this server ` +
|
|
81
|
+
`(missing ${PLATFORM_KEYS[delegate.provider]}).`);
|
|
82
|
+
}
|
|
83
|
+
const provider = delegate.provider === "fal_ai"
|
|
84
|
+
? new FalProvider({ FAL_API_KEY: key })
|
|
85
|
+
: new AnthropicProvider({ ANTHROPIC_API_KEY: key });
|
|
86
|
+
return { provider, model: delegate.model };
|
|
87
|
+
}
|
|
88
|
+
/** Run a delegated call and absorb the delegate's cost delta as our own. */
|
|
89
|
+
async absorbing(inner, call) {
|
|
90
|
+
const before = inner.getTotalCost();
|
|
91
|
+
try {
|
|
92
|
+
return await call();
|
|
93
|
+
}
|
|
94
|
+
finally {
|
|
95
|
+
this._absorbedCost += inner.getTotalCost() - before;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
get cost() {
|
|
99
|
+
return this._absorbedCost;
|
|
100
|
+
}
|
|
101
|
+
getTotalCost() {
|
|
102
|
+
return this._absorbedCost;
|
|
103
|
+
}
|
|
104
|
+
resetCost() {
|
|
105
|
+
this._absorbedCost = 0;
|
|
106
|
+
}
|
|
107
|
+
declaredCapabilities() {
|
|
108
|
+
const capabilities = [];
|
|
109
|
+
for (const def of NODETOOL_MODELS) {
|
|
110
|
+
if (!this.isServable(def))
|
|
111
|
+
continue;
|
|
112
|
+
if (def.kind === "language")
|
|
113
|
+
capabilities.push("generate_message");
|
|
114
|
+
if (def.kind === "image") {
|
|
115
|
+
capabilities.push("text_to_image");
|
|
116
|
+
if (def.editDelegate)
|
|
117
|
+
capabilities.push("image_to_image");
|
|
118
|
+
}
|
|
119
|
+
if (def.kind === "video") {
|
|
120
|
+
if (def.tasks?.includes("image_to_video"))
|
|
121
|
+
capabilities.push("image_to_video");
|
|
122
|
+
if (def.tasks?.includes("reference_to_video"))
|
|
123
|
+
capabilities.push("reference_to_video");
|
|
124
|
+
if (def.textDelegate)
|
|
125
|
+
capabilities.push("text_to_video");
|
|
126
|
+
}
|
|
127
|
+
if (def.kind === "tts")
|
|
128
|
+
capabilities.push("text_to_speech");
|
|
129
|
+
}
|
|
130
|
+
return [...new Set(capabilities)];
|
|
131
|
+
}
|
|
132
|
+
servableModels(kind) {
|
|
133
|
+
return NODETOOL_MODELS.filter((def) => def.kind === kind && this.isServable(def));
|
|
134
|
+
}
|
|
135
|
+
async getAvailableLanguageModels() {
|
|
136
|
+
return this.servableModels("language").map((def) => ({
|
|
137
|
+
type: "language_model",
|
|
138
|
+
id: def.id,
|
|
139
|
+
name: def.name,
|
|
140
|
+
provider: "nodetool"
|
|
141
|
+
}));
|
|
142
|
+
}
|
|
143
|
+
async getAvailableImageModels() {
|
|
144
|
+
return this.servableModels("image").map((def) => ({
|
|
145
|
+
type: "image_model",
|
|
146
|
+
id: def.id,
|
|
147
|
+
name: def.name,
|
|
148
|
+
provider: "nodetool",
|
|
149
|
+
supported_tasks: def.tasks ?? []
|
|
150
|
+
}));
|
|
151
|
+
}
|
|
152
|
+
async getAvailableVideoModels() {
|
|
153
|
+
return this.servableModels("video").map((def) => ({
|
|
154
|
+
type: "video_model",
|
|
155
|
+
id: def.id,
|
|
156
|
+
name: def.name,
|
|
157
|
+
provider: "nodetool",
|
|
158
|
+
supportedTasks: def.tasks ?? []
|
|
159
|
+
}));
|
|
160
|
+
}
|
|
161
|
+
async getAvailableTTSModels() {
|
|
162
|
+
return this.servableModels("tts").map((def) => ({
|
|
163
|
+
id: def.id,
|
|
164
|
+
name: def.name,
|
|
165
|
+
provider: "nodetool",
|
|
166
|
+
voices: (def.voices ?? []).map((voice) => voice.id)
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
169
|
+
async textToImage(params) {
|
|
170
|
+
const { provider, model } = this.delegateFor(params.model.id);
|
|
171
|
+
return this.absorbing(provider, () => provider.textToImage({
|
|
172
|
+
...params,
|
|
173
|
+
model: { ...params.model, id: model, provider: provider.provider }
|
|
174
|
+
}));
|
|
175
|
+
}
|
|
176
|
+
async imageToImage(images, params) {
|
|
177
|
+
const { provider, model } = this.delegateFor(params.model.id, "image_to_image");
|
|
178
|
+
return this.absorbing(provider, () => provider.imageToImage(images, {
|
|
179
|
+
...params,
|
|
180
|
+
model: { ...params.model, id: model, provider: provider.provider }
|
|
181
|
+
}));
|
|
182
|
+
}
|
|
183
|
+
async textToVideo(params) {
|
|
184
|
+
const { provider, model } = this.delegateFor(params.model.id, "text_to_video");
|
|
185
|
+
return this.absorbing(provider, () => provider.textToVideo({
|
|
186
|
+
...params,
|
|
187
|
+
model: { ...params.model, id: model, provider: provider.provider }
|
|
188
|
+
}));
|
|
189
|
+
}
|
|
190
|
+
async imageToVideo(image, params) {
|
|
191
|
+
const { provider, model } = this.delegateFor(params.model.id, "image_to_video");
|
|
192
|
+
return this.absorbing(provider, () => provider.imageToVideo(image, {
|
|
193
|
+
...params,
|
|
194
|
+
model: { ...params.model, id: model, provider: provider.provider }
|
|
195
|
+
}));
|
|
196
|
+
}
|
|
197
|
+
async referenceToVideo(inputs, params) {
|
|
198
|
+
const { provider, model } = this.delegateFor(params.model.id, "reference_to_video");
|
|
199
|
+
return this.absorbing(provider, () => provider.referenceToVideo(inputs, {
|
|
200
|
+
...params,
|
|
201
|
+
model: { ...params.model, id: model, provider: provider.provider }
|
|
202
|
+
}));
|
|
203
|
+
}
|
|
204
|
+
async textToSpeechEncoded(args) {
|
|
205
|
+
const { provider, model } = this.delegateFor(args.model);
|
|
206
|
+
return this.absorbing(provider, () => provider.textToSpeechEncoded({ ...args, model }));
|
|
207
|
+
}
|
|
208
|
+
async generateMessage(args) {
|
|
209
|
+
const { provider, model } = this.delegateFor(args.model);
|
|
210
|
+
return this.absorbing(provider, () => provider.generateMessage({ ...args, model }));
|
|
211
|
+
}
|
|
212
|
+
async *generateMessages(args) {
|
|
213
|
+
const { provider, model } = this.delegateFor(args.model);
|
|
214
|
+
const before = provider.getTotalCost();
|
|
215
|
+
try {
|
|
216
|
+
yield* provider.generateMessages({ ...args, model });
|
|
217
|
+
}
|
|
218
|
+
finally {
|
|
219
|
+
this._absorbedCost += provider.getTotalCost() - before;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
}
|
|
223
|
+
export default NodetoolProvider;
|
|
224
|
+
//# sourceMappingURL=nodetool-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nodetool-provider.js","sourceRoot":"","sources":["../../src/providers/nodetool-provider.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BrowserLauncher — opens a URL in the user's default browser.
|
|
3
|
+
*
|
|
4
|
+
* Abstracted behind an interface so the provider can be tested without
|
|
5
|
+
* spawning a real browser, and so non-desktop hosts can supply their own
|
|
6
|
+
* strategy (e.g. printing the URL for the user to paste).
|
|
7
|
+
*/
|
|
8
|
+
import type { Logger } from "@nodetool-ai/config";
|
|
9
|
+
export interface BrowserLauncher {
|
|
10
|
+
/** Open `url`. Reject with `BrowserLaunchError` if the browser won't start. */
|
|
11
|
+
open(url: string): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
/** Opens URLs via the platform's native "open" command. */
|
|
14
|
+
export declare class DefaultBrowserLauncher implements BrowserLauncher {
|
|
15
|
+
private readonly platform;
|
|
16
|
+
private readonly logger?;
|
|
17
|
+
constructor(options?: {
|
|
18
|
+
platform?: NodeJS.Platform;
|
|
19
|
+
logger?: Logger;
|
|
20
|
+
});
|
|
21
|
+
open(url: string): Promise<void>;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=browser-launcher.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-launcher.d.ts","sourceRoot":"","sources":["../../../src/providers/oauth/browser-launcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAGlD,MAAM,WAAW,eAAe;IAC9B,+EAA+E;IAC/E,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAClC;AAeD,2DAA2D;AAC3D,qBAAa,sBAAuB,YAAW,eAAe;IAC5D,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAkB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IAEjC,YAAY,OAAO,GAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAO,EAGxE;IAEK,IAAI,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAerC;CACF"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* BrowserLauncher — opens a URL in the user's default browser.
|
|
3
|
+
*
|
|
4
|
+
* Abstracted behind an interface so the provider can be tested without
|
|
5
|
+
* spawning a real browser, and so non-desktop hosts can supply their own
|
|
6
|
+
* strategy (e.g. printing the URL for the user to paste).
|
|
7
|
+
*/
|
|
8
|
+
import { spawn } from "node:child_process";
|
|
9
|
+
import { BrowserLaunchError } from "./errors.js";
|
|
10
|
+
/** Per-platform command that opens a URL in the default browser. */
|
|
11
|
+
function openCommand(platform) {
|
|
12
|
+
switch (platform) {
|
|
13
|
+
case "darwin":
|
|
14
|
+
return { cmd: "open", args: [] };
|
|
15
|
+
case "win32":
|
|
16
|
+
// `start` is a cmd builtin; the empty "" is the (ignored) window title.
|
|
17
|
+
return { cmd: "cmd", args: ["/c", "start", ""] };
|
|
18
|
+
default:
|
|
19
|
+
return { cmd: "xdg-open", args: [] };
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
/** Opens URLs via the platform's native "open" command. */
|
|
23
|
+
export class DefaultBrowserLauncher {
|
|
24
|
+
platform;
|
|
25
|
+
logger;
|
|
26
|
+
constructor(options = {}) {
|
|
27
|
+
this.platform = options.platform ?? process.platform;
|
|
28
|
+
this.logger = options.logger;
|
|
29
|
+
}
|
|
30
|
+
async open(url) {
|
|
31
|
+
const { cmd, args } = openCommand(this.platform);
|
|
32
|
+
await new Promise((resolve, reject) => {
|
|
33
|
+
const child = spawn(cmd, [...args, url], { stdio: "ignore", detached: true });
|
|
34
|
+
child.once("error", (err) => reject(new BrowserLaunchError("Could not launch the default browser", { cause: err })));
|
|
35
|
+
// The launcher process exits quickly; the browser keeps running. Treat a
|
|
36
|
+
// clean spawn as success and unref so it never blocks process exit.
|
|
37
|
+
child.once("spawn", () => {
|
|
38
|
+
child.unref();
|
|
39
|
+
this.logger?.debug("Opened authorization URL in default browser");
|
|
40
|
+
resolve();
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=browser-launcher.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"browser-launcher.js","sourceRoot":"","sources":["../../../src/providers/oauth/browser-launcher.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,KAAK,EAAE,MAAM,oBAAoB,CAAC;AAE3C,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAOjD,oEAAoE;AACpE,SAAS,WAAW,CAAC,QAAyB;IAC5C,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,QAAQ;YACX,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;QACnC,KAAK,OAAO;YACV,wEAAwE;YACxE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC;QACnD;YACE,OAAO,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC;IACzC,CAAC;AACH,CAAC;AAED,2DAA2D;AAC3D,MAAM,OAAO,sBAAsB;IAChB,QAAQ,CAAkB;IAC1B,MAAM,CAAU;IAEjC,YAAY,OAAO,GAAoD,EAAE;QACvE,IAAI,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;QACrD,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAW;QACpB,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACjD,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,EAAE,CAAC,GAAG,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAC9E,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE,CAC1B,MAAM,CAAC,IAAI,kBAAkB,CAAC,sCAAsC,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC,CACvF,CAAC;YACF,yEAAyE;YACzE,oEAAoE;YACpE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE;gBACvB,KAAK,CAAC,KAAK,EAAE,CAAC;gBACd,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,6CAA6C,CAAC,CAAC;gBAClE,OAAO,EAAE,CAAC;YACZ,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClaudeCodeCredentialsStore — reads and writes the credential file the Claude
|
|
3
|
+
* Agent SDK authenticates from.
|
|
4
|
+
*
|
|
5
|
+
* The SDK spawns the bundled `claude` binary, which loads its subscription
|
|
6
|
+
* credentials from `$CLAUDE_CONFIG_DIR/.credentials.json` (defaulting to
|
|
7
|
+
* `~/.claude/.credentials.json`) under a `claudeAiOauth` key. Writing that exact
|
|
8
|
+
* shape is the whole point of this module: a NodeTool login and a `claude login`
|
|
9
|
+
* produce interchangeable credentials, and {@link ClaudeAgentProvider} needs no
|
|
10
|
+
* token plumbing of its own.
|
|
11
|
+
*
|
|
12
|
+
* The file is not NodeTool's — other keys are preserved on write, and the mode
|
|
13
|
+
* is forced to 0600 to match what the CLI does.
|
|
14
|
+
*/
|
|
15
|
+
import { type Logger } from "@nodetool-ai/config";
|
|
16
|
+
import type { ClaudeCodeTokens } from "./claude-code-oauth-client.js";
|
|
17
|
+
/** The `claudeAiOauth` entry, field-for-field as the CLI writes it. */
|
|
18
|
+
export interface ClaudeAiOAuthCredentials {
|
|
19
|
+
accessToken: string;
|
|
20
|
+
refreshToken: string | null;
|
|
21
|
+
/** Absolute expiry, epoch ms. */
|
|
22
|
+
expiresAt: number | null;
|
|
23
|
+
scopes: string[];
|
|
24
|
+
subscriptionType: string | null;
|
|
25
|
+
rateLimitTier: string | null;
|
|
26
|
+
/** Only set when a non-default OAuth client minted the token. */
|
|
27
|
+
clientId?: string;
|
|
28
|
+
}
|
|
29
|
+
interface ClaudeCodeCredentialsStoreOptions {
|
|
30
|
+
/** Override the config directory. Defaults to `$CLAUDE_CONFIG_DIR` or `~/.claude`. */
|
|
31
|
+
readonly configDir?: string;
|
|
32
|
+
readonly logger?: Logger;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The directory the `claude` CLI keeps its state in. `CLAUDE_CONFIG_DIR` is the
|
|
36
|
+
* CLI's own override — honouring it keeps NodeTool pointed at the same profile
|
|
37
|
+
* the user's terminal sessions use.
|
|
38
|
+
*/
|
|
39
|
+
export declare function claudeConfigDir(): string;
|
|
40
|
+
export declare class ClaudeCodeCredentialsStore {
|
|
41
|
+
private readonly configDir;
|
|
42
|
+
private readonly logger;
|
|
43
|
+
constructor(options?: ClaudeCodeCredentialsStoreOptions);
|
|
44
|
+
/** Absolute path of the credential file. */
|
|
45
|
+
get path(): string;
|
|
46
|
+
/** The stored OAuth credentials, or null when there is no usable login. */
|
|
47
|
+
read(): Promise<ClaudeAiOAuthCredentials | null>;
|
|
48
|
+
/**
|
|
49
|
+
* Merge a fresh token set into the file, preserving any keys the CLI owns
|
|
50
|
+
* (and any profile metadata a previous login recorded).
|
|
51
|
+
*/
|
|
52
|
+
save(params: {
|
|
53
|
+
tokens: ClaudeCodeTokens;
|
|
54
|
+
subscriptionType?: string | null;
|
|
55
|
+
rateLimitTier?: string | null;
|
|
56
|
+
/** Set only for a non-default OAuth client. */
|
|
57
|
+
clientId?: string;
|
|
58
|
+
}): Promise<ClaudeAiOAuthCredentials>;
|
|
59
|
+
/**
|
|
60
|
+
* Drop the OAuth entry. Other keys survive; the file itself is removed once
|
|
61
|
+
* nothing is left in it.
|
|
62
|
+
*/
|
|
63
|
+
clear(): Promise<boolean>;
|
|
64
|
+
private readFile;
|
|
65
|
+
/**
|
|
66
|
+
* Write via a temp file in the same directory, so a concurrent `claude`
|
|
67
|
+
* process never observes a half-written credential file.
|
|
68
|
+
*/
|
|
69
|
+
private writeFile;
|
|
70
|
+
}
|
|
71
|
+
/** True when `expiresAt` has passed (or comes within `skewMs`). */
|
|
72
|
+
export declare function isExpired(credentials: Pick<ClaudeAiOAuthCredentials, "expiresAt">, now: number, skewMs?: number): boolean;
|
|
73
|
+
export {};
|
|
74
|
+
//# sourceMappingURL=claude-code-credentials.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-credentials.d.ts","sourceRoot":"","sources":["../../../src/providers/oauth/claude-code-credentials.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAYH,OAAO,EAAgB,KAAK,MAAM,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AAGtE,uEAAuE;AACvE,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,iCAAiC;IACjC,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,gBAAgB,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,iEAAiE;IACjE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAWD,UAAU,iCAAiC;IACzC,sFAAsF;IACtF,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED;;;;GAIG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAKxC;AAED,qBAAa,0BAA0B;IACrC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAS;IAEhC,YAAY,OAAO,GAAE,iCAAsC,EAK1D;IAED,4CAA4C;IAC5C,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED,2EAA2E;IACrE,IAAI,IAAI,OAAO,CAAC,wBAAwB,GAAG,IAAI,CAAC,CAIrD;IAED;;;OAGG;IACG,IAAI,CAAC,MAAM,EAAE;QACjB,MAAM,EAAE,gBAAgB,CAAC;QACzB,gBAAgB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACjC,aAAa,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC9B,+CAA+C;QAC/C,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,GAAG,OAAO,CAAC,wBAAwB,CAAC,CAiBpC;IAED;;;OAGG;IACG,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC,CAU9B;YAEa,QAAQ;IAkBtB;;;OAGG;YACW,SAAS;CAexB;AAED,mEAAmE;AACnE,wBAAgB,SAAS,CACvB,WAAW,EAAE,IAAI,CAAC,wBAAwB,EAAE,WAAW,CAAC,EACxD,GAAG,EAAE,MAAM,EACX,MAAM,SAAS,GACd,OAAO,CAET"}
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClaudeCodeCredentialsStore — reads and writes the credential file the Claude
|
|
3
|
+
* Agent SDK authenticates from.
|
|
4
|
+
*
|
|
5
|
+
* The SDK spawns the bundled `claude` binary, which loads its subscription
|
|
6
|
+
* credentials from `$CLAUDE_CONFIG_DIR/.credentials.json` (defaulting to
|
|
7
|
+
* `~/.claude/.credentials.json`) under a `claudeAiOauth` key. Writing that exact
|
|
8
|
+
* shape is the whole point of this module: a NodeTool login and a `claude login`
|
|
9
|
+
* produce interchangeable credentials, and {@link ClaudeAgentProvider} needs no
|
|
10
|
+
* token plumbing of its own.
|
|
11
|
+
*
|
|
12
|
+
* The file is not NodeTool's — other keys are preserved on write, and the mode
|
|
13
|
+
* is forced to 0600 to match what the CLI does.
|
|
14
|
+
*/
|
|
15
|
+
import { chmod, mkdir, readFile, rename, unlink, writeFile } from "node:fs/promises";
|
|
16
|
+
import { homedir } from "node:os";
|
|
17
|
+
import { join } from "node:path";
|
|
18
|
+
import { createLogger } from "@nodetool-ai/config";
|
|
19
|
+
import { isObjectLike, isString } from "@nodetool-ai/protocol";
|
|
20
|
+
/** Owner-only file mode, matching the CLI. */
|
|
21
|
+
const FILE_MODE = 0o600;
|
|
22
|
+
/**
|
|
23
|
+
* The directory the `claude` CLI keeps its state in. `CLAUDE_CONFIG_DIR` is the
|
|
24
|
+
* CLI's own override — honouring it keeps NodeTool pointed at the same profile
|
|
25
|
+
* the user's terminal sessions use.
|
|
26
|
+
*/
|
|
27
|
+
export function claudeConfigDir() {
|
|
28
|
+
const override = process.env.CLAUDE_CONFIG_DIR;
|
|
29
|
+
return override && override.length > 0
|
|
30
|
+
? override
|
|
31
|
+
: join(homedir(), ".claude");
|
|
32
|
+
}
|
|
33
|
+
export class ClaudeCodeCredentialsStore {
|
|
34
|
+
configDir;
|
|
35
|
+
logger;
|
|
36
|
+
constructor(options = {}) {
|
|
37
|
+
this.configDir = options.configDir ?? claudeConfigDir();
|
|
38
|
+
this.logger =
|
|
39
|
+
options.logger ??
|
|
40
|
+
createLogger("nodetool.runtime.oauth.claude-credentials");
|
|
41
|
+
}
|
|
42
|
+
/** Absolute path of the credential file. */
|
|
43
|
+
get path() {
|
|
44
|
+
return join(this.configDir, ".credentials.json");
|
|
45
|
+
}
|
|
46
|
+
/** The stored OAuth credentials, or null when there is no usable login. */
|
|
47
|
+
async read() {
|
|
48
|
+
const file = await this.readFile();
|
|
49
|
+
const oauth = file?.claudeAiOauth;
|
|
50
|
+
return oauth && isString(oauth.accessToken) ? oauth : null;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Merge a fresh token set into the file, preserving any keys the CLI owns
|
|
54
|
+
* (and any profile metadata a previous login recorded).
|
|
55
|
+
*/
|
|
56
|
+
async save(params) {
|
|
57
|
+
const file = (await this.readFile()) ?? {};
|
|
58
|
+
const previous = file.claudeAiOauth;
|
|
59
|
+
const credentials = {
|
|
60
|
+
accessToken: params.tokens.accessToken,
|
|
61
|
+
refreshToken: params.tokens.refreshToken ?? previous?.refreshToken ?? null,
|
|
62
|
+
expiresAt: params.tokens.expiresAt,
|
|
63
|
+
scopes: [...params.tokens.scopes],
|
|
64
|
+
subscriptionType: params.subscriptionType ?? previous?.subscriptionType ?? null,
|
|
65
|
+
rateLimitTier: params.rateLimitTier ?? previous?.rateLimitTier ?? null
|
|
66
|
+
};
|
|
67
|
+
if (params.clientId)
|
|
68
|
+
credentials.clientId = params.clientId;
|
|
69
|
+
await this.writeFile({ ...file, claudeAiOauth: credentials });
|
|
70
|
+
return credentials;
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* Drop the OAuth entry. Other keys survive; the file itself is removed once
|
|
74
|
+
* nothing is left in it.
|
|
75
|
+
*/
|
|
76
|
+
async clear() {
|
|
77
|
+
const file = await this.readFile();
|
|
78
|
+
if (!file?.claudeAiOauth)
|
|
79
|
+
return false;
|
|
80
|
+
const { claudeAiOauth: _removed, ...rest } = file;
|
|
81
|
+
if (Object.keys(rest).length === 0) {
|
|
82
|
+
await unlink(this.path).catch(() => { });
|
|
83
|
+
}
|
|
84
|
+
else {
|
|
85
|
+
await this.writeFile(rest);
|
|
86
|
+
}
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
async readFile() {
|
|
90
|
+
let raw;
|
|
91
|
+
try {
|
|
92
|
+
raw = await readFile(this.path, "utf8");
|
|
93
|
+
}
|
|
94
|
+
catch {
|
|
95
|
+
return null;
|
|
96
|
+
}
|
|
97
|
+
try {
|
|
98
|
+
const parsed = JSON.parse(raw);
|
|
99
|
+
return isObjectLike(parsed) ? parsed : null;
|
|
100
|
+
}
|
|
101
|
+
catch {
|
|
102
|
+
this.logger.warn("Claude credential file is not valid JSON", {
|
|
103
|
+
path: this.path
|
|
104
|
+
});
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Write via a temp file in the same directory, so a concurrent `claude`
|
|
110
|
+
* process never observes a half-written credential file.
|
|
111
|
+
*/
|
|
112
|
+
async writeFile(contents) {
|
|
113
|
+
await mkdir(this.configDir, { recursive: true });
|
|
114
|
+
const tmp = `${this.path}.${process.pid}.tmp`;
|
|
115
|
+
await writeFile(tmp, `${JSON.stringify(contents, null, 2)}\n`, {
|
|
116
|
+
encoding: "utf8",
|
|
117
|
+
mode: FILE_MODE
|
|
118
|
+
});
|
|
119
|
+
try {
|
|
120
|
+
await rename(tmp, this.path);
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
await unlink(tmp).catch(() => { });
|
|
124
|
+
throw err;
|
|
125
|
+
}
|
|
126
|
+
await chmod(this.path, FILE_MODE);
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
/** True when `expiresAt` has passed (or comes within `skewMs`). */
|
|
130
|
+
export function isExpired(credentials, now, skewMs = 60_000) {
|
|
131
|
+
return credentials.expiresAt != null && credentials.expiresAt - skewMs <= now;
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=claude-code-credentials.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-code-credentials.js","sourceRoot":"","sources":["../../../src/providers/oauth/claude-code-credentials.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ClaudeCodeLogin — orchestration for signing in with a Claude subscription,
|
|
3
|
+
* exactly as the `claude` CLI does it, and persisting the result where the
|
|
4
|
+
* Claude Agent SDK will find it.
|
|
5
|
+
*
|
|
6
|
+
* Two completion paths share one authorization request:
|
|
7
|
+
*
|
|
8
|
+
* - **Loopback** — the browser is redirected to an ephemeral `127.0.0.1`
|
|
9
|
+
* listener this process binds. Works when the browser runs on the same
|
|
10
|
+
* machine as the server (desktop, local dev).
|
|
11
|
+
* - **Manual** — the console shows a `<code>#<state>` string the user pastes
|
|
12
|
+
* back. The only option on a headless or remote host.
|
|
13
|
+
*
|
|
14
|
+
* The two differ only in `redirect_uri`, which must match between the
|
|
15
|
+
* authorization request and the token exchange — hence the two URLs handed back
|
|
16
|
+
* from {@link ClaudeCodeLogin.begin} and the `manual` flag carried through to
|
|
17
|
+
* completion.
|
|
18
|
+
*/
|
|
19
|
+
import { type Logger } from "@nodetool-ai/config";
|
|
20
|
+
import { ClaudeCodeCredentialsStore, type ClaudeAiOAuthCredentials } from "./claude-code-credentials.js";
|
|
21
|
+
import { ClaudeCodeOAuthClient, type ClaudeCodeLoginMethod } from "./claude-code-oauth-client.js";
|
|
22
|
+
import { LocalCallbackServer } from "./local-callback-server.js";
|
|
23
|
+
import { PKCEHelper } from "./pkce-helper.js";
|
|
24
|
+
import { type Clock } from "./types.js";
|
|
25
|
+
/** How long a started login stays completable before the listener is torn down. */
|
|
26
|
+
export declare const CLAUDE_LOGIN_TIMEOUT_MS: number;
|
|
27
|
+
export interface ClaudeCodeLoginOptions {
|
|
28
|
+
/** Sign in with a claude.ai subscription (default) or a console account. */
|
|
29
|
+
readonly loginMethod?: ClaudeCodeLoginMethod;
|
|
30
|
+
/**
|
|
31
|
+
* Skip the loopback listener entirely. Set on hosts where the browser can't
|
|
32
|
+
* reach this process — only the manual paste path will be offered.
|
|
33
|
+
*/
|
|
34
|
+
readonly manualOnly?: boolean;
|
|
35
|
+
/** Abort waiting for the redirect. */
|
|
36
|
+
readonly timeoutMs?: number;
|
|
37
|
+
}
|
|
38
|
+
/** Non-secret summary of a stored login. */
|
|
39
|
+
export interface ClaudeCodeAuthStatus {
|
|
40
|
+
readonly connected: boolean;
|
|
41
|
+
readonly expiresAt: number | null;
|
|
42
|
+
readonly expired: boolean;
|
|
43
|
+
readonly scopes: readonly string[];
|
|
44
|
+
readonly subscriptionType: string | null;
|
|
45
|
+
readonly rateLimitTier: string | null;
|
|
46
|
+
/** Where the credentials live, so the UI can point at the right file. */
|
|
47
|
+
readonly credentialsPath: string;
|
|
48
|
+
}
|
|
49
|
+
/** A login in progress: the URLs to open, and the two ways to finish it. */
|
|
50
|
+
export interface PendingClaudeCodeLogin {
|
|
51
|
+
/** Authorization URL for the loopback flow. Null when `manualOnly`. */
|
|
52
|
+
readonly authUrl: string | null;
|
|
53
|
+
/** Where the loopback flow sends the browser. Null when `manualOnly`. */
|
|
54
|
+
readonly redirectUri: string | null;
|
|
55
|
+
/** Authorization URL whose redirect shows a paste-able `code#state`. */
|
|
56
|
+
readonly manualAuthUrl: string;
|
|
57
|
+
/** CSRF state; the caller may key the pending login on it. */
|
|
58
|
+
readonly state: string;
|
|
59
|
+
/**
|
|
60
|
+
* Wait for the browser to hit the loopback listener, then exchange and
|
|
61
|
+
* persist. Rejects if the login was started with `manualOnly`.
|
|
62
|
+
*/
|
|
63
|
+
waitForRedirect(signal?: AbortSignal): Promise<ClaudeAiOAuthCredentials>;
|
|
64
|
+
/**
|
|
65
|
+
* Finish from a pasted `code#state` (or a bare code plus the state this
|
|
66
|
+
* object carries). Exchanges against the manual redirect URI and persists.
|
|
67
|
+
*/
|
|
68
|
+
completeWithPastedCode(input: string): Promise<ClaudeAiOAuthCredentials>;
|
|
69
|
+
/** Tear down the listener. Idempotent; safe to call after completion. */
|
|
70
|
+
cancel(): Promise<void>;
|
|
71
|
+
}
|
|
72
|
+
export interface ClaudeCodeLoginDeps {
|
|
73
|
+
readonly client?: ClaudeCodeOAuthClient;
|
|
74
|
+
readonly credentials?: ClaudeCodeCredentialsStore;
|
|
75
|
+
readonly pkce?: PKCEHelper;
|
|
76
|
+
/** Factory so tests can supply a fake listener. */
|
|
77
|
+
readonly callbackServerFactory?: () => LocalCallbackServer;
|
|
78
|
+
readonly clock?: Clock;
|
|
79
|
+
readonly logger?: Logger;
|
|
80
|
+
}
|
|
81
|
+
export declare class ClaudeCodeLogin {
|
|
82
|
+
private readonly client;
|
|
83
|
+
private readonly credentials;
|
|
84
|
+
private readonly pkce;
|
|
85
|
+
private readonly callbackServerFactory;
|
|
86
|
+
private readonly clock;
|
|
87
|
+
private readonly logger;
|
|
88
|
+
constructor(deps?: ClaudeCodeLoginDeps);
|
|
89
|
+
/** Where the credentials the SDK reads are stored. */
|
|
90
|
+
get credentialsPath(): string;
|
|
91
|
+
/**
|
|
92
|
+
* Start an authorization request. Binds the loopback listener (unless
|
|
93
|
+
* `manualOnly`) and returns both authorization URLs plus the handles to
|
|
94
|
+
* finish the flow. The caller owns teardown via `cancel()`.
|
|
95
|
+
*/
|
|
96
|
+
begin(options?: ClaudeCodeLoginOptions): Promise<PendingClaudeCodeLogin>;
|
|
97
|
+
/** Non-secret summary of the stored login. */
|
|
98
|
+
status(): Promise<ClaudeCodeAuthStatus>;
|
|
99
|
+
/**
|
|
100
|
+
* Refresh the stored access token. Returns the credentials unchanged when
|
|
101
|
+
* they are still valid, unless `force` is set.
|
|
102
|
+
*
|
|
103
|
+
* The `claude` CLI refreshes on its own, so this is for callers that need a
|
|
104
|
+
* usable token *outside* the SDK (status display, `CLAUDE_CODE_OAUTH_TOKEN`)
|
|
105
|
+
* rather than a prerequisite for running the provider.
|
|
106
|
+
*/
|
|
107
|
+
refresh(options?: {
|
|
108
|
+
force?: boolean;
|
|
109
|
+
signal?: AbortSignal;
|
|
110
|
+
}): Promise<ClaudeAiOAuthCredentials>;
|
|
111
|
+
/** Remove the stored login. Returns false when there was nothing to remove. */
|
|
112
|
+
logout(): Promise<boolean>;
|
|
113
|
+
private exchangeAndStore;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Parse what the console shows after a manual authorization: `<code>#<state>`.
|
|
117
|
+
* A bare code is accepted too, falling back to the state of the login it is
|
|
118
|
+
* completing — but a mismatched state is a CSRF signal and always rejected.
|
|
119
|
+
*/
|
|
120
|
+
export declare function parsePastedCode(input: string, expectedState: string): {
|
|
121
|
+
code: string;
|
|
122
|
+
state: string;
|
|
123
|
+
};
|
|
124
|
+
//# sourceMappingURL=claude-code-login.d.ts.map
|