@vib-rato/ai 0.16.0
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/CHANGELOG.md +3354 -0
- package/README.md +1194 -0
- package/dist/types/adapter-internals/provider-safety-stop.d.ts +45 -0
- package/dist/types/api-registry.d.ts +30 -0
- package/dist/types/auth-broker/client.d.ts +80 -0
- package/dist/types/auth-broker/index.d.ts +5 -0
- package/dist/types/auth-broker/redact.d.ts +7 -0
- package/dist/types/auth-broker/refresher.d.ts +25 -0
- package/dist/types/auth-broker/remote-store.d.ts +153 -0
- package/dist/types/auth-broker/server.d.ts +32 -0
- package/dist/types/auth-broker/types.d.ts +132 -0
- package/dist/types/auth-broker/wire-schemas.d.ts +555 -0
- package/dist/types/auth-gateway/http.d.ts +40 -0
- package/dist/types/auth-gateway/index.d.ts +3 -0
- package/dist/types/auth-gateway/server.d.ts +70 -0
- package/dist/types/auth-gateway/types.d.ts +129 -0
- package/dist/types/auth-storage.d.ts +1074 -0
- package/dist/types/cli.d.ts +2 -0
- package/dist/types/codex-tools.d.ts +4 -0
- package/dist/types/context-cap-policy.d.ts +68 -0
- package/dist/types/core.d.ts +35 -0
- package/dist/types/index.d.ts +55 -0
- package/dist/types/model-cache.d.ts +24 -0
- package/dist/types/model-manager.d.ts +77 -0
- package/dist/types/model-pricing.d.ts +3 -0
- package/dist/types/model-retirements.d.ts +6 -0
- package/dist/types/model-thinking.d.ts +100 -0
- package/dist/types/models.d.ts +21 -0
- package/dist/types/openai-completions-compat.d.ts +34 -0
- package/dist/types/provider-details.d.ts +24 -0
- package/dist/types/provider-models/bundled-references.d.ts +4 -0
- package/dist/types/provider-models/descriptors.d.ts +48 -0
- package/dist/types/provider-models/google.d.ts +20 -0
- package/dist/types/provider-models/index.d.ts +5 -0
- package/dist/types/provider-models/ollama.d.ts +7 -0
- package/dist/types/provider-models/openai-compat.d.ts +293 -0
- package/dist/types/provider-models/special.d.ts +29 -0
- package/dist/types/providers/amazon-bedrock.d.ts +60 -0
- package/dist/types/providers/anthropic-messages-server-schema.d.ts +450 -0
- package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
- package/dist/types/providers/anthropic.d.ts +280 -0
- package/dist/types/providers/aws-credential-config.d.ts +19 -0
- package/dist/types/providers/aws-credentials.d.ts +43 -0
- package/dist/types/providers/aws-eventstream.d.ts +38 -0
- package/dist/types/providers/aws-sigv4.d.ts +55 -0
- package/dist/types/providers/azure-openai-responses.d.ts +22 -0
- package/dist/types/providers/composer-discipline.d.ts +32 -0
- package/dist/types/providers/cursor/client-version.d.ts +10 -0
- package/dist/types/providers/cursor/exec-modern.d.ts +98 -0
- package/dist/types/providers/cursor/gen/agent_pb.d.ts +16769 -0
- package/dist/types/providers/cursor-pi-args.d.ts +119 -0
- package/dist/types/providers/cursor.d.ts +72 -0
- package/dist/types/providers/dashscope-token-plan-headers.d.ts +57 -0
- package/dist/types/providers/error-message.d.ts +27 -0
- package/dist/types/providers/github-copilot-headers.d.ts +40 -0
- package/dist/types/providers/gitlab-duo.d.ts +27 -0
- package/dist/types/providers/google-auth.d.ts +26 -0
- package/dist/types/providers/google-gemini-cli.d.ts +75 -0
- package/dist/types/providers/google-gemini-headers.d.ts +43 -0
- package/dist/types/providers/google-shared.d.ts +183 -0
- package/dist/types/providers/google-types.d.ts +138 -0
- package/dist/types/providers/google-vertex.d.ts +11 -0
- package/dist/types/providers/google.d.ts +4 -0
- package/dist/types/providers/grammar.d.ts +1 -0
- package/dist/types/providers/kimi.d.ts +27 -0
- package/dist/types/providers/kiro-api-key.d.ts +50 -0
- package/dist/types/providers/kiro-codewhisperer.d.ts +11 -0
- package/dist/types/providers/mock.d.ts +189 -0
- package/dist/types/providers/ollama.d.ts +41 -0
- package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
- package/dist/types/providers/openai-bounded-rate-limits.d.ts +3 -0
- package/dist/types/providers/openai-chat-server-schema.d.ts +1733 -0
- package/dist/types/providers/openai-chat-server.d.ts +16 -0
- package/dist/types/providers/openai-codex/constants.d.ts +26 -0
- package/dist/types/providers/openai-codex/request-transformer.d.ts +50 -0
- package/dist/types/providers/openai-codex/response-handler.d.ts +18 -0
- package/dist/types/providers/openai-codex-responses.d.ts +71 -0
- package/dist/types/providers/openai-completions-compat.d.ts +6 -0
- package/dist/types/providers/openai-completions.d.ts +35 -0
- package/dist/types/providers/openai-opencodex-responses.d.ts +10 -0
- package/dist/types/providers/openai-request-transform.d.ts +4 -0
- package/dist/types/providers/openai-responses-server-schema.d.ts +392 -0
- package/dist/types/providers/openai-responses-server.d.ts +17 -0
- package/dist/types/providers/openai-responses-shared.d.ts +106 -0
- package/dist/types/providers/openai-responses.d.ts +37 -0
- package/dist/types/providers/pi-native-client.d.ts +29 -0
- package/dist/types/providers/pi-native-server.d.ts +60 -0
- package/dist/types/providers/register-builtins.d.ts +59 -0
- package/dist/types/providers/synthetic.d.ts +26 -0
- package/dist/types/providers/transform-messages.d.ts +33 -0
- package/dist/types/providers/vision-guard.d.ts +8 -0
- package/dist/types/rate-limit-utils.d.ts +19 -0
- package/dist/types/stream.d.ts +45 -0
- package/dist/types/types.d.ts +1073 -0
- package/dist/types/usage/claude.d.ts +3 -0
- package/dist/types/usage/gemini.d.ts +2 -0
- package/dist/types/usage/github-copilot.d.ts +7 -0
- package/dist/types/usage/google-antigravity.d.ts +2 -0
- package/dist/types/usage/grok-cli.d.ts +17 -0
- package/dist/types/usage/kimi.d.ts +4 -0
- package/dist/types/usage/minimax-code.d.ts +2 -0
- package/dist/types/usage/openai-codex.d.ts +3 -0
- package/dist/types/usage/shared.d.ts +1 -0
- package/dist/types/usage/zai.d.ts +2 -0
- package/dist/types/usage.d.ts +264 -0
- package/dist/types/utils/abort.d.ts +19 -0
- package/dist/types/utils/anthropic-auth.d.ts +39 -0
- package/dist/types/utils/block-symbols.d.ts +6 -0
- package/dist/types/utils/discovery/antigravity.d.ts +67 -0
- package/dist/types/utils/discovery/codex.d.ts +38 -0
- package/dist/types/utils/discovery/cursor.d.ts +49 -0
- package/dist/types/utils/discovery/gemini.d.ts +25 -0
- package/dist/types/utils/discovery/index.d.ts +4 -0
- package/dist/types/utils/discovery/openai-compatible.d.ts +81 -0
- package/dist/types/utils/event-stream.d.ts +41 -0
- package/dist/types/utils/fallback-transport.d.ts +110 -0
- package/dist/types/utils/fireworks-model-id.d.ts +10 -0
- package/dist/types/utils/foundry.d.ts +11 -0
- package/dist/types/utils/h2-fetch.d.ts +22 -0
- package/dist/types/utils/http-inspector.d.ts +59 -0
- package/dist/types/utils/idle-iterator.d.ts +122 -0
- package/dist/types/utils/json-parse.d.ts +98 -0
- package/dist/types/utils/oauth/alibaba-token-plan.d.ts +19 -0
- package/dist/types/utils/oauth/anthropic.d.ts +41 -0
- package/dist/types/utils/oauth/api-key-login.d.ts +38 -0
- package/dist/types/utils/oauth/api-key-validation.d.ts +39 -0
- package/dist/types/utils/oauth/bizrouter.d.ts +1 -0
- package/dist/types/utils/oauth/callback-server.d.ts +80 -0
- package/dist/types/utils/oauth/cerebras.d.ts +1 -0
- package/dist/types/utils/oauth/cloudflare-ai-gateway.d.ts +18 -0
- package/dist/types/utils/oauth/commandcode.d.ts +1 -0
- package/dist/types/utils/oauth/cursor.d.ts +15 -0
- package/dist/types/utils/oauth/deepinfra.d.ts +1 -0
- package/dist/types/utils/oauth/deepseek.d.ts +10 -0
- package/dist/types/utils/oauth/firepass.d.ts +1 -0
- package/dist/types/utils/oauth/fireworks.d.ts +1 -0
- package/dist/types/utils/oauth/fugu.d.ts +1 -0
- package/dist/types/utils/oauth/github-copilot.d.ts +38 -0
- package/dist/types/utils/oauth/gitlab-duo.d.ts +3 -0
- package/dist/types/utils/oauth/glm-zcode.d.ts +71 -0
- package/dist/types/utils/oauth/google-antigravity.d.ts +11 -0
- package/dist/types/utils/oauth/google-gemini-cli.d.ts +10 -0
- package/dist/types/utils/oauth/google-oauth-shared.d.ts +28 -0
- package/dist/types/utils/oauth/huggingface.d.ts +19 -0
- package/dist/types/utils/oauth/index.d.ts +39 -0
- package/dist/types/utils/oauth/kagi.d.ts +17 -0
- package/dist/types/utils/oauth/kilo.d.ts +5 -0
- package/dist/types/utils/oauth/kimi.d.ts +17 -0
- package/dist/types/utils/oauth/kiro.d.ts +71 -0
- package/dist/types/utils/oauth/litellm.d.ts +18 -0
- package/dist/types/utils/oauth/lm-studio.d.ts +17 -0
- package/dist/types/utils/oauth/mara.d.ts +1 -0
- package/dist/types/utils/oauth/minimax-code.d.ts +28 -0
- package/dist/types/utils/oauth/moonshot.d.ts +1 -0
- package/dist/types/utils/oauth/nanogpt.d.ts +1 -0
- package/dist/types/utils/oauth/nvidia.d.ts +18 -0
- package/dist/types/utils/oauth/ollama-cloud.d.ts +2 -0
- package/dist/types/utils/oauth/ollama.d.ts +18 -0
- package/dist/types/utils/oauth/openai-codex.d.ts +21 -0
- package/dist/types/utils/oauth/opencode.d.ts +18 -0
- package/dist/types/utils/oauth/opengateway.d.ts +1 -0
- package/dist/types/utils/oauth/openrouter.d.ts +1 -0
- package/dist/types/utils/oauth/parallel.d.ts +17 -0
- package/dist/types/utils/oauth/perplexity.d.ts +4 -0
- package/dist/types/utils/oauth/pkce.d.ts +8 -0
- package/dist/types/utils/oauth/qianfan.d.ts +17 -0
- package/dist/types/utils/oauth/qwen-portal.d.ts +19 -0
- package/dist/types/utils/oauth/sglang.d.ts +16 -0
- package/dist/types/utils/oauth/synthetic.d.ts +1 -0
- package/dist/types/utils/oauth/tavily.d.ts +17 -0
- package/dist/types/utils/oauth/together.d.ts +1 -0
- package/dist/types/utils/oauth/types.d.ts +56 -0
- package/dist/types/utils/oauth/venice.d.ts +18 -0
- package/dist/types/utils/oauth/vercel-ai-gateway.d.ts +18 -0
- package/dist/types/utils/oauth/vllm.d.ts +16 -0
- package/dist/types/utils/oauth/xai.d.ts +30 -0
- package/dist/types/utils/oauth/xiaomi.d.ts +25 -0
- package/dist/types/utils/oauth/zai.d.ts +18 -0
- package/dist/types/utils/oauth/zenmux.d.ts +1 -0
- package/dist/types/utils/overflow.d.ts +14 -0
- package/dist/types/utils/parse-bind.d.ts +26 -0
- package/dist/types/utils/provider-response.d.ts +6 -0
- package/dist/types/utils/provider-safety-stop.d.ts +8 -0
- package/dist/types/utils/proxy.d.ts +7 -0
- package/dist/types/utils/retry-after.d.ts +3 -0
- package/dist/types/utils/retry-budget.d.ts +1 -0
- package/dist/types/utils/retry.d.ts +29 -0
- package/dist/types/utils/schema/adapt.d.ts +24 -0
- package/dist/types/utils/schema/compatibility.d.ts +30 -0
- package/dist/types/utils/schema/dereference.d.ts +11 -0
- package/dist/types/utils/schema/draft.d.ts +10 -0
- package/dist/types/utils/schema/equality.d.ts +4 -0
- package/dist/types/utils/schema/fields.d.ts +49 -0
- package/dist/types/utils/schema/index.d.ts +14 -0
- package/dist/types/utils/schema/json-schema-validator.d.ts +12 -0
- package/dist/types/utils/schema/meta-validator.d.ts +2 -0
- package/dist/types/utils/schema/normalize.d.ts +93 -0
- package/dist/types/utils/schema/root-combinator.d.ts +12 -0
- package/dist/types/utils/schema/spill.d.ts +8 -0
- package/dist/types/utils/schema/stamps.d.ts +25 -0
- package/dist/types/utils/schema/types.d.ts +4 -0
- package/dist/types/utils/schema/wire.d.ts +54 -0
- package/dist/types/utils/schema/zod-decontaminate.d.ts +31 -0
- package/dist/types/utils/sse-debug.d.ts +10 -0
- package/dist/types/utils/tool-call-healing.d.ts +80 -0
- package/dist/types/utils/tool-choice-capability.d.ts +57 -0
- package/dist/types/utils/tool-choice.d.ts +50 -0
- package/dist/types/utils/validation.d.ts +17 -0
- package/dist/types/utils.d.ts +117 -0
- package/package.json +152 -0
- package/src/adapter-internals/provider-safety-stop.d.ts +45 -0
- package/src/adapter-internals/provider-safety-stop.ts +156 -0
- package/src/api-registry.d.ts +30 -0
- package/src/api-registry.ts +96 -0
- package/src/auth-broker/client.ts +444 -0
- package/src/auth-broker/index.ts +5 -0
- package/src/auth-broker/redact.ts +39 -0
- package/src/auth-broker/refresher.ts +130 -0
- package/src/auth-broker/remote-store.ts +1576 -0
- package/src/auth-broker/server.ts +764 -0
- package/src/auth-broker/types.ts +164 -0
- package/src/auth-broker/wire-schemas.ts +261 -0
- package/src/auth-gateway/http.ts +198 -0
- package/src/auth-gateway/index.ts +3 -0
- package/src/auth-gateway/server.ts +1315 -0
- package/src/auth-gateway/types.ts +160 -0
- package/src/auth-storage.ts +7312 -0
- package/src/cli.ts +269 -0
- package/src/codex-tools.d.ts +4 -0
- package/src/codex-tools.ts +24 -0
- package/src/context-cap-policy.d.ts +68 -0
- package/src/context-cap-policy.ts +123 -0
- package/src/core.ts +44 -0
- package/src/index.ts +61 -0
- package/src/model-cache.ts +236 -0
- package/src/model-manager.ts +744 -0
- package/src/model-pricing.d.ts +3 -0
- package/src/model-pricing.ts +68 -0
- package/src/model-retirements.d.ts +6 -0
- package/src/model-retirements.ts +19 -0
- package/src/model-thinking.d.ts +100 -0
- package/src/model-thinking.ts +1054 -0
- package/src/models.d.ts +21 -0
- package/src/models.json +94672 -0
- package/src/models.json.d.ts +9 -0
- package/src/models.ts +126 -0
- package/src/openai-completions-compat.d.ts +34 -0
- package/src/openai-completions-compat.ts +383 -0
- package/src/prompts/composer-bash-policy-recovery.md +1 -0
- package/src/prompts/cursor-composer-bash-policy-recovery.md +1 -0
- package/src/prompts/cursor-composer-edit-discipline.md +7 -0
- package/src/prompts/turn-aborted-guidance.md +4 -0
- package/src/provider-details.ts +90 -0
- package/src/provider-models/bundled-references.ts +38 -0
- package/src/provider-models/descriptors.ts +392 -0
- package/src/provider-models/google.ts +92 -0
- package/src/provider-models/index.ts +5 -0
- package/src/provider-models/ollama.ts +159 -0
- package/src/provider-models/openai-compat.ts +2920 -0
- package/src/provider-models/special.ts +185 -0
- package/src/providers/amazon-bedrock.d.ts +60 -0
- package/src/providers/amazon-bedrock.ts +939 -0
- package/src/providers/anthropic-messages-server-schema.ts +229 -0
- package/src/providers/anthropic-messages-server.ts +839 -0
- package/src/providers/anthropic.d.ts +280 -0
- package/src/providers/anthropic.ts +4421 -0
- package/src/providers/aws-credential-config.d.ts +19 -0
- package/src/providers/aws-credential-config.ts +179 -0
- package/src/providers/aws-credentials.d.ts +43 -0
- package/src/providers/aws-credentials.ts +457 -0
- package/src/providers/aws-eventstream.d.ts +38 -0
- package/src/providers/aws-eventstream.ts +185 -0
- package/src/providers/aws-sigv4.d.ts +55 -0
- package/src/providers/aws-sigv4.ts +218 -0
- package/src/providers/azure-openai-responses.d.ts +22 -0
- package/src/providers/azure-openai-responses.ts +447 -0
- package/src/providers/composer-discipline.d.ts +32 -0
- package/src/providers/composer-discipline.ts +95 -0
- package/src/providers/cursor/client-version.d.ts +10 -0
- package/src/providers/cursor/client-version.ts +10 -0
- package/src/providers/cursor/exec-modern.d.ts +98 -0
- package/src/providers/cursor/exec-modern.ts +497 -0
- package/src/providers/cursor/gen/agent_pb.d.ts +16769 -0
- package/src/providers/cursor/gen/agent_pb.ts +19780 -0
- package/src/providers/cursor/proto/agent.proto +4533 -0
- package/src/providers/cursor/proto/buf.gen.yaml +6 -0
- package/src/providers/cursor/proto/buf.yaml +17 -0
- package/src/providers/cursor-pi-args.d.ts +119 -0
- package/src/providers/cursor-pi-args.ts +187 -0
- package/src/providers/cursor.d.ts +72 -0
- package/src/providers/cursor.ts +3396 -0
- package/src/providers/dashscope-token-plan-headers.d.ts +57 -0
- package/src/providers/dashscope-token-plan-headers.ts +84 -0
- package/src/providers/error-message.d.ts +27 -0
- package/src/providers/error-message.ts +21 -0
- package/src/providers/github-copilot-headers.d.ts +40 -0
- package/src/providers/github-copilot-headers.ts +140 -0
- package/src/providers/gitlab-duo.d.ts +27 -0
- package/src/providers/gitlab-duo.ts +393 -0
- package/src/providers/google-auth.d.ts +26 -0
- package/src/providers/google-auth.ts +262 -0
- package/src/providers/google-gemini-cli.d.ts +75 -0
- package/src/providers/google-gemini-cli.ts +969 -0
- package/src/providers/google-gemini-headers.d.ts +43 -0
- package/src/providers/google-gemini-headers.ts +100 -0
- package/src/providers/google-shared.d.ts +183 -0
- package/src/providers/google-shared.ts +1105 -0
- package/src/providers/google-types.d.ts +138 -0
- package/src/providers/google-types.ts +167 -0
- package/src/providers/google-vertex.d.ts +11 -0
- package/src/providers/google-vertex.ts +124 -0
- package/src/providers/google.d.ts +4 -0
- package/src/providers/google.ts +41 -0
- package/src/providers/grammar.d.ts +1 -0
- package/src/providers/grammar.ts +70 -0
- package/src/providers/kimi.d.ts +27 -0
- package/src/providers/kimi.ts +52 -0
- package/src/providers/kiro-api-key.d.ts +50 -0
- package/src/providers/kiro-api-key.ts +786 -0
- package/src/providers/kiro-codewhisperer.d.ts +11 -0
- package/src/providers/kiro-codewhisperer.ts +600 -0
- package/src/providers/mock.ts +526 -0
- package/src/providers/ollama.d.ts +41 -0
- package/src/providers/ollama.ts +645 -0
- package/src/providers/openai-anthropic-shim.d.ts +31 -0
- package/src/providers/openai-anthropic-shim.ts +156 -0
- package/src/providers/openai-bounded-rate-limits.d.ts +3 -0
- package/src/providers/openai-bounded-rate-limits.ts +57 -0
- package/src/providers/openai-chat-server-schema.ts +254 -0
- package/src/providers/openai-chat-server.ts +724 -0
- package/src/providers/openai-codex/constants.d.ts +26 -0
- package/src/providers/openai-codex/constants.ts +43 -0
- package/src/providers/openai-codex/request-transformer.d.ts +50 -0
- package/src/providers/openai-codex/request-transformer.ts +219 -0
- package/src/providers/openai-codex/response-handler.d.ts +18 -0
- package/src/providers/openai-codex/response-handler.ts +111 -0
- package/src/providers/openai-codex-responses.d.ts +71 -0
- package/src/providers/openai-codex-responses.ts +3288 -0
- package/src/providers/openai-completions-compat.d.ts +6 -0
- package/src/providers/openai-completions-compat.ts +6 -0
- package/src/providers/openai-completions.d.ts +35 -0
- package/src/providers/openai-completions.ts +2294 -0
- package/src/providers/openai-opencodex-responses.ts +174 -0
- package/src/providers/openai-request-transform.d.ts +4 -0
- package/src/providers/openai-request-transform.ts +136 -0
- package/src/providers/openai-responses-server-schema.ts +290 -0
- package/src/providers/openai-responses-server.ts +1268 -0
- package/src/providers/openai-responses-shared.d.ts +106 -0
- package/src/providers/openai-responses-shared.ts +1253 -0
- package/src/providers/openai-responses.d.ts +37 -0
- package/src/providers/openai-responses.ts +989 -0
- package/src/providers/pi-native-client.d.ts +29 -0
- package/src/providers/pi-native-client.ts +243 -0
- package/src/providers/pi-native-server.ts +488 -0
- package/src/providers/register-builtins.d.ts +59 -0
- package/src/providers/register-builtins.ts +544 -0
- package/src/providers/synthetic.d.ts +26 -0
- package/src/providers/synthetic.ts +50 -0
- package/src/providers/transform-messages.d.ts +33 -0
- package/src/providers/transform-messages.ts +408 -0
- package/src/providers/vision-guard.d.ts +8 -0
- package/src/providers/vision-guard.ts +31 -0
- package/src/rate-limit-utils.d.ts +19 -0
- package/src/rate-limit-utils.ts +102 -0
- package/src/stream.d.ts +45 -0
- package/src/stream.ts +1306 -0
- package/src/types.d.ts +1073 -0
- package/src/types.ts +1305 -0
- package/src/usage/claude.ts +449 -0
- package/src/usage/gemini.ts +250 -0
- package/src/usage/github-copilot.ts +421 -0
- package/src/usage/google-antigravity.ts +201 -0
- package/src/usage/grok-cli.ts +259 -0
- package/src/usage/kimi.ts +285 -0
- package/src/usage/minimax-code.ts +31 -0
- package/src/usage/openai-codex.ts +503 -0
- package/src/usage/shared.ts +10 -0
- package/src/usage/zai.ts +247 -0
- package/src/usage.ts +190 -0
- package/src/utils/abort.d.ts +19 -0
- package/src/utils/abort.ts +51 -0
- package/src/utils/anthropic-auth.ts +95 -0
- package/src/utils/block-symbols.d.ts +6 -0
- package/src/utils/block-symbols.ts +11 -0
- package/src/utils/discovery/antigravity.ts +275 -0
- package/src/utils/discovery/codex.ts +362 -0
- package/src/utils/discovery/cursor.ts +388 -0
- package/src/utils/discovery/gemini.ts +248 -0
- package/src/utils/discovery/index.ts +4 -0
- package/src/utils/discovery/openai-compatible.ts +379 -0
- package/src/utils/event-stream.d.ts +41 -0
- package/src/utils/event-stream.ts +269 -0
- package/src/utils/fallback-transport.d.ts +110 -0
- package/src/utils/fallback-transport.ts +411 -0
- package/src/utils/fireworks-model-id.d.ts +10 -0
- package/src/utils/fireworks-model-id.ts +30 -0
- package/src/utils/foundry.d.ts +11 -0
- package/src/utils/foundry.ts +18 -0
- package/src/utils/h2-fetch.ts +60 -0
- package/src/utils/http-inspector.d.ts +59 -0
- package/src/utils/http-inspector.ts +380 -0
- package/src/utils/idle-iterator.d.ts +122 -0
- package/src/utils/idle-iterator.ts +410 -0
- package/src/utils/json-parse.d.ts +98 -0
- package/src/utils/json-parse.ts +607 -0
- package/src/utils/oauth/alibaba-token-plan.ts +60 -0
- package/src/utils/oauth/anthropic.ts +233 -0
- package/src/utils/oauth/api-key-login.ts +98 -0
- package/src/utils/oauth/api-key-validation.ts +344 -0
- package/src/utils/oauth/bizrouter.ts +15 -0
- package/src/utils/oauth/callback-server.d.ts +80 -0
- package/src/utils/oauth/callback-server.ts +359 -0
- package/src/utils/oauth/cerebras.ts +16 -0
- package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
- package/src/utils/oauth/commandcode.ts +17 -0
- package/src/utils/oauth/cursor.ts +157 -0
- package/src/utils/oauth/deepinfra.ts +15 -0
- package/src/utils/oauth/deepseek.ts +53 -0
- package/src/utils/oauth/firepass.ts +24 -0
- package/src/utils/oauth/fireworks.ts +15 -0
- package/src/utils/oauth/fugu.ts +15 -0
- package/src/utils/oauth/github-copilot.d.ts +38 -0
- package/src/utils/oauth/github-copilot.ts +362 -0
- package/src/utils/oauth/gitlab-duo.ts +123 -0
- package/src/utils/oauth/glm-zcode.d.ts +71 -0
- package/src/utils/oauth/glm-zcode.ts +433 -0
- package/src/utils/oauth/google-antigravity.ts +200 -0
- package/src/utils/oauth/google-gemini-cli.ts +256 -0
- package/src/utils/oauth/google-oauth-shared.ts +110 -0
- package/src/utils/oauth/huggingface.ts +62 -0
- package/src/utils/oauth/index.ts +558 -0
- package/src/utils/oauth/kagi.ts +47 -0
- package/src/utils/oauth/kilo.ts +87 -0
- package/src/utils/oauth/kimi.d.ts +17 -0
- package/src/utils/oauth/kimi.ts +275 -0
- package/src/utils/oauth/kiro.ts +448 -0
- package/src/utils/oauth/litellm.ts +47 -0
- package/src/utils/oauth/lm-studio.ts +38 -0
- package/src/utils/oauth/mara.ts +16 -0
- package/src/utils/oauth/minimax-code.ts +78 -0
- package/src/utils/oauth/moonshot.ts +16 -0
- package/src/utils/oauth/nanogpt.ts +15 -0
- package/src/utils/oauth/nvidia.ts +70 -0
- package/src/utils/oauth/oauth.html +199 -0
- package/src/utils/oauth/ollama-cloud.ts +28 -0
- package/src/utils/oauth/ollama.ts +47 -0
- package/src/utils/oauth/openai-codex.ts +299 -0
- package/src/utils/oauth/opencode.ts +49 -0
- package/src/utils/oauth/opengateway.ts +15 -0
- package/src/utils/oauth/openrouter.ts +16 -0
- package/src/utils/oauth/parallel.ts +46 -0
- package/src/utils/oauth/perplexity.ts +225 -0
- package/src/utils/oauth/pkce.ts +18 -0
- package/src/utils/oauth/qianfan.ts +58 -0
- package/src/utils/oauth/qwen-portal.ts +60 -0
- package/src/utils/oauth/sglang.ts +42 -0
- package/src/utils/oauth/synthetic.ts +15 -0
- package/src/utils/oauth/tavily.ts +46 -0
- package/src/utils/oauth/together.ts +16 -0
- package/src/utils/oauth/types.d.ts +56 -0
- package/src/utils/oauth/types.ts +122 -0
- package/src/utils/oauth/venice.ts +59 -0
- package/src/utils/oauth/vercel-ai-gateway.ts +47 -0
- package/src/utils/oauth/vllm.ts +42 -0
- package/src/utils/oauth/xai.ts +246 -0
- package/src/utils/oauth/xiaomi.ts +199 -0
- package/src/utils/oauth/zai.ts +60 -0
- package/src/utils/oauth/zenmux.ts +15 -0
- package/src/utils/overflow.ts +275 -0
- package/src/utils/parse-bind.ts +81 -0
- package/src/utils/provider-response.d.ts +6 -0
- package/src/utils/provider-response.ts +30 -0
- package/src/utils/provider-safety-stop.ts +8 -0
- package/src/utils/proxy.d.ts +7 -0
- package/src/utils/proxy.ts +652 -0
- package/src/utils/retry-after.d.ts +3 -0
- package/src/utils/retry-after.ts +110 -0
- package/src/utils/retry-budget.d.ts +1 -0
- package/src/utils/retry-budget.ts +4 -0
- package/src/utils/retry.d.ts +29 -0
- package/src/utils/retry.ts +67 -0
- package/src/utils/schema/CONSTRAINTS.md +164 -0
- package/src/utils/schema/adapt.d.ts +24 -0
- package/src/utils/schema/adapt.ts +36 -0
- package/src/utils/schema/compatibility.d.ts +30 -0
- package/src/utils/schema/compatibility.ts +435 -0
- package/src/utils/schema/dereference.d.ts +11 -0
- package/src/utils/schema/dereference.ts +98 -0
- package/src/utils/schema/draft.d.ts +10 -0
- package/src/utils/schema/draft.ts +341 -0
- package/src/utils/schema/equality.d.ts +4 -0
- package/src/utils/schema/equality.ts +97 -0
- package/src/utils/schema/fields.d.ts +49 -0
- package/src/utils/schema/fields.ts +190 -0
- package/src/utils/schema/index.d.ts +14 -0
- package/src/utils/schema/index.ts +14 -0
- package/src/utils/schema/json-schema-validator.d.ts +12 -0
- package/src/utils/schema/json-schema-validator.ts +577 -0
- package/src/utils/schema/meta-validator.d.ts +2 -0
- package/src/utils/schema/meta-validator.ts +167 -0
- package/src/utils/schema/normalize.d.ts +93 -0
- package/src/utils/schema/normalize.ts +1588 -0
- package/src/utils/schema/root-combinator.d.ts +12 -0
- package/src/utils/schema/root-combinator.ts +143 -0
- package/src/utils/schema/spill.d.ts +8 -0
- package/src/utils/schema/spill.ts +43 -0
- package/src/utils/schema/stamps.d.ts +25 -0
- package/src/utils/schema/stamps.ts +97 -0
- package/src/utils/schema/types.d.ts +4 -0
- package/src/utils/schema/types.ts +11 -0
- package/src/utils/schema/wire.d.ts +54 -0
- package/src/utils/schema/wire.ts +213 -0
- package/src/utils/schema/zod-decontaminate.d.ts +31 -0
- package/src/utils/schema/zod-decontaminate.ts +331 -0
- package/src/utils/sse-debug.d.ts +10 -0
- package/src/utils/sse-debug.ts +289 -0
- package/src/utils/tool-call-healing.d.ts +80 -0
- package/src/utils/tool-call-healing.ts +298 -0
- package/src/utils/tool-choice-capability.d.ts +57 -0
- package/src/utils/tool-choice-capability.ts +633 -0
- package/src/utils/tool-choice.d.ts +50 -0
- package/src/utils/tool-choice.ts +99 -0
- package/src/utils/validation.ts +1080 -0
- package/src/utils.d.ts +117 -0
- package/src/utils.ts +523 -0
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Translate a Pi frame's args into the local tool kwargs that run it.
|
|
3
|
+
*
|
|
4
|
+
* Shared deliberately by three consumers: the provider synthesizes a display
|
|
5
|
+
* block from these, the coding-agent bridge executes with them, and the legacy
|
|
6
|
+
* pi shim performs the identical translation for the old wire. Separate
|
|
7
|
+
* hand-rolled copies drift, and the drift is invisible — the transcript shows
|
|
8
|
+
* one operation while a different one runs.
|
|
9
|
+
*
|
|
10
|
+
* Kept apart from `cursor/exec-modern.ts` on purpose: these are pure
|
|
11
|
+
* string/path functions with no protobuf coupling, while that module pulls in
|
|
12
|
+
* `@bufbuild/protobuf` and the generated `agent_pb` graph. The legacy shim is
|
|
13
|
+
* compiled into the bundled virtual module registry, so importing it from a
|
|
14
|
+
* nested path would drag the whole exec implementation in with it — and
|
|
15
|
+
* `./providers/*` is a single-segment wildcard export that cannot serve a
|
|
16
|
+
* nested specifier under bunfs (issue #3442).
|
|
17
|
+
*
|
|
18
|
+
* Every `optional int32` here is presence-sensitive: `0` is a supplied value,
|
|
19
|
+
* not "unset", so it must never be folded into a default.
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* A `pi_read` range composed onto the path as `read`'s inline `:raw:N+K`
|
|
23
|
+
* selector.
|
|
24
|
+
*
|
|
25
|
+
* `read` exposes no range kwargs, so an uncomposed range reads the whole file.
|
|
26
|
+
* `offset` is a 1-indexed start clamped like the reference's
|
|
27
|
+
* `Math.max(0, offset - 1)` over 0-indexed lines; `limit` is a line count.
|
|
28
|
+
* `null` marks a present `limit: 0` — zero lines, which no selector expresses
|
|
29
|
+
* and which must not degrade into a whole-file read.
|
|
30
|
+
*
|
|
31
|
+
* The range is `raw` because a plain `:N+K` deliberately pads with one leading
|
|
32
|
+
* and three trailing context lines: helpful for a human reading a snippet,
|
|
33
|
+
* wrong for a caller that asked for exactly `limit` lines from `offset`. The
|
|
34
|
+
* wire result is an opaque `output` string, so the hashline and line-number
|
|
35
|
+
* gutter that `raw` also drops carry nothing the frame's contract needs.
|
|
36
|
+
* A range-free read keeps the ordinary form — whole-file reads want them.
|
|
37
|
+
*/
|
|
38
|
+
export declare function piReadPath(readPath: string, offset?: number, limit?: number): string | null;
|
|
39
|
+
/**
|
|
40
|
+
* Whether a read path ends in an OMP line selector, including compound `raw`
|
|
41
|
+
* forms. Cursor uses this only to describe the operation already executed by
|
|
42
|
+
* the coding-agent read tool; the selector remains embedded in the path.
|
|
43
|
+
*/
|
|
44
|
+
export declare function piReadPathHasRange(readPath: string): boolean;
|
|
45
|
+
/**
|
|
46
|
+
* The same range as {@link piReadPath}, rendered for a transcript block rather
|
|
47
|
+
* than for execution.
|
|
48
|
+
*
|
|
49
|
+
* Differs only at `limit: 0`, where `piReadPath` returns `null` because no
|
|
50
|
+
* selector reads zero lines and the frame is answered with empty output
|
|
51
|
+
* directly. The block still has to say so: falling back to the bare path there
|
|
52
|
+
* would record a whole-file read whose result is empty, which is the widest
|
|
53
|
+
* possible gap between what a rebuilt transcript shows and what happened.
|
|
54
|
+
* `+0` is never executed — it exists to be read.
|
|
55
|
+
*/
|
|
56
|
+
export declare function piReadDisplayPath(readPath: string, offset?: number, limit?: number): string;
|
|
57
|
+
/**
|
|
58
|
+
* A legacy `grep` frame's pagination `offset` as the local tool's file `skip`.
|
|
59
|
+
*
|
|
60
|
+
* `grep` paginates by file and reports "use skip=N for the next page" in that
|
|
61
|
+
* same unit, so the offset maps across directly. A present `0` means "start at
|
|
62
|
+
* the beginning", which is the unskipped search rather than a skip of zero.
|
|
63
|
+
*
|
|
64
|
+
* Shared because both the executing bridge and the provider's transcript
|
|
65
|
+
* synthesis need it: a block showing an unskipped search beside a result from
|
|
66
|
+
* a later file window misreports what was searched.
|
|
67
|
+
*/
|
|
68
|
+
export declare function piGrepSkip(offset?: number): number | undefined;
|
|
69
|
+
/**
|
|
70
|
+
* Join a Pi frame's optional `path` with the `glob`/`pattern` it scopes.
|
|
71
|
+
*
|
|
72
|
+
* The local `grep`/`glob` tools take one combined path spec. An absolute
|
|
73
|
+
* pattern ignores the path, and an absent or `.` path leaves the pattern
|
|
74
|
+
* standing alone rather than building a `./`- or `//`-prefixed spec.
|
|
75
|
+
*
|
|
76
|
+
* Uses `node:path` rather than string surgery so Windows absolutes (`C:\…`,
|
|
77
|
+
* UNC) are recognised and separators stay normalized.
|
|
78
|
+
*/
|
|
79
|
+
export declare function piJoinPath(basePath: string | undefined, pattern: string): string;
|
|
80
|
+
/**
|
|
81
|
+
* The path a `pi_ls` frame lists.
|
|
82
|
+
*
|
|
83
|
+
* The frame's `limit` is deliberately NOT mapped. It caps directory *entries*
|
|
84
|
+
* (the reference does a flat `readdir` and slices the entry array), while the
|
|
85
|
+
* local `read` tool renders a depth-2 tree with per-directory caps and elision
|
|
86
|
+
* summaries and applies a selector as a *rendered line* slice. Nested rows,
|
|
87
|
+
* headers and "N more" lines all count toward that slice, so `:1+K` would cap
|
|
88
|
+
* a different unit while looking honored — worse than leaving it unset, which
|
|
89
|
+
* at least reports the local listing's own truncation faithfully.
|
|
90
|
+
*/
|
|
91
|
+
export declare function piLsPath(basePath: string | undefined): string;
|
|
92
|
+
/** Escape a literal string so the regex-only local `grep` tool matches it verbatim. */
|
|
93
|
+
export declare function piEscapeRegexLiteral(value: string): string;
|
|
94
|
+
/** Clamp a present `optional int32` result cap the way the reference does; `undefined` stays unset. */
|
|
95
|
+
export declare function piLimit(limit: number | undefined): number | undefined;
|
|
96
|
+
/**
|
|
97
|
+
* A `pi_bash` frame's timeout as the local `bash` tool's kwarg.
|
|
98
|
+
*
|
|
99
|
+
* Presence-sensitive like every other `optional int32` here, and unusually
|
|
100
|
+
* load-bearing: `bash` documents `timeout: 0` as "disables the command
|
|
101
|
+
* deadline", so folding a supplied `0` into `undefined` applies the 300s
|
|
102
|
+
* default and kills exactly the long-running command that asked not to be.
|
|
103
|
+
* Negative values have no local meaning and fall back to the default.
|
|
104
|
+
*/
|
|
105
|
+
export declare function piTimeout(timeout: number | undefined): number | undefined;
|
|
106
|
+
/**
|
|
107
|
+
* Drop keys whose value is `undefined` so optional local-tool kwargs stay
|
|
108
|
+
* absent rather than present-as-undefined.
|
|
109
|
+
*
|
|
110
|
+
* The Cursor exec bridge historically wrote forms like
|
|
111
|
+
* `cwd: workingDirectory || undefined` and
|
|
112
|
+
* `case: caseInsensitive === true ? false : undefined`. ArkType rejects a
|
|
113
|
+
* present `undefined` on an optional field (`was undefined`) even though
|
|
114
|
+
* omitting the key is valid — which flooded Cursor sessions with bash/grep
|
|
115
|
+
* validation errors for otherwise fine frames.
|
|
116
|
+
*/
|
|
117
|
+
export declare function omitUndefinedArgs<T extends Record<string, unknown>>(args: T): {
|
|
118
|
+
[K in keyof T]?: Exclude<T[K], undefined>;
|
|
119
|
+
};
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Translate a Pi frame's args into the local tool kwargs that run it.
|
|
3
|
+
*
|
|
4
|
+
* Shared deliberately by three consumers: the provider synthesizes a display
|
|
5
|
+
* block from these, the coding-agent bridge executes with them, and the legacy
|
|
6
|
+
* pi shim performs the identical translation for the old wire. Separate
|
|
7
|
+
* hand-rolled copies drift, and the drift is invisible — the transcript shows
|
|
8
|
+
* one operation while a different one runs.
|
|
9
|
+
*
|
|
10
|
+
* Kept apart from `cursor/exec-modern.ts` on purpose: these are pure
|
|
11
|
+
* string/path functions with no protobuf coupling, while that module pulls in
|
|
12
|
+
* `@bufbuild/protobuf` and the generated `agent_pb` graph. The legacy shim is
|
|
13
|
+
* compiled into the bundled virtual module registry, so importing it from a
|
|
14
|
+
* nested path would drag the whole exec implementation in with it — and
|
|
15
|
+
* `./providers/*` is a single-segment wildcard export that cannot serve a
|
|
16
|
+
* nested specifier under bunfs (issue #3442).
|
|
17
|
+
*
|
|
18
|
+
* Every `optional int32` here is presence-sensitive: `0` is a supplied value,
|
|
19
|
+
* not "unset", so it must never be folded into a default.
|
|
20
|
+
*/
|
|
21
|
+
|
|
22
|
+
import * as path from "node:path";
|
|
23
|
+
|
|
24
|
+
/**
|
|
25
|
+
* A `pi_read` range composed onto the path as `read`'s inline `:raw:N+K`
|
|
26
|
+
* selector.
|
|
27
|
+
*
|
|
28
|
+
* `read` exposes no range kwargs, so an uncomposed range reads the whole file.
|
|
29
|
+
* `offset` is a 1-indexed start clamped like the reference's
|
|
30
|
+
* `Math.max(0, offset - 1)` over 0-indexed lines; `limit` is a line count.
|
|
31
|
+
* `null` marks a present `limit: 0` — zero lines, which no selector expresses
|
|
32
|
+
* and which must not degrade into a whole-file read.
|
|
33
|
+
*
|
|
34
|
+
* The range is `raw` because a plain `:N+K` deliberately pads with one leading
|
|
35
|
+
* and three trailing context lines: helpful for a human reading a snippet,
|
|
36
|
+
* wrong for a caller that asked for exactly `limit` lines from `offset`. The
|
|
37
|
+
* wire result is an opaque `output` string, so the hashline and line-number
|
|
38
|
+
* gutter that `raw` also drops carry nothing the frame's contract needs.
|
|
39
|
+
* A range-free read keeps the ordinary form — whole-file reads want them.
|
|
40
|
+
*/
|
|
41
|
+
export function piReadPath(readPath: string, offset?: number, limit?: number): string | null {
|
|
42
|
+
if (limit !== undefined && Math.floor(limit) <= 0) return null;
|
|
43
|
+
const start = offset !== undefined ? Math.max(1, Math.floor(offset)) : undefined;
|
|
44
|
+
const count = limit !== undefined ? Math.floor(limit) : undefined;
|
|
45
|
+
if (start === undefined && count === undefined) return readPath;
|
|
46
|
+
if (start === undefined) return `${readPath}:raw:1+${count}`;
|
|
47
|
+
return count === undefined ? `${readPath}:raw:${start}-` : `${readPath}:raw:${start}+${count}`;
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const READ_RANGE_CHUNK_RE = /^L?(\d+)(?:(\.\.|[-+])L?(\d+)?)?$/i;
|
|
51
|
+
|
|
52
|
+
function isReadRangeList(value: string): boolean {
|
|
53
|
+
return value.split(",").every(chunk => {
|
|
54
|
+
const match = READ_RANGE_CHUNK_RE.exec(chunk);
|
|
55
|
+
if (!match) return false;
|
|
56
|
+
const start = Number.parseInt(match[1]!, 10);
|
|
57
|
+
if (start < 1) return false;
|
|
58
|
+
const separator = match[2];
|
|
59
|
+
if (!separator) return true;
|
|
60
|
+
const end = match[3] ? Number.parseInt(match[3], 10) : undefined;
|
|
61
|
+
if (separator === "+") return end !== undefined && end >= 1;
|
|
62
|
+
return end === undefined || end >= start;
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
/**
|
|
67
|
+
* Whether a read path ends in an OMP line selector, including compound `raw`
|
|
68
|
+
* forms. Cursor uses this only to describe the operation already executed by
|
|
69
|
+
* the coding-agent read tool; the selector remains embedded in the path.
|
|
70
|
+
*/
|
|
71
|
+
export function piReadPathHasRange(readPath: string): boolean {
|
|
72
|
+
const chunks = readPath.split(":");
|
|
73
|
+
const last = chunks.at(-1);
|
|
74
|
+
if (last && isReadRangeList(last)) return true;
|
|
75
|
+
if (last?.toLowerCase() !== "raw") return false;
|
|
76
|
+
const preceding = chunks.at(-2);
|
|
77
|
+
return preceding !== undefined && isReadRangeList(preceding);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* The same range as {@link piReadPath}, rendered for a transcript block rather
|
|
82
|
+
* than for execution.
|
|
83
|
+
*
|
|
84
|
+
* Differs only at `limit: 0`, where `piReadPath` returns `null` because no
|
|
85
|
+
* selector reads zero lines and the frame is answered with empty output
|
|
86
|
+
* directly. The block still has to say so: falling back to the bare path there
|
|
87
|
+
* would record a whole-file read whose result is empty, which is the widest
|
|
88
|
+
* possible gap between what a rebuilt transcript shows and what happened.
|
|
89
|
+
* `+0` is never executed — it exists to be read.
|
|
90
|
+
*/
|
|
91
|
+
export function piReadDisplayPath(readPath: string, offset?: number, limit?: number): string {
|
|
92
|
+
const composed = piReadPath(readPath, offset, limit);
|
|
93
|
+
if (composed !== null) return composed;
|
|
94
|
+
const start = offset !== undefined ? Math.max(1, Math.floor(offset)) : 1;
|
|
95
|
+
return `${readPath}:raw:${start}+0`;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
/**
|
|
99
|
+
* A legacy `grep` frame's pagination `offset` as the local tool's file `skip`.
|
|
100
|
+
*
|
|
101
|
+
* `grep` paginates by file and reports "use skip=N for the next page" in that
|
|
102
|
+
* same unit, so the offset maps across directly. A present `0` means "start at
|
|
103
|
+
* the beginning", which is the unskipped search rather than a skip of zero.
|
|
104
|
+
*
|
|
105
|
+
* Shared because both the executing bridge and the provider's transcript
|
|
106
|
+
* synthesis need it: a block showing an unskipped search beside a result from
|
|
107
|
+
* a later file window misreports what was searched.
|
|
108
|
+
*/
|
|
109
|
+
export function piGrepSkip(offset?: number): number | undefined {
|
|
110
|
+
return offset !== undefined && offset > 0 ? Math.floor(offset) : undefined;
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
/**
|
|
114
|
+
* Join a Pi frame's optional `path` with the `glob`/`pattern` it scopes.
|
|
115
|
+
*
|
|
116
|
+
* The local `grep`/`glob` tools take one combined path spec. An absolute
|
|
117
|
+
* pattern ignores the path, and an absent or `.` path leaves the pattern
|
|
118
|
+
* standing alone rather than building a `./`- or `//`-prefixed spec.
|
|
119
|
+
*
|
|
120
|
+
* Uses `node:path` rather than string surgery so Windows absolutes (`C:\…`,
|
|
121
|
+
* UNC) are recognised and separators stay normalized.
|
|
122
|
+
*/
|
|
123
|
+
export function piJoinPath(basePath: string | undefined, pattern: string): string {
|
|
124
|
+
if (path.isAbsolute(pattern)) return pattern;
|
|
125
|
+
if (!basePath || basePath === ".") return pattern;
|
|
126
|
+
return path.join(basePath, pattern);
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
/**
|
|
130
|
+
* The path a `pi_ls` frame lists.
|
|
131
|
+
*
|
|
132
|
+
* The frame's `limit` is deliberately NOT mapped. It caps directory *entries*
|
|
133
|
+
* (the reference does a flat `readdir` and slices the entry array), while the
|
|
134
|
+
* local `read` tool renders a depth-2 tree with per-directory caps and elision
|
|
135
|
+
* summaries and applies a selector as a *rendered line* slice. Nested rows,
|
|
136
|
+
* headers and "N more" lines all count toward that slice, so `:1+K` would cap
|
|
137
|
+
* a different unit while looking honored — worse than leaving it unset, which
|
|
138
|
+
* at least reports the local listing's own truncation faithfully.
|
|
139
|
+
*/
|
|
140
|
+
export function piLsPath(basePath: string | undefined): string {
|
|
141
|
+
return basePath || ".";
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/** Escape a literal string so the regex-only local `grep` tool matches it verbatim. */
|
|
145
|
+
export function piEscapeRegexLiteral(value: string): string {
|
|
146
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/** Clamp a present `optional int32` result cap the way the reference does; `undefined` stays unset. */
|
|
150
|
+
export function piLimit(limit: number | undefined): number | undefined {
|
|
151
|
+
return limit === undefined ? undefined : Math.max(1, Math.floor(limit));
|
|
152
|
+
}
|
|
153
|
+
|
|
154
|
+
/**
|
|
155
|
+
* A `pi_bash` frame's timeout as the local `bash` tool's kwarg.
|
|
156
|
+
*
|
|
157
|
+
* Presence-sensitive like every other `optional int32` here, and unusually
|
|
158
|
+
* load-bearing: `bash` documents `timeout: 0` as "disables the command
|
|
159
|
+
* deadline", so folding a supplied `0` into `undefined` applies the 300s
|
|
160
|
+
* default and kills exactly the long-running command that asked not to be.
|
|
161
|
+
* Negative values have no local meaning and fall back to the default.
|
|
162
|
+
*/
|
|
163
|
+
export function piTimeout(timeout: number | undefined): number | undefined {
|
|
164
|
+
return timeout !== undefined && timeout >= 0 ? timeout : undefined;
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
/**
|
|
168
|
+
* Drop keys whose value is `undefined` so optional local-tool kwargs stay
|
|
169
|
+
* absent rather than present-as-undefined.
|
|
170
|
+
*
|
|
171
|
+
* The Cursor exec bridge historically wrote forms like
|
|
172
|
+
* `cwd: workingDirectory || undefined` and
|
|
173
|
+
* `case: caseInsensitive === true ? false : undefined`. ArkType rejects a
|
|
174
|
+
* present `undefined` on an optional field (`was undefined`) even though
|
|
175
|
+
* omitting the key is valid — which flooded Cursor sessions with bash/grep
|
|
176
|
+
* validation errors for otherwise fine frames.
|
|
177
|
+
*/
|
|
178
|
+
export function omitUndefinedArgs<T extends Record<string, unknown>>(
|
|
179
|
+
args: T,
|
|
180
|
+
): { [K in keyof T]?: Exclude<T[K], undefined> } {
|
|
181
|
+
const out: Record<string, unknown> = {};
|
|
182
|
+
for (const key of Object.keys(args)) {
|
|
183
|
+
const value = args[key];
|
|
184
|
+
if (value !== undefined) out[key] = value;
|
|
185
|
+
}
|
|
186
|
+
return out as { [K in keyof T]?: Exclude<T[K], undefined> };
|
|
187
|
+
}
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
import { type JsonValue } from "@bufbuild/protobuf";
|
|
2
|
+
import type { CursorExecHandlerResult, CursorExecHandlers, CursorToolResultHandler, Message, Model, StreamFunction, StreamOptions, ToolCall, ToolResultMessage } from "../types";
|
|
3
|
+
import { kCursorExecResolved } from "../utils/block-symbols";
|
|
4
|
+
import { CURSOR_CLIENT_VERSION } from "./cursor/client-version";
|
|
5
|
+
import type { CursorRule, RequestedModel_ModelParameterbytes } from "./cursor/gen/agent_pb";
|
|
6
|
+
export declare const CURSOR_API_URL = "https://api2.cursor.sh";
|
|
7
|
+
export { CURSOR_CLIENT_VERSION };
|
|
8
|
+
/** Drop all cached state + blob bytes for a conversation (F15 bound + session-teardown hook). */
|
|
9
|
+
export declare function disposeCursorConversation(conversationId: string): void;
|
|
10
|
+
export interface CursorOptions extends StreamOptions {
|
|
11
|
+
customSystemPrompt?: string;
|
|
12
|
+
conversationId?: string;
|
|
13
|
+
execHandlers?: CursorExecHandlers;
|
|
14
|
+
onToolResult?: CursorToolResultHandler;
|
|
15
|
+
}
|
|
16
|
+
/** Build the ordered global USER rules Cursor expects for the current system prompt. */
|
|
17
|
+
export declare function buildCursorRequestContextRules(systemPrompt: readonly string[] | undefined): CursorRule[];
|
|
18
|
+
export interface CursorWireModelResolution {
|
|
19
|
+
modelId: string;
|
|
20
|
+
parameters: RequestedModel_ModelParameterbytes[];
|
|
21
|
+
translated: boolean;
|
|
22
|
+
}
|
|
23
|
+
/** Resolve a Cursor model's GPT effort suffix into its wire model and parameter. */
|
|
24
|
+
export declare function resolveCursorWireModelForTest(model: Pick<Model<"cursor-agent">, "id" | "wireModelId">): CursorWireModelResolution;
|
|
25
|
+
/** Turn Cursor's opaque HTTP/2 failure into a useful transport diagnosis. */
|
|
26
|
+
export declare function mapH2TransportError(error: unknown, baseUrl: string): unknown;
|
|
27
|
+
export declare const streamCursor: StreamFunction<"cursor-agent">;
|
|
28
|
+
type ToolCallState = ToolCall & {
|
|
29
|
+
index: number;
|
|
30
|
+
partialJson?: string;
|
|
31
|
+
kind: "mcp" | "todo_write" | "native" | "cursor-exec";
|
|
32
|
+
[kCursorExecResolved]?: true;
|
|
33
|
+
};
|
|
34
|
+
/** Exported for tests: verifies handler is invoked with correct `this` when passed as bound. */
|
|
35
|
+
export declare function resolveExecHandler<TArgs, TResult>(args: TArgs, handler: ((args: TArgs) => Promise<CursorExecHandlerResult<TResult>>) | undefined, onToolResult: CursorToolResultHandler | undefined, buildFromToolResult: (toolResult: ToolResultMessage) => TResult, buildRejected: (reason: string) => TResult, buildError: (error: string) => TResult): Promise<{
|
|
36
|
+
execResult: TResult;
|
|
37
|
+
toolResult?: ToolResultMessage;
|
|
38
|
+
}>;
|
|
39
|
+
/** Exported for deterministic coverage of ordered server-message handling. */
|
|
40
|
+
export declare function createCursorMessageQueueForTest(onError?: (error: unknown) => void): {
|
|
41
|
+
enqueue(handler: () => void | Promise<void>): Promise<void>;
|
|
42
|
+
drain(): Promise<void>;
|
|
43
|
+
};
|
|
44
|
+
/** Exported for direct regression coverage of the JSON-safety boundary. */
|
|
45
|
+
export declare function cursorJsonSafeValueForTest(value: unknown): unknown;
|
|
46
|
+
export declare function buildNativeToolCallBlock(toolCall: Record<string, unknown>, callId: string, index: number): ToolCallState | null;
|
|
47
|
+
/**
|
|
48
|
+
* Build `ConversationStateStructure.rootPromptMessagesJson` blob IDs for the
|
|
49
|
+
* system prompt plus prior conversation history, as JSON blobs matching
|
|
50
|
+
* Cursor's internal Vercel-AI-SDK-shaped message format.
|
|
51
|
+
*
|
|
52
|
+
* Cursor's server uses `rootPromptMessagesJson` (not `turns[]`) to build the
|
|
53
|
+
* actual model prompt. `turns[]` is UI/display metadata. Without populating
|
|
54
|
+
* this field, multi-turn conversations lose prior context — the model sees
|
|
55
|
+
* only an empty placeholder where historical user turns should be.
|
|
56
|
+
* The last user message is excluded because it is sent in the action.
|
|
57
|
+
*/
|
|
58
|
+
/**
|
|
59
|
+
* Build one Cursor system-message JSON blob per ordered system prompt. Emitting separate blobs
|
|
60
|
+
* (rather than a single `\n\n`-joined string) lets Cursor's blob cache hit independently per
|
|
61
|
+
* entry: changing only the last prompt does not invalidate earlier blob ids, so the prefix
|
|
62
|
+
* up to the changed prompt remains cached on the server side.
|
|
63
|
+
*
|
|
64
|
+
* When no system prompts are provided, returns a single default greeting so we never emit
|
|
65
|
+
* an empty `rootPromptMessagesJson` head.
|
|
66
|
+
*/
|
|
67
|
+
export declare function buildCursorSystemPromptJsons(systemPrompt: readonly string[] | undefined, modelId?: string): string[];
|
|
68
|
+
/** Exported for tests: decodes Cursor history blobs built from conversation messages. */
|
|
69
|
+
export declare function buildCursorHistoryForTest(messages: Message[]): {
|
|
70
|
+
rootPromptMessagesJson: unknown[];
|
|
71
|
+
turnUserMessagesJson: JsonValue[];
|
|
72
|
+
};
|