@linxiraos/pi-ai 1.0.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 +5066 -0
- package/README.md +1195 -0
- package/dist/types/api-registry.d.ts +30 -0
- package/dist/types/auth/sqlite-credential-store.d.ts +117 -0
- package/dist/types/auth-broker/client.d.ts +93 -0
- package/dist/types/auth-broker/discover.d.ts +39 -0
- package/dist/types/auth-broker/index.d.ts +7 -0
- package/dist/types/auth-broker/refresher.d.ts +25 -0
- package/dist/types/auth-broker/remote-store.d.ts +136 -0
- package/dist/types/auth-broker/server.d.ts +48 -0
- package/dist/types/auth-broker/snapshot-cache.d.ts +17 -0
- package/dist/types/auth-broker/types.d.ts +152 -0
- package/dist/types/auth-broker/wire-schema-resource.d.ts +53 -0
- package/dist/types/auth-broker/wire-schemas.d.ts +5 -0
- package/dist/types/auth-gateway/http.d.ts +56 -0
- package/dist/types/auth-gateway/index.d.ts +3 -0
- package/dist/types/auth-gateway/server.d.ts +36 -0
- package/dist/types/auth-gateway/types.d.ts +127 -0
- package/dist/types/auth-retry.d.ts +150 -0
- package/dist/types/auth-storage.d.ts +1258 -0
- package/dist/types/dialect/anthropic.d.ts +15 -0
- package/dist/types/dialect/catalog.d.ts +3 -0
- package/dist/types/dialect/coercion.d.ts +23 -0
- package/dist/types/dialect/deepseek.d.ts +14 -0
- package/dist/types/dialect/demotion.d.ts +30 -0
- package/dist/types/dialect/examples.d.ts +18 -0
- package/dist/types/dialect/factory.d.ts +3 -0
- package/dist/types/dialect/fenced-thinking.d.ts +53 -0
- package/dist/types/dialect/gemini.d.ts +17 -0
- package/dist/types/dialect/gemma.d.ts +15 -0
- package/dist/types/dialect/glm.d.ts +9 -0
- package/dist/types/dialect/harmony.d.ts +8 -0
- package/dist/types/dialect/hermes.d.ts +9 -0
- package/dist/types/dialect/history.d.ts +3 -0
- package/dist/types/dialect/index.d.ts +11 -0
- package/dist/types/dialect/inventory.d.ts +9 -0
- package/dist/types/dialect/kimi.d.ts +14 -0
- package/dist/types/dialect/minimax.d.ts +3 -0
- package/dist/types/dialect/owned-stream.d.ts +4 -0
- package/dist/types/dialect/qwen3.d.ts +9 -0
- package/dist/types/dialect/rendering.d.ts +54 -0
- package/dist/types/dialect/thinking.d.ts +6 -0
- package/dist/types/dialect/types.d.ts +68 -0
- package/dist/types/dialect/xml.d.ts +9 -0
- package/dist/types/error/abort.d.ts +14 -0
- package/dist/types/error/auth-classify.d.ts +20 -0
- package/dist/types/error/auth.d.ts +27 -0
- package/dist/types/error/aws.d.ts +27 -0
- package/dist/types/error/classes.d.ts +106 -0
- package/dist/types/error/finalize.d.ts +39 -0
- package/dist/types/error/flags.d.ts +94 -0
- package/dist/types/error/format.d.ts +20 -0
- package/dist/types/error/gateway.d.ts +20 -0
- package/dist/types/error/index.d.ts +14 -0
- package/dist/types/error/oauth.d.ts +43 -0
- package/dist/types/error/provider.d.ts +42 -0
- package/dist/types/error/rate-limit.d.ts +80 -0
- package/dist/types/error/retryable.d.ts +27 -0
- package/dist/types/error/validation.d.ts +32 -0
- package/dist/types/index.d.ts +51 -0
- package/dist/types/provider-details.d.ts +24 -0
- package/dist/types/providers/amazon-bedrock.d.ts +39 -0
- package/dist/types/providers/anthropic-client.d.ts +106 -0
- package/dist/types/providers/anthropic-messages-server-schema.d.ts +937 -0
- package/dist/types/providers/anthropic-messages-server.d.ts +17 -0
- package/dist/types/providers/anthropic-wire.d.ts +345 -0
- package/dist/types/providers/anthropic.d.ts +261 -0
- package/dist/types/providers/aws-credentials.d.ts +48 -0
- package/dist/types/providers/aws-eventstream.d.ts +39 -0
- package/dist/types/providers/aws-sigv4.d.ts +55 -0
- package/dist/types/providers/azure-openai-responses.d.ts +16 -0
- package/dist/types/providers/bedrock-mantle.d.ts +13 -0
- package/dist/types/providers/claude-code-fingerprint.d.ts +19 -0
- package/dist/types/providers/cowork-fetch.d.ts +3 -0
- package/dist/types/providers/cursor/exec-modern.d.ts +98 -0
- package/dist/types/providers/cursor-pi-args.d.ts +105 -0
- package/dist/types/providers/cursor.d.ts +221 -0
- package/dist/types/providers/devin.d.ts +12 -0
- package/dist/types/providers/error-message.d.ts +25 -0
- package/dist/types/providers/github-copilot-headers.d.ts +40 -0
- package/dist/types/providers/gitlab-duo-workflow.d.ts +254 -0
- package/dist/types/providers/gitlab-duo.d.ts +27 -0
- package/dist/types/providers/google-auth.d.ts +24 -0
- package/dist/types/providers/google-gemini-cli.d.ts +120 -0
- package/dist/types/providers/google-shared.d.ts +203 -0
- package/dist/types/providers/google-types.d.ts +155 -0
- package/dist/types/providers/google-vertex.d.ts +7 -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/mock.d.ts +179 -0
- package/dist/types/providers/ollama.d.ts +8 -0
- package/dist/types/providers/openai-anthropic-shim.d.ts +35 -0
- package/dist/types/providers/openai-chat-server-schema.d.ts +1311 -0
- package/dist/types/providers/openai-chat-server.d.ts +16 -0
- package/dist/types/providers/openai-chat-wire.d.ts +669 -0
- package/dist/types/providers/openai-codex/request-transformer.d.ts +109 -0
- package/dist/types/providers/openai-codex/response-handler.d.ts +26 -0
- package/dist/types/providers/openai-codex-responses.d.ts +238 -0
- package/dist/types/providers/openai-completions.d.ts +48 -0
- package/dist/types/providers/openai-reasoning-fallback.d.ts +25 -0
- package/dist/types/providers/openai-responses-server-schema.d.ts +1314 -0
- package/dist/types/providers/openai-responses-server.d.ts +17 -0
- package/dist/types/providers/openai-responses-wire.d.ts +6099 -0
- package/dist/types/providers/openai-responses.d.ts +131 -0
- package/dist/types/providers/openai-shared.d.ts +624 -0
- package/dist/types/providers/pi-native-client.d.ts +13 -0
- package/dist/types/providers/pi-native-server.d.ts +69 -0
- package/dist/types/providers/register-builtins.d.ts +37 -0
- package/dist/types/providers/synthetic.d.ts +26 -0
- package/dist/types/providers/transform-messages.d.ts +32 -0
- package/dist/types/providers/vision-guard.d.ts +20 -0
- package/dist/types/registry/aiand.d.ts +7 -0
- package/dist/types/registry/aimlapi.d.ts +4 -0
- package/dist/types/registry/alibaba-coding-plan.d.ts +8 -0
- package/dist/types/registry/alibaba-token-plan.d.ts +18 -0
- package/dist/types/registry/amazon-bedrock.d.ts +5 -0
- package/dist/types/registry/anthropic.d.ts +10 -0
- package/dist/types/registry/api-key-login.d.ts +42 -0
- package/dist/types/registry/api-key-validation.d.ts +43 -0
- package/dist/types/registry/aws.d.ts +13 -0
- package/dist/types/registry/azure.d.ts +4 -0
- package/dist/types/registry/baseten.d.ts +7 -0
- package/dist/types/registry/bedrock-mantle.d.ts +22 -0
- package/dist/types/registry/cerebras.d.ts +7 -0
- package/dist/types/registry/cloudflare-ai-gateway.d.ts +13 -0
- package/dist/types/registry/coreweave.d.ts +7 -0
- package/dist/types/registry/cursor.d.ts +7 -0
- package/dist/types/registry/deepseek.d.ts +8 -0
- package/dist/types/registry/derived.d.ts +5 -0
- package/dist/types/registry/devin.d.ts +8 -0
- package/dist/types/registry/exa.d.ts +8 -0
- package/dist/types/registry/firepass.d.ts +16 -0
- package/dist/types/registry/fireworks.d.ts +7 -0
- package/dist/types/registry/github-copilot.d.ts +7 -0
- package/dist/types/registry/gitlab-duo-workflow.d.ts +10 -0
- package/dist/types/registry/gitlab-duo.d.ts +9 -0
- package/dist/types/registry/gmi-cloud.d.ts +7 -0
- package/dist/types/registry/google-antigravity.d.ts +9 -0
- package/dist/types/registry/google-gemini-cli.d.ts +9 -0
- package/dist/types/registry/google-vertex.d.ts +5 -0
- package/dist/types/registry/google.d.ts +4 -0
- package/dist/types/registry/groq.d.ts +4 -0
- package/dist/types/registry/huggingface.d.ts +7 -0
- package/dist/types/registry/index.d.ts +4 -0
- package/dist/types/registry/kagi.d.ts +14 -0
- package/dist/types/registry/kilo.d.ts +7 -0
- package/dist/types/registry/kimi-code.d.ts +7 -0
- package/dist/types/registry/litellm.d.ts +13 -0
- package/dist/types/registry/llama-cpp.d.ts +8 -0
- package/dist/types/registry/lm-studio.d.ts +8 -0
- package/dist/types/registry/meta.d.ts +7 -0
- package/dist/types/registry/minimax-code-cn.d.ts +6 -0
- package/dist/types/registry/minimax-code.d.ts +6 -0
- package/dist/types/registry/minimax.d.ts +4 -0
- package/dist/types/registry/mistral.d.ts +4 -0
- package/dist/types/registry/moonshot.d.ts +7 -0
- package/dist/types/registry/nanogpt.d.ts +7 -0
- package/dist/types/registry/novita.d.ts +6 -0
- package/dist/types/registry/nvidia.d.ts +7 -0
- package/dist/types/registry/oauth/anthropic-constants.d.ts +12 -0
- package/dist/types/registry/oauth/anthropic.d.ts +24 -0
- package/dist/types/registry/oauth/callback-server.d.ts +74 -0
- package/dist/types/registry/oauth/cursor.d.ts +16 -0
- package/dist/types/registry/oauth/device-code.d.ts +25 -0
- package/dist/types/registry/oauth/devin.d.ts +5 -0
- package/dist/types/registry/oauth/github-copilot.d.ts +30 -0
- package/dist/types/registry/oauth/gitlab-duo-workflow.d.ts +6 -0
- package/dist/types/registry/oauth/gitlab-duo.d.ts +3 -0
- package/dist/types/registry/oauth/google-antigravity.d.ts +11 -0
- package/dist/types/registry/oauth/google-gemini-cli.d.ts +22 -0
- package/dist/types/registry/oauth/google-oauth-shared.d.ts +56 -0
- package/dist/types/registry/oauth/index.d.ts +45 -0
- package/dist/types/registry/oauth/kimi.d.ts +21 -0
- package/dist/types/registry/oauth/minimax-code.d.ts +27 -0
- package/dist/types/registry/oauth/openai-codex.d.ts +33 -0
- package/dist/types/registry/oauth/opencode.d.ts +18 -0
- package/dist/types/registry/oauth/perplexity.d.ts +9 -0
- package/dist/types/registry/oauth/pkce.d.ts +8 -0
- package/dist/types/registry/oauth/types.d.ts +87 -0
- package/dist/types/registry/oauth/wafer.d.ts +1 -0
- package/dist/types/registry/oauth/xai-oauth.d.ts +46 -0
- package/dist/types/registry/oauth/xiaomi.d.ts +25 -0
- package/dist/types/registry/oauth/zai.d.ts +25 -0
- package/dist/types/registry/ollama-cloud.d.ts +7 -0
- package/dist/types/registry/ollama.d.ts +12 -0
- package/dist/types/registry/openai-codex-device.d.ts +8 -0
- package/dist/types/registry/openai-codex.d.ts +9 -0
- package/dist/types/registry/openai.d.ts +4 -0
- package/dist/types/registry/opencode-go.d.ts +6 -0
- package/dist/types/registry/opencode-zen.d.ts +6 -0
- package/dist/types/registry/openrouter.d.ts +13 -0
- package/dist/types/registry/parallel.d.ts +14 -0
- package/dist/types/registry/perplexity.d.ts +7 -0
- package/dist/types/registry/qianfan.d.ts +7 -0
- package/dist/types/registry/qwen-portal.d.ts +7 -0
- package/dist/types/registry/registry.d.ts +367 -0
- package/dist/types/registry/sakana.d.ts +7 -0
- package/dist/types/registry/siliconflow-cn.d.ts +7 -0
- package/dist/types/registry/siliconflow.d.ts +7 -0
- package/dist/types/registry/synthetic.d.ts +6 -0
- package/dist/types/registry/tavily.d.ts +14 -0
- package/dist/types/registry/together.d.ts +6 -0
- package/dist/types/registry/types.d.ts +75 -0
- package/dist/types/registry/umans.d.ts +7 -0
- package/dist/types/registry/venice.d.ts +13 -0
- package/dist/types/registry/vercel-ai-gateway.d.ts +7 -0
- package/dist/types/registry/vllm.d.ts +7 -0
- package/dist/types/registry/wafer-serverless.d.ts +6 -0
- package/dist/types/registry/xai-oauth.d.ts +7 -0
- package/dist/types/registry/xai.d.ts +7 -0
- package/dist/types/registry/xiaomi-token-plan-ams.d.ts +6 -0
- package/dist/types/registry/xiaomi-token-plan-cn.d.ts +6 -0
- package/dist/types/registry/xiaomi-token-plan-sgp.d.ts +6 -0
- package/dist/types/registry/xiaomi.d.ts +6 -0
- package/dist/types/registry/zai.d.ts +15 -0
- package/dist/types/registry/zenmux.d.ts +7 -0
- package/dist/types/registry/zhipu-coding-plan.d.ts +7 -0
- package/dist/types/stream.d.ts +46 -0
- package/dist/types/types.d.ts +1064 -0
- package/dist/types/usage/alibaba-token-plan.d.ts +3 -0
- package/dist/types/usage/claude.d.ts +4 -0
- package/dist/types/usage/cursor.d.ts +4 -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 +15 -0
- package/dist/types/usage/kimi.d.ts +2 -0
- package/dist/types/usage/minimax-code.d.ts +3 -0
- package/dist/types/usage/ollama.d.ts +5 -0
- package/dist/types/usage/openai-codex-base-url.d.ts +18 -0
- package/dist/types/usage/openai-codex-reset.d.ts +88 -0
- package/dist/types/usage/openai-codex.d.ts +10 -0
- package/dist/types/usage/opencode-go.d.ts +2 -0
- package/dist/types/usage/shared.d.ts +1 -0
- package/dist/types/usage/synthetic.d.ts +2 -0
- package/dist/types/usage/umans.d.ts +2 -0
- package/dist/types/usage/xai-oauth.d.ts +12 -0
- package/dist/types/usage/zai.d.ts +3 -0
- package/dist/types/usage.d.ts +527 -0
- package/dist/types/utils/abort.d.ts +25 -0
- package/dist/types/utils/anthropic-auth.d.ts +35 -0
- package/dist/types/utils/aws-profile.d.ts +17 -0
- package/dist/types/utils/block-symbols.d.ts +62 -0
- package/dist/types/utils/deterministic-id.d.ts +16 -0
- package/dist/types/utils/empty-completion-retry.d.ts +21 -0
- package/dist/types/utils/event-stream.d.ts +39 -0
- package/dist/types/utils/foundry.d.ts +1 -0
- package/dist/types/utils/google-validation.d.ts +2 -0
- package/dist/types/utils/harmony-leak.d.ts +135 -0
- package/dist/types/utils/http-inspector.d.ts +49 -0
- package/dist/types/utils/idle-iterator.d.ts +149 -0
- package/dist/types/utils/leaked-thinking-stream.d.ts +33 -0
- package/dist/types/utils/openai-http.d.ts +48 -0
- package/dist/types/utils/openrouter-headers.d.ts +1 -0
- package/dist/types/utils/parse-bind.d.ts +23 -0
- package/dist/types/utils/provider-response.d.ts +3 -0
- package/dist/types/utils/proxy.d.ts +39 -0
- package/dist/types/utils/request-debug.d.ts +29 -0
- package/dist/types/utils/retry-after.d.ts +4 -0
- package/dist/types/utils/retry.d.ts +14 -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 +54 -0
- package/dist/types/utils/schema/index.d.ts +14 -0
- package/dist/types/utils/schema/json-schema-validator.d.ts +20 -0
- package/dist/types/utils/schema/meta-validator.d.ts +2 -0
- package/dist/types/utils/schema/normalize.d.ts +153 -0
- package/dist/types/utils/schema/spill.d.ts +8 -0
- package/dist/types/utils/schema/stamps.d.ts +17 -0
- package/dist/types/utils/schema/strict-tool-validation.d.ts +16 -0
- package/dist/types/utils/schema/types.d.ts +4 -0
- package/dist/types/utils/schema/typescript.d.ts +24 -0
- package/dist/types/utils/schema/wire.d.ts +52 -0
- package/dist/types/utils/sdk-stream-timeout.d.ts +33 -0
- package/dist/types/utils/sse-debug.d.ts +5 -0
- package/dist/types/utils/stream-markup-healing.d.ts +87 -0
- package/dist/types/utils/thinking-loop.d.ts +102 -0
- package/dist/types/utils/tool-call-loop-guard.d.ts +26 -0
- package/dist/types/utils/tool-choice.d.ts +52 -0
- package/dist/types/utils/validation.d.ts +28 -0
- package/dist/types/utils.d.ts +57 -0
- package/package.json +138 -0
- package/src/api-registry.ts +109 -0
- package/src/auth/sqlite-credential-store.ts +2066 -0
- package/src/auth-broker/client.ts +471 -0
- package/src/auth-broker/discover.ts +310 -0
- package/src/auth-broker/index.ts +7 -0
- package/src/auth-broker/refresher.ts +117 -0
- package/src/auth-broker/remote-store.ts +1332 -0
- package/src/auth-broker/server.ts +898 -0
- package/src/auth-broker/snapshot-cache.ts +200 -0
- package/src/auth-broker/types.ts +193 -0
- package/src/auth-broker/wire-schema-resource.ts +487 -0
- package/src/auth-broker/wire-schemas.ts +43 -0
- package/src/auth-gateway/http.ts +227 -0
- package/src/auth-gateway/index.ts +3 -0
- package/src/auth-gateway/server.ts +836 -0
- package/src/auth-gateway/types.ts +153 -0
- package/src/auth-retry.ts +401 -0
- package/src/auth-storage.ts +6540 -0
- package/src/dialect/anthropic.md +31 -0
- package/src/dialect/anthropic.ts +608 -0
- package/src/dialect/catalog.ts +29 -0
- package/src/dialect/coercion.ts +136 -0
- package/src/dialect/deepseek.md +24 -0
- package/src/dialect/deepseek.ts +609 -0
- package/src/dialect/demotion.ts +40 -0
- package/src/dialect/examples.ts +71 -0
- package/src/dialect/factory.ts +34 -0
- package/src/dialect/fenced-thinking.ts +184 -0
- package/src/dialect/gemini.md +44 -0
- package/src/dialect/gemini.ts +583 -0
- package/src/dialect/gemma.md +33 -0
- package/src/dialect/gemma.ts +387 -0
- package/src/dialect/glm.md +32 -0
- package/src/dialect/glm.ts +579 -0
- package/src/dialect/harmony.md +31 -0
- package/src/dialect/harmony.ts +345 -0
- package/src/dialect/hermes.md +25 -0
- package/src/dialect/hermes.ts +206 -0
- package/src/dialect/history.ts +81 -0
- package/src/dialect/index.ts +15 -0
- package/src/dialect/inventory.ts +30 -0
- package/src/dialect/kimi.md +24 -0
- package/src/dialect/kimi.ts +340 -0
- package/src/dialect/minimax.md +31 -0
- package/src/dialect/minimax.ts +95 -0
- package/src/dialect/owned-stream.ts +481 -0
- package/src/dialect/prompt-template.md +12 -0
- package/src/dialect/qwen3.md +28 -0
- package/src/dialect/qwen3.ts +240 -0
- package/src/dialect/rendering.ts +304 -0
- package/src/dialect/thinking.ts +292 -0
- package/src/dialect/types.ts +56 -0
- package/src/dialect/xml.md +22 -0
- package/src/dialect/xml.ts +90 -0
- package/src/error/abort.ts +18 -0
- package/src/error/auth-classify.ts +47 -0
- package/src/error/auth.ts +48 -0
- package/src/error/aws.ts +35 -0
- package/src/error/classes.ts +281 -0
- package/src/error/finalize.ts +69 -0
- package/src/error/flags.ts +602 -0
- package/src/error/format.ts +45 -0
- package/src/error/gateway.ts +96 -0
- package/src/error/index.ts +14 -0
- package/src/error/oauth.ts +58 -0
- package/src/error/provider.ts +63 -0
- package/src/error/rate-limit.ts +303 -0
- package/src/error/retryable.ts +70 -0
- package/src/error/validation.ts +44 -0
- package/src/index.ts +51 -0
- package/src/provider-details.ts +90 -0
- package/src/providers/amazon-bedrock.ts +1064 -0
- package/src/providers/anthropic-client.ts +317 -0
- package/src/providers/anthropic-messages-server-schema.ts +252 -0
- package/src/providers/anthropic-messages-server.ts +818 -0
- package/src/providers/anthropic-wire.ts +359 -0
- package/src/providers/anthropic.ts +4539 -0
- package/src/providers/aws-credentials.ts +772 -0
- package/src/providers/aws-eventstream.ts +181 -0
- package/src/providers/aws-sigv4.ts +218 -0
- package/src/providers/azure-openai-responses.ts +438 -0
- package/src/providers/bedrock-mantle.ts +110 -0
- package/src/providers/claude-code-fingerprint.ts +20 -0
- package/src/providers/cowork-fetch.ts +201 -0
- package/src/providers/cursor/exec-modern.ts +496 -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.ts +165 -0
- package/src/providers/cursor.ts +4689 -0
- package/src/providers/devin/proto/buf/validate/validate.proto +468 -0
- package/src/providers/devin/proto/buf.gen.yaml +33 -0
- package/src/providers/devin/proto/buf.yaml +17 -0
- package/src/providers/devin/proto/cel/expr/checked.proto +103 -0
- package/src/providers/devin/proto/cel/expr/eval.proto +38 -0
- package/src/providers/devin/proto/cel/expr/explain.proto +15 -0
- package/src/providers/devin/proto/cel/expr/syntax.proto +113 -0
- package/src/providers/devin/proto/cel/expr/value.proto +41 -0
- package/src/providers/devin/proto/connectext/grpc/status/v1/status.proto +11 -0
- package/src/providers/devin/proto/errorspb/errors.proto +56 -0
- package/src/providers/devin/proto/errorspb/hintdetail.proto +7 -0
- package/src/providers/devin/proto/errorspb/markers.proto +10 -0
- package/src/providers/devin/proto/errorspb/tags.proto +12 -0
- package/src/providers/devin/proto/errorspb/testing.proto +6 -0
- package/src/providers/devin/proto/exa/analytics_pb/analytics.proto +188 -0
- package/src/providers/devin/proto/exa/api_server_pb/api_server.proto +2461 -0
- package/src/providers/devin/proto/exa/auth_pb/auth.proto +19 -0
- package/src/providers/devin/proto/exa/auto_cascade_common_pb/auto_cascade_common.proto +79 -0
- package/src/providers/devin/proto/exa/browser_preview_pb/browser_preview.proto +32 -0
- package/src/providers/devin/proto/exa/bug_checker_pb/bug_checker.proto +22 -0
- package/src/providers/devin/proto/exa/cascade_plugins_pb/cascade_plugins.proto +262 -0
- package/src/providers/devin/proto/exa/chat_client_server_pb/chat_client_server.proto +57 -0
- package/src/providers/devin/proto/exa/chat_pb/chat.proto +449 -0
- package/src/providers/devin/proto/exa/code_edit/code_edit_pb/code_edit.proto +186 -0
- package/src/providers/devin/proto/exa/codeium_common_pb/codeium_common.proto +4157 -0
- package/src/providers/devin/proto/exa/context_module_pb/context_module.proto +175 -0
- package/src/providers/devin/proto/exa/cortex_pb/cortex.proto +3268 -0
- package/src/providers/devin/proto/exa/dev_pb/dev.proto +26 -0
- package/src/providers/devin/proto/exa/diff_action_pb/diff_action.proto +75 -0
- package/src/providers/devin/proto/exa/eval/pr_eval/datasets_pb/datasets.proto +103 -0
- package/src/providers/devin/proto/exa/eval_pb/eval.proto +1315 -0
- package/src/providers/devin/proto/exa/extension_server_pb/extension_server.proto +556 -0
- package/src/providers/devin/proto/exa/file_system_provider_pb/file_system_provider.proto +75 -0
- package/src/providers/devin/proto/exa/index_pb/index.proto +461 -0
- package/src/providers/devin/proto/exa/knowledge_base_pb/knowledge_base.proto +144 -0
- package/src/providers/devin/proto/exa/language_server_pb/language_server.proto +2385 -0
- package/src/providers/devin/proto/exa/model_management_pb/model_management.proto +186 -0
- package/src/providers/devin/proto/exa/opensearch_clients_pb/opensearch_clients.proto +503 -0
- package/src/providers/devin/proto/exa/product_analytics_pb/product_analytics.proto +37 -0
- package/src/providers/devin/proto/exa/prompt_pb/prompt.proto +92 -0
- package/src/providers/devin/proto/exa/reactive_component_pb/reactive_component.proto +96 -0
- package/src/providers/devin/proto/exa/seat_management_pb/seat_management.proto +2680 -0
- package/src/providers/devin/proto/exa/tokenizer_pb/tokenizer.proto +37 -0
- package/src/providers/devin/proto/exa/trainer_pb/config.proto +647 -0
- package/src/providers/devin/proto/exa/tree_sitter/language_data_pb/language_data.proto +14 -0
- package/src/providers/devin/proto/exa/trust_pb/trust.proto +157 -0
- package/src/providers/devin/proto/exa/user_analytics_pb/user_analytics.proto +519 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/base/api_base.proto +28 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/datastore/datastore_v3.proto +484 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/log/log_service.proto +136 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/remote_api/remote_api.proto +42 -0
- package/src/providers/devin/proto/google.golang.org/appengine/internal/urlfetch/urlfetch_service.proto +61 -0
- package/src/providers/devin/proto/grpc/binlog/v1/binarylog.proto +84 -0
- package/src/providers/devin/proto/io/prometheus/client/metrics.proto +98 -0
- package/src/providers/devin.ts +679 -0
- package/src/providers/error-message.ts +23 -0
- package/src/providers/github-copilot-headers.ts +141 -0
- package/src/providers/gitlab-duo-workflow-chatml-note.md +1 -0
- package/src/providers/gitlab-duo-workflow.ts +3135 -0
- package/src/providers/gitlab-duo.ts +399 -0
- package/src/providers/google-auth.ts +330 -0
- package/src/providers/google-gemini-cli.ts +1370 -0
- package/src/providers/google-shared.ts +1122 -0
- package/src/providers/google-types.ts +180 -0
- package/src/providers/google-vertex.ts +135 -0
- package/src/providers/google.ts +47 -0
- package/src/providers/grammar.ts +70 -0
- package/src/providers/kimi.ts +51 -0
- package/src/providers/mock.ts +514 -0
- package/src/providers/ollama.ts +776 -0
- package/src/providers/openai-anthropic-shim.ts +166 -0
- package/src/providers/openai-chat-server-schema.ts +243 -0
- package/src/providers/openai-chat-server.ts +752 -0
- package/src/providers/openai-chat-wire.ts +859 -0
- package/src/providers/openai-codex/request-transformer.ts +491 -0
- package/src/providers/openai-codex/response-handler.ts +102 -0
- package/src/providers/openai-codex-responses.ts +4716 -0
- package/src/providers/openai-completions.ts +2389 -0
- package/src/providers/openai-reasoning-fallback.ts +269 -0
- package/src/providers/openai-responses-server-schema.ts +397 -0
- package/src/providers/openai-responses-server.ts +1466 -0
- package/src/providers/openai-responses-wire.ts +6416 -0
- package/src/providers/openai-responses.ts +1393 -0
- package/src/providers/openai-shared.ts +3500 -0
- package/src/providers/pi-native-client.ts +275 -0
- package/src/providers/pi-native-server.ts +245 -0
- package/src/providers/register-builtins.ts +503 -0
- package/src/providers/synthetic.ts +50 -0
- package/src/providers/transform-messages.ts +1083 -0
- package/src/providers/vision-guard.ts +54 -0
- package/src/registry/aiand.ts +22 -0
- package/src/registry/aimlapi.ts +6 -0
- package/src/registry/alibaba-coding-plan.ts +104 -0
- package/src/registry/alibaba-token-plan.ts +125 -0
- package/src/registry/amazon-bedrock.ts +22 -0
- package/src/registry/anthropic.ts +26 -0
- package/src/registry/api-key-login.ts +115 -0
- package/src/registry/api-key-validation.ts +145 -0
- package/src/registry/aws.ts +57 -0
- package/src/registry/azure.ts +6 -0
- package/src/registry/baseten.ts +22 -0
- package/src/registry/bedrock-mantle.ts +34 -0
- package/src/registry/cerebras.ts +23 -0
- package/src/registry/cloudflare-ai-gateway.ts +45 -0
- package/src/registry/coreweave.ts +40 -0
- package/src/registry/cursor.ts +20 -0
- package/src/registry/deepseek.ts +46 -0
- package/src/registry/derived.ts +9 -0
- package/src/registry/devin.ts +15 -0
- package/src/registry/exa.ts +19 -0
- package/src/registry/firepass.ts +32 -0
- package/src/registry/fireworks.ts +28 -0
- package/src/registry/github-copilot.ts +22 -0
- package/src/registry/gitlab-duo-workflow.ts +20 -0
- package/src/registry/gitlab-duo.ts +19 -0
- package/src/registry/gmi-cloud.ts +22 -0
- package/src/registry/google-antigravity.ts +22 -0
- package/src/registry/google-gemini-cli.ts +22 -0
- package/src/registry/google-vertex.ts +38 -0
- package/src/registry/google.ts +6 -0
- package/src/registry/groq.ts +6 -0
- package/src/registry/huggingface.ts +29 -0
- package/src/registry/index.ts +4 -0
- package/src/registry/kagi.ts +46 -0
- package/src/registry/kilo.ts +114 -0
- package/src/registry/kimi-code.ts +17 -0
- package/src/registry/litellm.ts +45 -0
- package/src/registry/llama-cpp.ts +35 -0
- package/src/registry/lm-studio.ts +31 -0
- package/src/registry/meta.ts +22 -0
- package/src/registry/minimax-code-cn.ts +12 -0
- package/src/registry/minimax-code.ts +12 -0
- package/src/registry/minimax.ts +6 -0
- package/src/registry/mistral.ts +6 -0
- package/src/registry/moonshot.ts +28 -0
- package/src/registry/nanogpt.ts +22 -0
- package/src/registry/novita.ts +25 -0
- package/src/registry/nvidia.ts +61 -0
- package/src/registry/oauth/anthropic-constants.ts +12 -0
- package/src/registry/oauth/anthropic.ts +346 -0
- package/src/registry/oauth/callback-server.ts +438 -0
- package/src/registry/oauth/cursor.ts +187 -0
- package/src/registry/oauth/device-code.ts +92 -0
- package/src/registry/oauth/devin.ts +124 -0
- package/src/registry/oauth/github-copilot.ts +369 -0
- package/src/registry/oauth/gitlab-duo-workflow.ts +146 -0
- package/src/registry/oauth/gitlab-duo.ts +222 -0
- package/src/registry/oauth/google-antigravity.ts +225 -0
- package/src/registry/oauth/google-gemini-cli.ts +297 -0
- package/src/registry/oauth/google-oauth-shared.ts +211 -0
- package/src/registry/oauth/index.ts +187 -0
- package/src/registry/oauth/kimi.ts +297 -0
- package/src/registry/oauth/minimax-code.ts +53 -0
- package/src/registry/oauth/oauth.html +317 -0
- package/src/registry/oauth/openai-codex.ts +384 -0
- package/src/registry/oauth/opencode.ts +50 -0
- package/src/registry/oauth/perplexity.ts +228 -0
- package/src/registry/oauth/pkce.ts +18 -0
- package/src/registry/oauth/types.ts +96 -0
- package/src/registry/oauth/wafer.ts +24 -0
- package/src/registry/oauth/xai-oauth.ts +559 -0
- package/src/registry/oauth/xiaomi.ts +211 -0
- package/src/registry/oauth/zai.ts +285 -0
- package/src/registry/ollama-cloud.ts +36 -0
- package/src/registry/ollama.ts +43 -0
- package/src/registry/openai-codex-device.ts +18 -0
- package/src/registry/openai-codex.ts +19 -0
- package/src/registry/openai.ts +6 -0
- package/src/registry/opencode-go.ts +12 -0
- package/src/registry/opencode-zen.ts +12 -0
- package/src/registry/openrouter.ts +28 -0
- package/src/registry/parallel.ts +45 -0
- package/src/registry/perplexity.ts +13 -0
- package/src/registry/qianfan.ts +27 -0
- package/src/registry/qwen-portal.ts +50 -0
- package/src/registry/registry.ts +182 -0
- package/src/registry/sakana.ts +22 -0
- package/src/registry/siliconflow-cn.ts +22 -0
- package/src/registry/siliconflow.ts +22 -0
- package/src/registry/synthetic.ts +21 -0
- package/src/registry/tavily.ts +45 -0
- package/src/registry/together.ts +22 -0
- package/src/registry/types.ts +86 -0
- package/src/registry/umans.ts +23 -0
- package/src/registry/venice.ts +33 -0
- package/src/registry/vercel-ai-gateway.ts +38 -0
- package/src/registry/vllm.ts +34 -0
- package/src/registry/wafer-serverless.ts +12 -0
- package/src/registry/xai-oauth.ts +17 -0
- package/src/registry/xai.ts +22 -0
- package/src/registry/xiaomi-token-plan-ams.ts +12 -0
- package/src/registry/xiaomi-token-plan-cn.ts +12 -0
- package/src/registry/xiaomi-token-plan-sgp.ts +12 -0
- package/src/registry/xiaomi.ts +12 -0
- package/src/registry/zai.ts +41 -0
- package/src/registry/zenmux.ts +22 -0
- package/src/registry/zhipu-coding-plan.ts +27 -0
- package/src/stream.ts +1944 -0
- package/src/types.ts +1243 -0
- package/src/usage/alibaba-token-plan.ts +230 -0
- package/src/usage/claude.ts +830 -0
- package/src/usage/cursor.ts +335 -0
- package/src/usage/gemini.ts +258 -0
- package/src/usage/github-copilot.ts +424 -0
- package/src/usage/google-antigravity.ts +497 -0
- package/src/usage/kimi.ts +277 -0
- package/src/usage/minimax-code.ts +291 -0
- package/src/usage/ollama.ts +41 -0
- package/src/usage/openai-codex-base-url.ts +35 -0
- package/src/usage/openai-codex-reset.ts +205 -0
- package/src/usage/openai-codex.ts +627 -0
- package/src/usage/opencode-go.ts +89 -0
- package/src/usage/shared.ts +10 -0
- package/src/usage/synthetic.ts +180 -0
- package/src/usage/umans.ts +192 -0
- package/src/usage/xai-oauth.ts +414 -0
- package/src/usage/zai.ts +370 -0
- package/src/usage.ts +411 -0
- package/src/utils/abort.ts +67 -0
- package/src/utils/anthropic-auth.ts +93 -0
- package/src/utils/aws-profile.ts +88 -0
- package/src/utils/block-symbols.ts +78 -0
- package/src/utils/deterministic-id.ts +20 -0
- package/src/utils/empty-completion-retry.ts +161 -0
- package/src/utils/event-stream.ts +202 -0
- package/src/utils/foundry.ts +8 -0
- package/src/utils/google-validation.ts +25 -0
- package/src/utils/harmony-leak.ts +500 -0
- package/src/utils/http-inspector.ts +196 -0
- package/src/utils/idle-iterator.ts +531 -0
- package/src/utils/leaked-thinking-stream.ts +483 -0
- package/src/utils/openai-http.ts +119 -0
- package/src/utils/openrouter-headers.ts +12 -0
- package/src/utils/parse-bind.ts +56 -0
- package/src/utils/provider-response.ts +30 -0
- package/src/utils/proxy.ts +314 -0
- package/src/utils/request-debug.ts +351 -0
- package/src/utils/retry-after.ts +121 -0
- package/src/utils/retry.ts +77 -0
- package/src/utils/schema/CONSTRAINTS.md +168 -0
- package/src/utils/schema/adapt.ts +36 -0
- package/src/utils/schema/compatibility.ts +435 -0
- package/src/utils/schema/dereference.ts +98 -0
- package/src/utils/schema/draft.ts +341 -0
- package/src/utils/schema/equality.ts +97 -0
- package/src/utils/schema/fields.ts +210 -0
- package/src/utils/schema/index.ts +14 -0
- package/src/utils/schema/json-schema-validator.ts +595 -0
- package/src/utils/schema/meta-validator.ts +167 -0
- package/src/utils/schema/normalize.ts +2314 -0
- package/src/utils/schema/spill.ts +43 -0
- package/src/utils/schema/stamps.ts +109 -0
- package/src/utils/schema/strict-tool-validation.ts +117 -0
- package/src/utils/schema/types.ts +10 -0
- package/src/utils/schema/typescript.ts +212 -0
- package/src/utils/schema/wire.ts +662 -0
- package/src/utils/sdk-stream-timeout.ts +43 -0
- package/src/utils/sse-debug.ts +18 -0
- package/src/utils/stream-markup-healing.ts +247 -0
- package/src/utils/thinking-loop.ts +552 -0
- package/src/utils/tool-call-loop-guard.ts +107 -0
- package/src/utils/tool-choice.ts +101 -0
- package/src/utils/validation.ts +1932 -0
- package/src/utils.ts +492 -0
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `application/vnd.amazon.eventstream` decoder.
|
|
3
|
+
*
|
|
4
|
+
* Wire format (all integers big-endian):
|
|
5
|
+
*
|
|
6
|
+
* [total length u32]
|
|
7
|
+
* [headers length u32]
|
|
8
|
+
* [prelude CRC32 u32] <- CRC over the first 8 bytes
|
|
9
|
+
* [headers headers_length]
|
|
10
|
+
* [payload total_length - headers_length - 16]
|
|
11
|
+
* [message CRC32 u32] <- CRC over the entire message minus the trailing 4 bytes
|
|
12
|
+
*
|
|
13
|
+
* Headers: a sequence of `[name_len u8][name utf8][value_type u8][value …]`.
|
|
14
|
+
* We only need the typed values Bedrock emits (boolean true/false, byte, short,
|
|
15
|
+
* integer, long, byte-array, string, timestamp, uuid). All are surfaced as
|
|
16
|
+
* strings for ease of consumption — Bedrock only sets string-valued headers in
|
|
17
|
+
* practice (`:event-type`, `:message-type`, `:content-type`, `:exception-type`).
|
|
18
|
+
*/
|
|
19
|
+
export interface EventStreamMessage {
|
|
20
|
+
/** Lower-cased copy is *not* applied — Bedrock uses casing like `:event-type` verbatim. */
|
|
21
|
+
headers: Record<string, string>;
|
|
22
|
+
payload: Uint8Array;
|
|
23
|
+
}
|
|
24
|
+
/** CRC32 (IEEE / zlib polynomial 0xEDB88320), matches `@aws-crypto/crc32`. */
|
|
25
|
+
export declare function crc32(bytes: Uint8Array): number;
|
|
26
|
+
/**
|
|
27
|
+
* Decode a single, fully buffered eventstream message. Throws if the framing is
|
|
28
|
+
* malformed or either CRC mismatches. Used by both `decodeEventStream` (the
|
|
29
|
+
* streaming entry point) and the unit tests, which exercise it with hand-built
|
|
30
|
+
* frames.
|
|
31
|
+
*/
|
|
32
|
+
export declare function decodeMessage(frame: Uint8Array): EventStreamMessage;
|
|
33
|
+
/**
|
|
34
|
+
* Async generator that consumes a `ReadableStream<Uint8Array>` (e.g. a fetch
|
|
35
|
+
* response body) and yields fully-framed messages. Handles arbitrary chunk
|
|
36
|
+
* boundaries: messages may span multiple chunks, and a single chunk may carry
|
|
37
|
+
* many messages.
|
|
38
|
+
*/
|
|
39
|
+
export declare function decodeEventStream(source: ReadableStream<Uint8Array>): AsyncGenerator<EventStreamMessage>;
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS Signature V4 signing for HTTP requests. WebCrypto-only — no node:crypto.
|
|
3
|
+
*
|
|
4
|
+
* Matches `@smithy/signature-v4` for our usage: header-based signing with a
|
|
5
|
+
* full SHA-256 payload hash (Bedrock requires `applyChecksum: true`).
|
|
6
|
+
*
|
|
7
|
+
* Returns the set of headers to attach to the request:
|
|
8
|
+
* - `host`
|
|
9
|
+
* - `x-amz-date`
|
|
10
|
+
* - `x-amz-content-sha256`
|
|
11
|
+
* - `x-amz-security-token` (only when credentials carry a sessionToken)
|
|
12
|
+
* - `authorization`
|
|
13
|
+
*/
|
|
14
|
+
export interface AwsCredentials {
|
|
15
|
+
accessKeyId: string;
|
|
16
|
+
secretAccessKey: string;
|
|
17
|
+
sessionToken?: string;
|
|
18
|
+
}
|
|
19
|
+
export interface SignParams {
|
|
20
|
+
method: string;
|
|
21
|
+
/** Hostname only — used to build the `host` header and the canonical request. */
|
|
22
|
+
host: string;
|
|
23
|
+
/** URI path component, e.g. `/model/anthropic.claude/converse-stream`. */
|
|
24
|
+
path: string;
|
|
25
|
+
/** Optional pre-built query string (without leading `?`). */
|
|
26
|
+
query?: string;
|
|
27
|
+
/** Extra headers to sign in addition to `host`/`x-amz-*`. Names are case-insensitive. */
|
|
28
|
+
headers?: Record<string, string>;
|
|
29
|
+
body: Uint8Array;
|
|
30
|
+
region: string;
|
|
31
|
+
service: string;
|
|
32
|
+
credentials: AwsCredentials;
|
|
33
|
+
/** Override clock for deterministic tests. */
|
|
34
|
+
date?: Date;
|
|
35
|
+
}
|
|
36
|
+
export declare function toHex(bytes: Uint8Array): string;
|
|
37
|
+
export declare function sha256(data: Uint8Array | string): Promise<Uint8Array>;
|
|
38
|
+
export declare function sha256Hex(data: Uint8Array | string): Promise<string>;
|
|
39
|
+
/**
|
|
40
|
+
* Derive a signing key: HMAC chain `kSecret → kDate → kRegion → kService → kSigning`.
|
|
41
|
+
*/
|
|
42
|
+
export declare function getSigningKey(secretAccessKey: string, shortDate: string, region: string, service: string): Promise<Uint8Array>;
|
|
43
|
+
/** `YYYYMMDDTHHMMSSZ` + 8-char `YYYYMMDD`. */
|
|
44
|
+
export declare function formatAmzDate(d: Date): {
|
|
45
|
+
longDate: string;
|
|
46
|
+
shortDate: string;
|
|
47
|
+
};
|
|
48
|
+
export interface SignedHeaders {
|
|
49
|
+
host: string;
|
|
50
|
+
"x-amz-date": string;
|
|
51
|
+
"x-amz-content-sha256": string;
|
|
52
|
+
authorization: string;
|
|
53
|
+
"x-amz-security-token"?: string;
|
|
54
|
+
}
|
|
55
|
+
export declare function signRequest(params: SignParams): Promise<SignedHeaders>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { ServiceTier, StreamFunction, StreamOptions, ToolChoice } from "../types.js";
|
|
2
|
+
export { parseAzureDeploymentNameMap } from "./openai-shared.js";
|
|
3
|
+
export interface AzureOpenAIResponsesOptions extends StreamOptions {
|
|
4
|
+
reasoning?: "minimal" | "low" | "medium" | "high" | "xhigh" | "max";
|
|
5
|
+
reasoningSummary?: "auto" | "detailed" | "concise" | null;
|
|
6
|
+
azureApiVersion?: string;
|
|
7
|
+
azureResourceName?: string;
|
|
8
|
+
azureBaseUrl?: string;
|
|
9
|
+
azureDeploymentName?: string;
|
|
10
|
+
toolChoice?: ToolChoice;
|
|
11
|
+
serviceTier?: ServiceTier;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Generate function for Azure OpenAI Responses API
|
|
15
|
+
*/
|
|
16
|
+
export declare const streamAzureOpenAIResponses: StreamFunction<"azure-openai-responses">;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { type AwsBedrockProviderOptions } from "../registry/aws.js";
|
|
2
|
+
import type { FetchImpl, Model } from "../types.js";
|
|
3
|
+
import type { OpenAIResponsesOptions } from "./openai-responses.js";
|
|
4
|
+
export type BedrockMantleProviderOptions = AwsBedrockProviderOptions;
|
|
5
|
+
export interface BedrockMantleOptions extends OpenAIResponsesOptions {
|
|
6
|
+
providerOptions?: BedrockMantleProviderOptions;
|
|
7
|
+
}
|
|
8
|
+
export declare function createBedrockMantleAuthenticatedFetch(options?: BedrockMantleOptions): FetchImpl;
|
|
9
|
+
export interface PreparedBedrockMantleRequest {
|
|
10
|
+
model: Model<"openai-responses">;
|
|
11
|
+
options: OpenAIResponsesOptions;
|
|
12
|
+
}
|
|
13
|
+
export declare function prepareBedrockMantleRequest(model: Model<"openai-responses">, options: BedrockMantleOptions): PreparedBedrockMantleRequest;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Cowork inference-fingerprint constants, kept in a leaf module so consumers
|
|
3
|
+
* outside the provider (`registry/oauth/anthropic`, `usage/claude`) don't
|
|
4
|
+
* import the heavy `providers/anthropic` module.
|
|
5
|
+
*
|
|
6
|
+
* That import edge was a live init cycle: `providers/anthropic` → `stream` →
|
|
7
|
+
* `registry` → `registry/oauth/anthropic` → back into the still-initializing
|
|
8
|
+
* provider module.
|
|
9
|
+
*/
|
|
10
|
+
/** Claude runtime version bundled by the current Cowork desktop release. */
|
|
11
|
+
export declare const claudeCodeVersion = "2.1.220";
|
|
12
|
+
/** User-Agent emitted by Cowork's `claude-desktop` inference entrypoint. */
|
|
13
|
+
export declare const coworkUserAgent = "claude-cli/2.1.220 (external, claude-desktop)";
|
|
14
|
+
/** Prefix used to isolate custom Anthropic OAuth tools from built-in tools. */
|
|
15
|
+
export declare const claudeToolPrefix: string;
|
|
16
|
+
/** Identity block prepended by Cowork's Claude runtime. */
|
|
17
|
+
export declare const claudeCodeSystemInstruction = "You are a Claude agent, built on Anthropic's Claude Agent SDK.";
|
|
18
|
+
/** Cowork's per-request output-token ceiling. */
|
|
19
|
+
export declare const CLAUDE_CODE_MAX_OUTPUT_TOKENS = 64000;
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Proto builders for the modern Cursor CLI exec frames (`ExecServerMessage`
|
|
3
|
+
* 27-31, 36-38, 40-55).
|
|
4
|
+
*
|
|
5
|
+
* Split out of `cursor.ts` because these are pure `create(...)` shapes with no
|
|
6
|
+
* transport, stream, or block-state coupling: the dispatcher decides *which*
|
|
7
|
+
* answer a frame gets, this module knows *what* that answer looks like on the
|
|
8
|
+
* wire. Every builder returns a result whose oneof case is set — an
|
|
9
|
+
* `ExecClientMessage` carrying a result with an unset oneof is a fake success
|
|
10
|
+
* the server reads as "the tool ran and produced nothing".
|
|
11
|
+
*/
|
|
12
|
+
import { type ExecuteHookRequest, type ExecuteHookResult, type McpStateExecResult, type McpToolDefinition, type PiBashExecResult, type PiEditExecResult, type PiFindExecResult, type PiGrepExecResult, type PiLsExecResult, type PiReadExecResult, type PiTruncation, type PiWriteExecResult } from "@linxiraos/pi-catalog/discovery/cursor-gen/agent_pb";
|
|
13
|
+
import type { ToolResultMessage } from "../../types.js";
|
|
14
|
+
/**
|
|
15
|
+
* The pure arg translation lives in `../cursor-pi-args` so the legacy pi shim
|
|
16
|
+
* can share it without pulling this module's protobuf graph into the bundled
|
|
17
|
+
* virtual registry. Re-exported here because this is where the frame builders
|
|
18
|
+
* and their translation are consumed together.
|
|
19
|
+
*/
|
|
20
|
+
export { piEscapeRegexLiteral, piGrepSkip, piJoinPath, piLimit, piLsPath, piReadDisplayPath, piReadPath, piReadPathHasRange, piTimeout, } from "../cursor-pi-args.js";
|
|
21
|
+
/** Flatten a tool result's content into the single `output` string the Pi frames carry. */
|
|
22
|
+
export declare function piOutputText(toolResult: ToolResultMessage): string;
|
|
23
|
+
/**
|
|
24
|
+
* Translate a local tool's truncation summary into `PiTruncation`.
|
|
25
|
+
*
|
|
26
|
+
* Two shapes reach here. `read`/`grep` set `details.truncation`
|
|
27
|
+
* (`TruncationResult`), which carries an explicit `truncated` boolean. `bash`
|
|
28
|
+
* sets `details.meta.truncation` (`TruncationMeta`), which has **no** such
|
|
29
|
+
* flag — its presence *is* the signal, and requiring the boolean silently
|
|
30
|
+
* dropped every Bash truncation, handing Cursor clipped output with no notice
|
|
31
|
+
* that it was clipped.
|
|
32
|
+
*
|
|
33
|
+
* Returns `undefined` when nothing was truncated: the field is `optional` on
|
|
34
|
+
* every Pi success message, and emitting a zeroed `PiTruncation` would tell the
|
|
35
|
+
* server the output was trimmed to nothing.
|
|
36
|
+
*/
|
|
37
|
+
export declare function piTruncation(toolResult: ToolResultMessage): PiTruncation | undefined;
|
|
38
|
+
export declare function buildPiReadResult(toolResult: ToolResultMessage): PiReadExecResult;
|
|
39
|
+
export declare function buildPiReadError(error: string): PiReadExecResult;
|
|
40
|
+
export declare function buildPiBashResult(toolResult: ToolResultMessage): PiBashExecResult;
|
|
41
|
+
export declare function buildPiBashError(error: string): PiBashExecResult;
|
|
42
|
+
/**
|
|
43
|
+
* `PiEditExecSuccess` requires `diff` and `patch` alongside `output`. The local
|
|
44
|
+
* `edit` tool reports them under `details`; when it does not, the strings stay
|
|
45
|
+
* empty rather than being faked from the output text.
|
|
46
|
+
*/
|
|
47
|
+
export declare function buildPiEditResult(toolResult: ToolResultMessage): PiEditExecResult;
|
|
48
|
+
export declare function buildPiEditError(error: string): PiEditExecResult;
|
|
49
|
+
/**
|
|
50
|
+
* A refusal is not an execution failure: `PiEditExecResult` models them as
|
|
51
|
+
* separate variants, and answering a denied call with `error` reads as "the
|
|
52
|
+
* edit ran and broke", which invites a retry of an operation that was never
|
|
53
|
+
* permitted.
|
|
54
|
+
*/
|
|
55
|
+
export declare function buildPiEditRejected(reason: string): PiEditExecResult;
|
|
56
|
+
export declare function buildPiWriteResult(toolResult: ToolResultMessage): PiWriteExecResult;
|
|
57
|
+
export declare function buildPiWriteError(error: string): PiWriteExecResult;
|
|
58
|
+
/** Same variant split as {@link buildPiEditRejected}. */
|
|
59
|
+
export declare function buildPiWriteRejected(reason: string): PiWriteExecResult;
|
|
60
|
+
export declare function buildPiGrepResult(toolResult: ToolResultMessage): PiGrepExecResult;
|
|
61
|
+
export declare function buildPiGrepError(error: string): PiGrepExecResult;
|
|
62
|
+
export declare function buildPiFindResult(toolResult: ToolResultMessage): PiFindExecResult;
|
|
63
|
+
export declare function buildPiFindError(error: string): PiFindExecResult;
|
|
64
|
+
export declare function buildPiLsResult(toolResult: ToolResultMessage): PiLsExecResult;
|
|
65
|
+
export declare function buildPiLsError(error: string): PiLsExecResult;
|
|
66
|
+
/**
|
|
67
|
+
* Answer `mcpStateExecArgs` (frame 36) from the catalog already advertised in
|
|
68
|
+
* `RequestContext.tools`.
|
|
69
|
+
*
|
|
70
|
+
* This client hosts no MCP servers of its own: every forwarded tool is a local
|
|
71
|
+
* pi-agent tool published under a synthetic `providerIdentifier`. Regrouping
|
|
72
|
+
* the same list keeps the server's view of "which servers exist and what do
|
|
73
|
+
* they expose" consistent with what it was told at context time, instead of
|
|
74
|
+
* claiming zero servers while tool calls for them keep arriving.
|
|
75
|
+
*
|
|
76
|
+
* `serverIdentifiers` filters the answer when the server asks about specific
|
|
77
|
+
* servers. `kickOnly` is a restart request — there is nothing to restart, so it
|
|
78
|
+
* is answered with the same state rather than an error.
|
|
79
|
+
*/
|
|
80
|
+
export declare function buildMcpStateResult(tools: McpToolDefinition[], serverIdentifiers: readonly string[]): McpStateExecResult;
|
|
81
|
+
/**
|
|
82
|
+
* Build the neutral response for a hook query: the matching response case with
|
|
83
|
+
* every field unset.
|
|
84
|
+
*
|
|
85
|
+
* This client runs no Cursor hooks, and every field of every response variant
|
|
86
|
+
* is `optional` — so an empty response of the right case means "no hook had
|
|
87
|
+
* anything to say", which is exactly true. It is NOT the unset-oneof fake
|
|
88
|
+
* success: the case itself is set, only the payload is empty.
|
|
89
|
+
*
|
|
90
|
+
* `ExecuteHookRequest` and `ExecuteHookResponse` are parallel oneofs whose case
|
|
91
|
+
* names line up, but the two unions are unrelated to the compiler: a `switch`
|
|
92
|
+
* is what makes each pairing individually type-checked, and it forces a
|
|
93
|
+
* deliberate branch when a future regen adds a request case.
|
|
94
|
+
*
|
|
95
|
+
* Returns `null` for a request case this build does not model, which the
|
|
96
|
+
* dispatcher answers with `ExecClientThrow` rather than guessing a case.
|
|
97
|
+
*/
|
|
98
|
+
export declare function buildNeutralHookResult(request: ExecuteHookRequest | undefined): ExecuteHookResult | null;
|
|
@@ -0,0 +1,105 @@
|
|
|
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;
|
|
@@ -0,0 +1,221 @@
|
|
|
1
|
+
import http2 from "node:http2";
|
|
2
|
+
import { type JsonValue } from "@bufbuild/protobuf";
|
|
3
|
+
import type { McpToolDefinition } from "@linxiraos/pi-catalog/discovery/cursor-gen/agent_pb";
|
|
4
|
+
import { type AgentServerMessage, type ConversationStateStructure } from "@linxiraos/pi-catalog/discovery/cursor-gen/agent_pb";
|
|
5
|
+
import type { AssistantMessage, CursorExecHandlerResult, CursorExecHandlers, CursorExecPairing, CursorTodoSyncHandler, CursorToolResultHandler, Message, StreamFunction, StreamOptions, TextContent, ThinkingContent, Tool, ToolCall, ToolResultMessage } from "../types.js";
|
|
6
|
+
import { kCursorExecResolved, kStreamingBlockIndex, kStreamingBlockKind, kStreamingEnvelopeId, kStreamingLastParseLen, kStreamingPartialJson } from "../utils/block-symbols.js";
|
|
7
|
+
import { AssistantMessageEventStream } from "../utils/event-stream.js";
|
|
8
|
+
export declare const CURSOR_API_URL = "https://api2.cursor.sh";
|
|
9
|
+
export declare const CURSOR_CLIENT_VERSION = "cli-2026.07.23-e383d2b";
|
|
10
|
+
export interface CursorOptions extends StreamOptions {
|
|
11
|
+
customSystemPrompt?: string;
|
|
12
|
+
conversationId?: string;
|
|
13
|
+
execHandlers?: CursorExecHandlers;
|
|
14
|
+
onToolResult?: CursorToolResultHandler;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Maps an opaque HTTP/2 negotiation failure into an actionable error.
|
|
18
|
+
*
|
|
19
|
+
* bun only opens an HTTP/2 session when TLS-ALPN negotiates `h2`. Behind a
|
|
20
|
+
* TLS-intercepting proxy that strips ALPN (e.g. Zscaler), the handshake yields
|
|
21
|
+
* no `h2` protocol and bun throws `ERR_HTTP2_ERROR: h2 is not supported`. The
|
|
22
|
+
* Cursor run RPC is HTTP/2-only (the ALB rejects HTTP/1.1 with 464), so there
|
|
23
|
+
* is no h1 fallback the way model discovery has one — the run simply cannot
|
|
24
|
+
* proceed. Replace the opaque message with one that names the cause and points
|
|
25
|
+
* at the `providers.cursor.baseUrl` workaround.
|
|
26
|
+
*
|
|
27
|
+
* Non-ALPN errors pass through untouched.
|
|
28
|
+
*/
|
|
29
|
+
export declare function mapH2TransportError(error: unknown, baseUrl: string): unknown;
|
|
30
|
+
export declare const streamCursor: StreamFunction<"cursor-agent">;
|
|
31
|
+
export type ToolCallState = ToolCall & {
|
|
32
|
+
[kStreamingBlockIndex]: number;
|
|
33
|
+
[kStreamingPartialJson]?: string;
|
|
34
|
+
[kStreamingLastParseLen]?: number;
|
|
35
|
+
[kStreamingBlockKind]: "mcp" | "todo" | "cursor-exec" | "connect-scm";
|
|
36
|
+
[kStreamingEnvelopeId]?: string;
|
|
37
|
+
[kCursorExecResolved]?: true;
|
|
38
|
+
};
|
|
39
|
+
export interface BlockState {
|
|
40
|
+
currentTextBlock: (TextContent & {
|
|
41
|
+
[kStreamingBlockIndex]: number;
|
|
42
|
+
}) | null;
|
|
43
|
+
currentThinkingBlock: (ThinkingContent & {
|
|
44
|
+
[kStreamingBlockIndex]: number;
|
|
45
|
+
}) | null;
|
|
46
|
+
currentToolCall: ToolCallState | null;
|
|
47
|
+
/**
|
|
48
|
+
* Open streamed tool-call blocks, keyed by the interaction envelope's
|
|
49
|
+
* `call_id`.
|
|
50
|
+
*
|
|
51
|
+
* Cursor interleaves calls: two `toolCallStarted` frames can arrive before
|
|
52
|
+
* either completes. A single "current" slot would let the second overwrite
|
|
53
|
+
* the first, orphaning a block that nothing then settles. Every keyed block
|
|
54
|
+
* stays reachable until its own completion, and `currentToolCall` remains
|
|
55
|
+
* only as the fallback for frames that carry no `call_id`.
|
|
56
|
+
*/
|
|
57
|
+
openToolCalls: Map<string, ToolCallState>;
|
|
58
|
+
/** MCP call IDs synthesized from exec frames before their redundant streamed block arrives. */
|
|
59
|
+
resolvedMcpToolCallIds: Set<string>;
|
|
60
|
+
firstTokenTime: number | undefined;
|
|
61
|
+
setTextBlock: (b: (TextContent & {
|
|
62
|
+
[kStreamingBlockIndex]: number;
|
|
63
|
+
}) | null) => void;
|
|
64
|
+
setThinkingBlock: (b: (ThinkingContent & {
|
|
65
|
+
[kStreamingBlockIndex]: number;
|
|
66
|
+
}) | null) => void;
|
|
67
|
+
setToolCall: (t: ToolCallState | null) => void;
|
|
68
|
+
setFirstTokenTime: () => void;
|
|
69
|
+
/** Mirror a server-confirmed todo snapshot into local session state. */
|
|
70
|
+
onTodoSnapshot?: CursorTodoSyncHandler;
|
|
71
|
+
/**
|
|
72
|
+
* Persist a paired `toolResult` for a server-resolved call. Native todo calls
|
|
73
|
+
* never travel the exec channel, so without this the resolved block has no
|
|
74
|
+
* matching result and every transcript rebuild strips it as dangling.
|
|
75
|
+
*/
|
|
76
|
+
onToolResult?: CursorToolResultHandler;
|
|
77
|
+
}
|
|
78
|
+
export interface UsageState {
|
|
79
|
+
sawTokenDelta: boolean;
|
|
80
|
+
}
|
|
81
|
+
/** Exported for tests: drives one Cursor server message through the stream (exec waits mark the stream busy). */
|
|
82
|
+
export declare function handleServerMessage(msg: AgentServerMessage, output: AssistantMessage, stream: AssistantMessageEventStream, state: BlockState, blobStore: Map<string, Uint8Array>, h2Request: http2.ClientHttp2Stream, execHandlers: CursorExecHandlers | undefined, onToolResult: CursorToolResultHandler | undefined, usageState: UsageState, requestContextTools: McpToolDefinition[], onConversationCheckpoint?: (checkpoint: ConversationStateStructure) => void): Promise<void>;
|
|
83
|
+
/**
|
|
84
|
+
* Exported for tests: verifies handler is invoked with correct `this` when passed as bound.
|
|
85
|
+
*
|
|
86
|
+
* Every exit pairs a `toolResult`. The synthesized block was already marked
|
|
87
|
+
* `kCursorExecResolved` before this runs (`synthesizeCursorExecToolCall`), so
|
|
88
|
+
* `agent-loop.ts` emits no placeholder for it: a path that returns without a
|
|
89
|
+
* result leaves the call unpaired and `buildSessionContext` strips the whole
|
|
90
|
+
* interaction on replay. The three result-less paths — no handler installed, a
|
|
91
|
+
* handler that produced nothing, and a thrown handler — therefore synthesize
|
|
92
|
+
* one from the same text the server sees in `execResult`.
|
|
93
|
+
*
|
|
94
|
+
* `pairing` is required so a new callsite cannot silently recreate the orphan,
|
|
95
|
+
* and nullable for the one caller whose block is NOT pre-resolved: MCP without
|
|
96
|
+
* an `mcp` handler, which `agent-loop.ts` runs locally and pairs itself.
|
|
97
|
+
*/
|
|
98
|
+
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, pairing: CursorExecPairing | null): Promise<{
|
|
99
|
+
execResult: TResult;
|
|
100
|
+
toolResult?: ToolResultMessage;
|
|
101
|
+
}>;
|
|
102
|
+
/**
|
|
103
|
+
* Reject a Cursor exec-channel `grepArgs` frame whose `pattern` is empty or
|
|
104
|
+
* whitespace-only. Returns an actionable error message when the pattern is
|
|
105
|
+
* unusable (with a `glob`-aware hint when the model likely meant to list
|
|
106
|
+
* files), or `null` when the pattern is valid and grep should run.
|
|
107
|
+
*
|
|
108
|
+
* Exported for tests. Cursor's model sometimes sends `pattern=""` together
|
|
109
|
+
* with a non-empty `glob`, expecting grep to enumerate matching files; the
|
|
110
|
+
* downstream coding-agent `grep` tool rejects that with a bare "Pattern must
|
|
111
|
+
* not be empty", which the TUI renders as `?` in the tool preview (issue
|
|
112
|
+
* #4574). Handling it at the Cursor exec dispatch keeps the synthesized
|
|
113
|
+
* `toolCall` block off the persisted assistant message and gives the model a
|
|
114
|
+
* specific recovery hint.
|
|
115
|
+
*/
|
|
116
|
+
export declare function emptyGrepPatternRejection(pattern: string | undefined, glob: string | undefined): string | null;
|
|
117
|
+
/**
|
|
118
|
+
* Retain a freshly opened streamed tool-call block.
|
|
119
|
+
*
|
|
120
|
+
* Keyed by the interaction envelope's `call_id`, which is the only key every
|
|
121
|
+
* `ToolCall*Update` for that call shares. The block's own `id` is deliberately
|
|
122
|
+
* not the key: MCP, Pi and connect-SCM blocks are filed under the id carried
|
|
123
|
+
* inside the call's `args`, because that is what the exec channel pairs its
|
|
124
|
+
* result under and what the transcript files the visible block under.
|
|
125
|
+
*
|
|
126
|
+
* `currentToolCall` is still set, as the fallback for frames that carry no
|
|
127
|
+
* `call_id` (proto3-optional, and unset on what older builds send).
|
|
128
|
+
*/
|
|
129
|
+
/**
|
|
130
|
+
* Close every tool-call block still open when the stream ends.
|
|
131
|
+
*
|
|
132
|
+
* Not just the last one started: with interleaved calls several can be open at
|
|
133
|
+
* once, and an unclosed block leaves its live card animating and its call
|
|
134
|
+
* unpaired.
|
|
135
|
+
*
|
|
136
|
+
* Only blocks fed by a streamed argument buffer get reparsed. Todo,
|
|
137
|
+
* connect-SCM and MCP-settled frames arrive with complete `arguments` and
|
|
138
|
+
* never set the partial buffer; `parseStreamingJson(undefined)` returns `{}`,
|
|
139
|
+
* so reparsing unconditionally would erase the arguments of every such block
|
|
140
|
+
* caught open by a truncated stream.
|
|
141
|
+
*
|
|
142
|
+
* Server-owned blocks are also paired here. `connect-scm` and `todo` are
|
|
143
|
+
* stamped {@link kCursorExecResolved} the moment they open, so `agent-loop.ts`
|
|
144
|
+
* synthesizes no placeholder for them and only their `toolCallCompleted` frame
|
|
145
|
+
* pairs a result. A transport that closes before that frame would leave the
|
|
146
|
+
* call unpaired, and `buildSessionContext` strips a dangling call from every
|
|
147
|
+
* rebuilt transcript — the interaction disappears. An interrupted result is
|
|
148
|
+
* emitted instead.
|
|
149
|
+
*
|
|
150
|
+
* MCP blocks are excluded even when resolved: the exec dispatch that marked
|
|
151
|
+
* them owns their result, and `drainInFlightDispatches` awaits it before this
|
|
152
|
+
* runs, so pairing here would duplicate one against the same `toolCallId`.
|
|
153
|
+
*/
|
|
154
|
+
export declare function flushOpenToolCalls(output: AssistantMessage, stream: AssistantMessageEventStream, state: BlockState): void;
|
|
155
|
+
/**
|
|
156
|
+
* Merge the decoded completion-frame `McpArgs` map into the args assembled
|
|
157
|
+
* from streamed `args_text_delta` snapshots.
|
|
158
|
+
*
|
|
159
|
+
* The completion frame is authoritative for the scalars it carries — but it
|
|
160
|
+
* can omit oversized parameters entirely and can downgrade a structured value
|
|
161
|
+
* to its raw string fallback when `decodeMcpArgValue` cannot parse it as
|
|
162
|
+
* JSON. Overwriting the streamed args wholesale therefore loses data (e.g.
|
|
163
|
+
* the task tool's `tasks` array on multi-subagent dispatches, issue #2615).
|
|
164
|
+
*
|
|
165
|
+
* Rules per key:
|
|
166
|
+
* - completion key absent → keep the streamed value.
|
|
167
|
+
* - completion is a string while the streamed value is structured (object or
|
|
168
|
+
* array) → keep the streamed value (the completion frame downgraded it).
|
|
169
|
+
* - otherwise → completion wins.
|
|
170
|
+
*/
|
|
171
|
+
export declare function mergeCursorMcpToolCallArgs(streamed: Record<string, unknown> | undefined, completion: Record<string, unknown> | undefined): Record<string, unknown>;
|
|
172
|
+
/**
|
|
173
|
+
* Synthesize a completed `toolCall` content block for a Cursor exec-channel
|
|
174
|
+
* native tool (`shell`, `read`, `write`, `grep`, `ls`, `delete`, `diagnostics`)
|
|
175
|
+
* or for an MCP exec frame whose corresponding interaction block is absent.
|
|
176
|
+
*
|
|
177
|
+
* Args arrive complete on the exec message, so the block opens and closes in
|
|
178
|
+
* one step — no partial-JSON streaming path. Without this the persisted
|
|
179
|
+
* assistant message carries only text/thinking blocks, and on replay the
|
|
180
|
+
* following `toolResult` messages have no matching `toolCall.id` in
|
|
181
|
+
* `renderSessionContext`, so they render beneath the final answer or disappear.
|
|
182
|
+
*
|
|
183
|
+
* The block is stamped with {@link kCursorExecResolved} so the shared
|
|
184
|
+
* `agent-loop.ts` execution pass skips it — Cursor's server-driven exec
|
|
185
|
+
* channel already ran the tool via the bridge and buffered the result, so
|
|
186
|
+
* treating this block as runnable would re-execute the same side-effecting
|
|
187
|
+
* tool a second time.
|
|
188
|
+
*
|
|
189
|
+
* Exported for tests to exercise ordering with adjacent text/thinking blocks.
|
|
190
|
+
*/
|
|
191
|
+
export declare function synthesizeCursorExecToolCall(output: AssistantMessage, stream: AssistantMessageEventStream, state: BlockState, toolCallId: string, toolName: string, args: Record<string, unknown>): void;
|
|
192
|
+
/** Exported for tests: drives one Cursor interaction update through the streaming state machine. */
|
|
193
|
+
export declare function processInteractionUpdate(update: any, output: AssistantMessage, stream: AssistantMessageEventStream, state: BlockState, usageState: UsageState): void;
|
|
194
|
+
export declare function buildMcpToolDefinitions(tools: Tool[] | undefined): McpToolDefinition[];
|
|
195
|
+
/**
|
|
196
|
+
* Build `ConversationStateStructure.rootPromptMessagesJson` blob IDs for the
|
|
197
|
+
* system prompt plus prior conversation history, as JSON blobs matching
|
|
198
|
+
* Cursor's internal Vercel-AI-SDK-shaped message format.
|
|
199
|
+
*
|
|
200
|
+
* Cursor's server uses `rootPromptMessagesJson` (not `turns[]`) to build the
|
|
201
|
+
* actual model prompt. `turns[]` is UI/display metadata. Without populating
|
|
202
|
+
* this field, multi-turn conversations lose prior context — the model sees
|
|
203
|
+
* only an empty placeholder where historical user turns should be.
|
|
204
|
+
* The active user message is excluded because it is sent in the action.
|
|
205
|
+
*/
|
|
206
|
+
/**
|
|
207
|
+
* Build one Cursor system-message JSON blob per ordered system prompt. Emitting separate blobs
|
|
208
|
+
* (rather than a single `\n\n`-joined string) lets Cursor's blob cache hit independently per
|
|
209
|
+
* entry: changing only the last prompt does not invalidate earlier blob ids, so the prefix
|
|
210
|
+
* up to the changed prompt remains cached on the server side.
|
|
211
|
+
*
|
|
212
|
+
* When no system prompts are provided, returns a single default greeting so we never emit
|
|
213
|
+
* an empty `rootPromptMessagesJson` head.
|
|
214
|
+
*/
|
|
215
|
+
export declare function buildCursorSystemPromptJsons(systemPrompt: readonly string[] | undefined): string[];
|
|
216
|
+
/** Exported for tests: decodes Cursor history blobs built from conversation messages. */
|
|
217
|
+
export declare function buildCursorHistoryForTest(messages: Message[], activeUserMessageIndex?: number, targetModelId?: string): {
|
|
218
|
+
rootPromptMessagesJson: unknown[];
|
|
219
|
+
turnUserMessagesJson: JsonValue[];
|
|
220
|
+
turnStepMessagesJson: JsonValue[][];
|
|
221
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { StreamFunction, StreamOptions } from "../types.js";
|
|
2
|
+
/** Base host for Codeium/Windsurf's Cascade chat API (Connect protocol over HTTP/1.1). */
|
|
3
|
+
export declare const DEVIN_API_URL = "https://server.codeium.com";
|
|
4
|
+
export interface DevinOptions extends StreamOptions {
|
|
5
|
+
/** Cascade conversation id; reused as `cascade_id` so the server threads turns. */
|
|
6
|
+
conversationId?: string;
|
|
7
|
+
/** Falls back to `cascade_id` when no `conversationId` is supplied. */
|
|
8
|
+
sessionId?: string;
|
|
9
|
+
/** Wire model uid selected after thinking-effort routing. */
|
|
10
|
+
chatModelUid?: string;
|
|
11
|
+
}
|
|
12
|
+
export declare const streamDevin: StreamFunction<"devin-agent">;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { Api, Model } from "../types.js";
|
|
2
|
+
export declare function createProviderErrorMessage(model: Model<Api>, err: unknown): {
|
|
3
|
+
role: "assistant";
|
|
4
|
+
content: never[];
|
|
5
|
+
errorMessage: string;
|
|
6
|
+
api: Api;
|
|
7
|
+
provider: string;
|
|
8
|
+
model: string;
|
|
9
|
+
usage: {
|
|
10
|
+
input: number;
|
|
11
|
+
output: number;
|
|
12
|
+
cacheRead: number;
|
|
13
|
+
cacheWrite: number;
|
|
14
|
+
totalTokens: number;
|
|
15
|
+
cost: {
|
|
16
|
+
input: number;
|
|
17
|
+
output: number;
|
|
18
|
+
cacheRead: number;
|
|
19
|
+
cacheWrite: number;
|
|
20
|
+
total: number;
|
|
21
|
+
};
|
|
22
|
+
};
|
|
23
|
+
stopReason: "error";
|
|
24
|
+
timestamp: number;
|
|
25
|
+
};
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import type { Message } from "../types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Infer whether the current request to Copilot is user-initiated or agent-initiated.
|
|
4
|
+
* Accepts `unknown[]` because providers may pass pre-converted message shapes.
|
|
5
|
+
*/
|
|
6
|
+
export type CopilotInitiator = "user" | "agent";
|
|
7
|
+
export type CopilotPremiumRequests = number;
|
|
8
|
+
export type CopilotDynamicHeaders = {
|
|
9
|
+
headers: Record<string, string>;
|
|
10
|
+
initiator: CopilotInitiator;
|
|
11
|
+
premiumRequests: CopilotPremiumRequests;
|
|
12
|
+
};
|
|
13
|
+
export declare function resolveGitHubCopilotBaseUrl(baseUrl: string | undefined, apiKey: string | undefined): string | undefined;
|
|
14
|
+
export declare function inferCopilotInitiator(messages: unknown[]): CopilotInitiator;
|
|
15
|
+
/** Check whether any message in the conversation contains image content. */
|
|
16
|
+
export declare function hasCopilotVisionInput(messages: Message[]): boolean;
|
|
17
|
+
/**
|
|
18
|
+
* Resolve an explicitly configured Copilot initiator header, if present.
|
|
19
|
+
* Handles case-insensitive X-Initiator keys and returns the last valid value.
|
|
20
|
+
*/
|
|
21
|
+
export declare function getCopilotInitiatorOverride(headers: Record<string, string> | undefined): CopilotInitiator | undefined;
|
|
22
|
+
export type CopilotPlanTier = "free" | "paid";
|
|
23
|
+
export declare function getCopilotPremiumMultiplier(premiumMultiplier: number | undefined, planTier?: string): number;
|
|
24
|
+
export declare function getCopilotPremiumRequests(params: {
|
|
25
|
+
initiator: CopilotInitiator;
|
|
26
|
+
premiumMultiplier?: number;
|
|
27
|
+
planTier?: string;
|
|
28
|
+
}): CopilotPremiumRequests;
|
|
29
|
+
/**
|
|
30
|
+
* Build dynamic Copilot headers that vary per-request.
|
|
31
|
+
* Static headers (User-Agent, Editor-Version, etc.) come from model.headers.
|
|
32
|
+
*/
|
|
33
|
+
export declare function buildCopilotDynamicHeaders(params: {
|
|
34
|
+
messages: unknown[];
|
|
35
|
+
hasImages: boolean;
|
|
36
|
+
premiumMultiplier?: number;
|
|
37
|
+
headers?: Record<string, string>;
|
|
38
|
+
initiatorOverride?: CopilotInitiator;
|
|
39
|
+
planTier?: string;
|
|
40
|
+
}): CopilotDynamicHeaders;
|