@gajae-code/ai 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2644 -0
- package/README.md +1181 -0
- package/dist/types/api-registry.d.ts +30 -0
- package/dist/types/auth-broker/client.d.ts +66 -0
- package/dist/types/auth-broker/index.d.ts +5 -0
- package/dist/types/auth-broker/refresher.d.ts +25 -0
- package/dist/types/auth-broker/remote-store.d.ts +96 -0
- package/dist/types/auth-broker/server.d.ts +32 -0
- package/dist/types/auth-broker/types.d.ts +105 -0
- package/dist/types/auth-broker/wire-schemas.d.ts +412 -0
- package/dist/types/auth-gateway/http.d.ts +39 -0
- package/dist/types/auth-gateway/index.d.ts +3 -0
- package/dist/types/auth-gateway/server.d.ts +17 -0
- package/dist/types/auth-gateway/types.d.ts +115 -0
- package/dist/types/auth-storage.d.ts +641 -0
- package/dist/types/cli.d.ts +2 -0
- package/dist/types/index.d.ts +49 -0
- package/dist/types/model-cache.d.ts +17 -0
- package/dist/types/model-manager.d.ts +62 -0
- package/dist/types/model-thinking.d.ts +71 -0
- package/dist/types/models.d.ts +12 -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 +237 -0
- package/dist/types/provider-models/special.d.ts +16 -0
- package/dist/types/providers/amazon-bedrock.d.ts +36 -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 +188 -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 +15 -0
- package/dist/types/providers/cursor/gen/agent_pb.d.ts +13022 -0
- package/dist/types/providers/cursor.d.ts +42 -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 +24 -0
- package/dist/types/providers/google-gemini-cli.d.ts +72 -0
- package/dist/types/providers/google-gemini-headers.d.ts +18 -0
- package/dist/types/providers/google-shared.d.ts +163 -0
- package/dist/types/providers/google-types.d.ts +138 -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 +175 -0
- package/dist/types/providers/ollama.d.ts +6 -0
- package/dist/types/providers/openai-anthropic-shim.d.ts +31 -0
- package/dist/types/providers/openai-chat-server-schema.d.ts +814 -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 +49 -0
- package/dist/types/providers/openai-codex/response-handler.d.ts +17 -0
- package/dist/types/providers/openai-codex-responses.d.ts +67 -0
- package/dist/types/providers/openai-completions-compat.d.ts +25 -0
- package/dist/types/providers/openai-completions.d.ts +33 -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 +89 -0
- package/dist/types/providers/openai-responses.d.ts +32 -0
- package/dist/types/providers/pi-native-client.d.ts +13 -0
- package/dist/types/providers/pi-native-server.d.ts +68 -0
- package/dist/types/providers/register-builtins.d.ts +31 -0
- package/dist/types/providers/synthetic.d.ts +26 -0
- package/dist/types/providers/transform-messages.d.ts +12 -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 +24 -0
- package/dist/types/types.d.ts +746 -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/kimi.d.ts +2 -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 +258 -0
- package/dist/types/utils/abort.d.ts +19 -0
- package/dist/types/utils/anthropic-auth.d.ts +31 -0
- package/dist/types/utils/discovery/antigravity.d.ts +61 -0
- package/dist/types/utils/discovery/codex.d.ts +38 -0
- package/dist/types/utils/discovery/cursor.d.ts +23 -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 +72 -0
- package/dist/types/utils/event-stream.d.ts +28 -0
- package/dist/types/utils/fireworks-model-id.d.ts +10 -0
- package/dist/types/utils/foundry.d.ts +1 -0
- package/dist/types/utils/h2-fetch.d.ts +22 -0
- package/dist/types/utils/http-inspector.d.ts +31 -0
- package/dist/types/utils/idle-iterator.d.ts +67 -0
- package/dist/types/utils/json-parse.d.ts +10 -0
- package/dist/types/utils/oauth/alibaba-coding-plan.d.ts +18 -0
- package/dist/types/utils/oauth/anthropic.d.ts +22 -0
- package/dist/types/utils/oauth/api-key-login.d.ts +35 -0
- package/dist/types/utils/oauth/api-key-validation.d.ts +27 -0
- package/dist/types/utils/oauth/callback-server.d.ts +57 -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/cursor.d.ts +15 -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/github-copilot.d.ts +38 -0
- package/dist/types/utils/oauth/gitlab-duo.d.ts +3 -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 +38 -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 +21 -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/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/parallel.d.ts +17 -0
- package/dist/types/utils/oauth/perplexity.d.ts +9 -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/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 +44 -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/xiaomi.d.ts +19 -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 +54 -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/retry-after.d.ts +3 -0
- package/dist/types/utils/retry.d.ts +26 -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 +13 -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/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 +71 -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 +28 -0
- package/package.json +146 -0
- package/src/api-registry.ts +96 -0
- package/src/auth-broker/client.ts +358 -0
- package/src/auth-broker/index.ts +5 -0
- package/src/auth-broker/refresher.ts +127 -0
- package/src/auth-broker/remote-store.ts +623 -0
- package/src/auth-broker/server.ts +644 -0
- package/src/auth-broker/types.ts +127 -0
- package/src/auth-broker/wire-schemas.ts +200 -0
- package/src/auth-gateway/http.ts +194 -0
- package/src/auth-gateway/index.ts +3 -0
- package/src/auth-gateway/server.ts +717 -0
- package/src/auth-gateway/types.ts +134 -0
- package/src/auth-storage.ts +4104 -0
- package/src/cli.ts +262 -0
- package/src/index.ts +54 -0
- package/src/model-cache.ts +129 -0
- package/src/model-manager.ts +450 -0
- package/src/model-thinking.ts +691 -0
- package/src/models.json +73853 -0
- package/src/models.json.d.ts +9 -0
- package/src/models.ts +56 -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 +308 -0
- package/src/provider-models/google.ts +91 -0
- package/src/provider-models/index.ts +5 -0
- package/src/provider-models/ollama.ts +153 -0
- package/src/provider-models/openai-compat.ts +2275 -0
- package/src/provider-models/special.ts +67 -0
- package/src/providers/amazon-bedrock.ts +849 -0
- package/src/providers/anthropic-messages-server-schema.ts +229 -0
- package/src/providers/anthropic-messages-server.ts +677 -0
- package/src/providers/anthropic.ts +2696 -0
- package/src/providers/aws-credentials.ts +501 -0
- package/src/providers/aws-eventstream.ts +185 -0
- package/src/providers/aws-sigv4.ts +218 -0
- package/src/providers/azure-openai-responses.ts +337 -0
- package/src/providers/cursor/gen/agent_pb.ts +15274 -0
- package/src/providers/cursor/proto/agent.proto +3526 -0
- package/src/providers/cursor/proto/buf.gen.yaml +6 -0
- package/src/providers/cursor/proto/buf.yaml +17 -0
- package/src/providers/cursor.ts +2561 -0
- package/src/providers/error-message.ts +21 -0
- package/src/providers/github-copilot-headers.ts +140 -0
- package/src/providers/gitlab-duo.ts +372 -0
- package/src/providers/google-auth.ts +252 -0
- package/src/providers/google-gemini-cli.ts +795 -0
- package/src/providers/google-gemini-headers.ts +41 -0
- package/src/providers/google-shared.ts +902 -0
- package/src/providers/google-types.ts +167 -0
- package/src/providers/google-vertex.ts +88 -0
- package/src/providers/google.ts +41 -0
- package/src/providers/grammar.ts +70 -0
- package/src/providers/kimi.ts +52 -0
- package/src/providers/mock.ts +500 -0
- package/src/providers/ollama.ts +544 -0
- package/src/providers/openai-anthropic-shim.ts +138 -0
- package/src/providers/openai-chat-server-schema.ts +243 -0
- package/src/providers/openai-chat-server.ts +628 -0
- package/src/providers/openai-codex/constants.ts +43 -0
- package/src/providers/openai-codex/request-transformer.ts +161 -0
- package/src/providers/openai-codex/response-handler.ts +81 -0
- package/src/providers/openai-codex-responses.ts +2598 -0
- package/src/providers/openai-completions-compat.ts +279 -0
- package/src/providers/openai-completions.ts +1853 -0
- package/src/providers/openai-responses-server-schema.ts +290 -0
- package/src/providers/openai-responses-server.ts +1183 -0
- package/src/providers/openai-responses-shared.ts +800 -0
- package/src/providers/openai-responses.ts +621 -0
- package/src/providers/pi-native-client.ts +228 -0
- package/src/providers/pi-native-server.ts +210 -0
- package/src/providers/register-builtins.ts +412 -0
- package/src/providers/synthetic.ts +50 -0
- package/src/providers/transform-messages.ts +309 -0
- package/src/providers/vision-guard.ts +31 -0
- package/src/rate-limit-utils.ts +84 -0
- package/src/stream.ts +895 -0
- package/src/types.ts +884 -0
- package/src/usage/claude.ts +431 -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/kimi.ts +271 -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 +183 -0
- package/src/utils/abort.ts +51 -0
- package/src/utils/anthropic-auth.ts +87 -0
- package/src/utils/discovery/antigravity.ts +261 -0
- package/src/utils/discovery/codex.ts +371 -0
- package/src/utils/discovery/cursor.ts +306 -0
- package/src/utils/discovery/gemini.ts +248 -0
- package/src/utils/discovery/index.ts +4 -0
- package/src/utils/discovery/openai-compatible.ts +224 -0
- package/src/utils/event-stream.ts +142 -0
- package/src/utils/fireworks-model-id.ts +30 -0
- package/src/utils/foundry.ts +8 -0
- package/src/utils/h2-fetch.ts +60 -0
- package/src/utils/http-inspector.ts +176 -0
- package/src/utils/idle-iterator.ts +250 -0
- package/src/utils/json-parse.ts +148 -0
- package/src/utils/oauth/alibaba-coding-plan.ts +59 -0
- package/src/utils/oauth/anthropic.ts +200 -0
- package/src/utils/oauth/api-key-login.ts +87 -0
- package/src/utils/oauth/api-key-validation.ts +92 -0
- package/src/utils/oauth/callback-server.ts +276 -0
- package/src/utils/oauth/cerebras.ts +16 -0
- package/src/utils/oauth/cloudflare-ai-gateway.ts +48 -0
- package/src/utils/oauth/cursor.ts +157 -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/github-copilot.ts +362 -0
- package/src/utils/oauth/gitlab-duo.ts +123 -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 +444 -0
- package/src/utils/oauth/kagi.ts +47 -0
- package/src/utils/oauth/kilo.ts +87 -0
- package/src/utils/oauth/kimi.ts +254 -0
- package/src/utils/oauth/litellm.ts +47 -0
- package/src/utils/oauth/lm-studio.ts +38 -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/parallel.ts +46 -0
- package/src/utils/oauth/perplexity.ts +206 -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/synthetic.ts +16 -0
- package/src/utils/oauth/tavily.ts +46 -0
- package/src/utils/oauth/together.ts +16 -0
- package/src/utils/oauth/types.ts +94 -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 +40 -0
- package/src/utils/oauth/xiaomi.ts +137 -0
- package/src/utils/oauth/zai.ts +60 -0
- package/src/utils/oauth/zenmux.ts +15 -0
- package/src/utils/overflow.ts +137 -0
- package/src/utils/parse-bind.ts +54 -0
- package/src/utils/provider-response.ts +30 -0
- package/src/utils/retry-after.ts +110 -0
- package/src/utils/retry.ts +54 -0
- package/src/utils/schema/CONSTRAINTS.md +164 -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 +190 -0
- package/src/utils/schema/index.ts +13 -0
- package/src/utils/schema/json-schema-validator.ts +577 -0
- package/src/utils/schema/meta-validator.ts +167 -0
- package/src/utils/schema/normalize.ts +1588 -0
- package/src/utils/schema/spill.ts +43 -0
- package/src/utils/schema/stamps.ts +97 -0
- package/src/utils/schema/types.ts +11 -0
- package/src/utils/schema/wire.ts +213 -0
- package/src/utils/schema/zod-decontaminate.ts +331 -0
- package/src/utils/sse-debug.ts +289 -0
- package/src/utils/tool-call-healing.ts +271 -0
- package/src/utils/tool-choice.ts +99 -0
- package/src/utils/validation.ts +1019 -0
- package/src/utils.ts +166 -0
|
@@ -0,0 +1,290 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zod schemas for the OpenAI Responses API request shape we accept on the
|
|
3
|
+
* gateway. Mirrors https://platform.openai.com/docs/api-reference/responses.
|
|
4
|
+
*
|
|
5
|
+
* Unsupported / opaque controls (background/include/metadata/prompt/…) are
|
|
6
|
+
* accepted as `z.unknown().optional()` so we silently ignore rather than 400.
|
|
7
|
+
* Real clients (OpenAI code backend, openai-python, llm-git) routinely send these and a 400
|
|
8
|
+
* is a worse outcome than dropping them on the floor.
|
|
9
|
+
*/
|
|
10
|
+
import type {
|
|
11
|
+
EasyInputMessage,
|
|
12
|
+
ResponseCreateParams,
|
|
13
|
+
ResponseFunctionToolCall,
|
|
14
|
+
ResponseInputContent,
|
|
15
|
+
ResponseInputItem,
|
|
16
|
+
ResponseOutputMessage,
|
|
17
|
+
ResponseReasoningItem,
|
|
18
|
+
Tool as ResponsesTool,
|
|
19
|
+
} from "openai/resources/responses/responses";
|
|
20
|
+
import * as z from "zod/v4";
|
|
21
|
+
|
|
22
|
+
// ─── Input content blocks ───────────────────────────────────────────────────
|
|
23
|
+
|
|
24
|
+
const inputTextSchema = z.object({
|
|
25
|
+
type: z.literal("input_text"),
|
|
26
|
+
text: z.string(),
|
|
27
|
+
});
|
|
28
|
+
|
|
29
|
+
const plainTextSchema = z.object({
|
|
30
|
+
type: z.literal("text"),
|
|
31
|
+
text: z.string(),
|
|
32
|
+
});
|
|
33
|
+
|
|
34
|
+
const inputImageBlockSchema = z
|
|
35
|
+
.object({
|
|
36
|
+
type: z.literal("input_image"),
|
|
37
|
+
detail: z.enum(["auto", "low", "high"]).optional(),
|
|
38
|
+
image_url: z.string().optional(),
|
|
39
|
+
file_id: z.string().optional(),
|
|
40
|
+
})
|
|
41
|
+
.refine(v => typeof v.image_url === "string" || typeof v.file_id === "string", {
|
|
42
|
+
message: "input_image requires at least one of `image_url` or `file_id`",
|
|
43
|
+
});
|
|
44
|
+
|
|
45
|
+
const inputFileBlockSchema = z.object({
|
|
46
|
+
type: z.literal("input_file"),
|
|
47
|
+
file_id: z.string().optional(),
|
|
48
|
+
filename: z.string().optional(),
|
|
49
|
+
file_data: z.string().optional(),
|
|
50
|
+
});
|
|
51
|
+
|
|
52
|
+
const outputTextSchema = z.object({
|
|
53
|
+
type: z.literal("output_text"),
|
|
54
|
+
text: z.string(),
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
const outputRefusalSchema = z.object({
|
|
58
|
+
type: z.literal("refusal"),
|
|
59
|
+
refusal: z.string(),
|
|
60
|
+
});
|
|
61
|
+
|
|
62
|
+
const summaryTextSchema = z.object({
|
|
63
|
+
type: z.literal("summary_text"),
|
|
64
|
+
text: z.string(),
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
const reasoningTextSchema = z.object({
|
|
68
|
+
type: z.literal("reasoning_text"),
|
|
69
|
+
text: z.string(),
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
const inputContentBlockSchema = z.union([
|
|
73
|
+
inputTextSchema,
|
|
74
|
+
plainTextSchema,
|
|
75
|
+
inputImageBlockSchema,
|
|
76
|
+
inputFileBlockSchema,
|
|
77
|
+
]);
|
|
78
|
+
const outputContentBlockSchema = z.union([outputTextSchema, plainTextSchema, outputRefusalSchema]);
|
|
79
|
+
|
|
80
|
+
// ─── Input items ────────────────────────────────────────────────────────────
|
|
81
|
+
|
|
82
|
+
const userMessageItemSchema = z.object({
|
|
83
|
+
type: z.literal("message").optional(),
|
|
84
|
+
role: z.union([z.literal("user"), z.literal("developer")]),
|
|
85
|
+
content: z.union([z.string(), z.array(inputContentBlockSchema)]).optional(),
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
const systemMessageItemSchema = z.object({
|
|
89
|
+
type: z.literal("message").optional(),
|
|
90
|
+
role: z.literal("system"),
|
|
91
|
+
content: z.union([z.string(), z.array(inputContentBlockSchema)]).optional(),
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
const assistantMessageItemSchema = z.object({
|
|
95
|
+
type: z.literal("message").optional(),
|
|
96
|
+
role: z.literal("assistant"),
|
|
97
|
+
content: z.union([z.string(), z.array(outputContentBlockSchema)]).optional(),
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
const reasoningItemSchema = z.object({
|
|
101
|
+
type: z.literal("reasoning"),
|
|
102
|
+
id: z.string().optional(),
|
|
103
|
+
summary: z.array(summaryTextSchema).optional(),
|
|
104
|
+
content: z.array(reasoningTextSchema).optional(),
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
const functionCallItemSchema = z.object({
|
|
108
|
+
type: z.literal("function_call"),
|
|
109
|
+
id: z.string().optional(),
|
|
110
|
+
call_id: z.string().min(1),
|
|
111
|
+
name: z.string().min(1),
|
|
112
|
+
arguments: z.string().optional(),
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
const functionCallOutputItemSchema = z.object({
|
|
116
|
+
type: z.literal("function_call_output"),
|
|
117
|
+
call_id: z.string().min(1),
|
|
118
|
+
// OpenAI code backend CLI replays multimodal tool results in array form (text + refusal).
|
|
119
|
+
output: z.union([z.string(), z.array(outputContentBlockSchema)]).optional(),
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
const customToolCallItemSchema = z.object({
|
|
123
|
+
type: z.literal("custom_tool_call"),
|
|
124
|
+
id: z.string().optional(),
|
|
125
|
+
call_id: z.string().min(1),
|
|
126
|
+
name: z.string().min(1),
|
|
127
|
+
// Raw input string — NOT JSON.stringified. apply_patch flow streams a
|
|
128
|
+
// freeform body and reading it as JSON would corrupt it.
|
|
129
|
+
input: z.string(),
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
const customToolCallOutputItemSchema = z.object({
|
|
133
|
+
type: z.literal("custom_tool_call_output"),
|
|
134
|
+
call_id: z.string().min(1),
|
|
135
|
+
output: z.string(),
|
|
136
|
+
});
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* An input item is one of the union members below. The convenience shape
|
|
140
|
+
* `{role, content}` (no `type`) is mapped to "message" before validation in
|
|
141
|
+
* the walker — schemas here only handle the canonical {type, ...} forms.
|
|
142
|
+
*/
|
|
143
|
+
export const inputItemSchema = z.union([
|
|
144
|
+
userMessageItemSchema,
|
|
145
|
+
systemMessageItemSchema,
|
|
146
|
+
assistantMessageItemSchema,
|
|
147
|
+
reasoningItemSchema,
|
|
148
|
+
functionCallItemSchema,
|
|
149
|
+
functionCallOutputItemSchema,
|
|
150
|
+
customToolCallItemSchema,
|
|
151
|
+
customToolCallOutputItemSchema,
|
|
152
|
+
// Tolerated but not bridged (file_search_call, web_search_call, …).
|
|
153
|
+
z.object({ type: z.string() }).loose(),
|
|
154
|
+
]);
|
|
155
|
+
|
|
156
|
+
// Variant types alias the canonical SDK union members so the walker can
|
|
157
|
+
// narrow them cleanly. The convenience "message" shape (no `type` field) maps
|
|
158
|
+
// to EasyInputMessage; the explicit form maps to ResponseInputItem.Message.
|
|
159
|
+
export type OpenAIResponsesUserItem = EasyInputMessage | ResponseInputItem.Message;
|
|
160
|
+
export type OpenAIResponsesSystemItem = EasyInputMessage | ResponseInputItem.Message;
|
|
161
|
+
export type OpenAIResponsesAssistantItem = EasyInputMessage | ResponseOutputMessage;
|
|
162
|
+
export type OpenAIResponsesReasoningItem = ResponseReasoningItem;
|
|
163
|
+
export type OpenAIResponsesFunctionCallItem = ResponseFunctionToolCall;
|
|
164
|
+
export type OpenAIResponsesFunctionCallOutputItem = ResponseInputItem.FunctionCallOutput;
|
|
165
|
+
|
|
166
|
+
/** Inferred shape of the custom tool call input item (no canonical SDK alias). */
|
|
167
|
+
export type OpenAIResponsesCustomToolCallItem = z.infer<typeof customToolCallItemSchema>;
|
|
168
|
+
export type OpenAIResponsesCustomToolCallOutputItem = z.infer<typeof customToolCallOutputItemSchema>;
|
|
169
|
+
export type OpenAIResponsesInputImageBlock = z.infer<typeof inputImageBlockSchema>;
|
|
170
|
+
export type OpenAIResponsesInputFileBlock = z.infer<typeof inputFileBlockSchema>;
|
|
171
|
+
export type OpenAIResponsesOutputRefusalBlock = z.infer<typeof outputRefusalSchema>;
|
|
172
|
+
|
|
173
|
+
// ─── Tools ──────────────────────────────────────────────────────────────────
|
|
174
|
+
|
|
175
|
+
export const toolSchema = z.object({
|
|
176
|
+
type: z.literal("function"),
|
|
177
|
+
name: z.string().min(1),
|
|
178
|
+
description: z.string().optional(),
|
|
179
|
+
parameters: z.record(z.string(), z.unknown()).optional(),
|
|
180
|
+
strict: z.boolean().optional(),
|
|
181
|
+
});
|
|
182
|
+
|
|
183
|
+
// Built-in / hosted tool entries (web_search_preview, file_search, …) — accepted
|
|
184
|
+
// but skipped by the walker.
|
|
185
|
+
const builtinToolSchema = z
|
|
186
|
+
.object({
|
|
187
|
+
type: z.string(),
|
|
188
|
+
})
|
|
189
|
+
.loose();
|
|
190
|
+
|
|
191
|
+
// ─── Tool choice ────────────────────────────────────────────────────────────
|
|
192
|
+
|
|
193
|
+
const hostedToolType = z.enum([
|
|
194
|
+
"web_search_preview",
|
|
195
|
+
"file_search",
|
|
196
|
+
"computer_use_preview",
|
|
197
|
+
"code_interpreter",
|
|
198
|
+
"image_generation",
|
|
199
|
+
"mcp",
|
|
200
|
+
]);
|
|
201
|
+
|
|
202
|
+
const allowedToolEntrySchema = z.object({
|
|
203
|
+
type: z.string(),
|
|
204
|
+
name: z.string().optional(),
|
|
205
|
+
});
|
|
206
|
+
|
|
207
|
+
export const toolChoiceSchema = z.union([
|
|
208
|
+
z.literal("auto"),
|
|
209
|
+
z.literal("none"),
|
|
210
|
+
z.literal("required"),
|
|
211
|
+
z.object({
|
|
212
|
+
type: z.literal("function"),
|
|
213
|
+
name: z.string().min(1),
|
|
214
|
+
}),
|
|
215
|
+
// OpenAI code backend apply_patch flow.
|
|
216
|
+
z.object({
|
|
217
|
+
type: z.literal("custom"),
|
|
218
|
+
name: z.string().min(1),
|
|
219
|
+
}),
|
|
220
|
+
// Hosted-tool selection (no extra fields).
|
|
221
|
+
z.object({
|
|
222
|
+
type: hostedToolType,
|
|
223
|
+
}),
|
|
224
|
+
// `allowed_tools` — walker treats as auto.
|
|
225
|
+
z.object({
|
|
226
|
+
type: z.literal("allowed_tools"),
|
|
227
|
+
mode: z.enum(["auto", "required"]),
|
|
228
|
+
tools: z.array(allowedToolEntrySchema),
|
|
229
|
+
}),
|
|
230
|
+
]);
|
|
231
|
+
|
|
232
|
+
// ─── Reasoning config ───────────────────────────────────────────────────────
|
|
233
|
+
|
|
234
|
+
export const reasoningConfigSchema = z.object({
|
|
235
|
+
effort: z.string().optional(),
|
|
236
|
+
// `none` maps to hideThinkingSummary; auto/concise/detailed mean "show
|
|
237
|
+
// summary". pi-ai has no per-level plumbing for the latter — walker logs
|
|
238
|
+
// once and treats them as default.
|
|
239
|
+
summary: z.enum(["auto", "concise", "detailed", "none"]).optional(),
|
|
240
|
+
});
|
|
241
|
+
|
|
242
|
+
// ─── Stop ───────────────────────────────────────────────────────────────────
|
|
243
|
+
|
|
244
|
+
export const stopSchema = z.union([z.string(), z.array(z.string()), z.null()]);
|
|
245
|
+
|
|
246
|
+
// ─── Top-level request ──────────────────────────────────────────────────────
|
|
247
|
+
|
|
248
|
+
export const openaiResponsesRequestSchema = z.object({
|
|
249
|
+
model: z.string().min(1),
|
|
250
|
+
input: z.union([z.string(), z.array(inputItemSchema)]).optional(),
|
|
251
|
+
instructions: z.union([z.string(), z.null()]).optional(),
|
|
252
|
+
tools: z.array(z.union([toolSchema, builtinToolSchema])).optional(),
|
|
253
|
+
tool_choice: toolChoiceSchema.optional(),
|
|
254
|
+
max_output_tokens: z.number().optional(),
|
|
255
|
+
temperature: z.number().optional(),
|
|
256
|
+
top_p: z.number().optional(),
|
|
257
|
+
stop: stopSchema.optional(),
|
|
258
|
+
stream: z.boolean().optional(),
|
|
259
|
+
reasoning: reasoningConfigSchema.optional(),
|
|
260
|
+
store: z.boolean().optional(),
|
|
261
|
+
previous_response_id: z.string().optional(),
|
|
262
|
+
parallel_tool_calls: z.boolean().optional(),
|
|
263
|
+
prompt_cache_key: z.string().optional(),
|
|
264
|
+
metadata: z.unknown().optional(),
|
|
265
|
+
user: z.string().optional(),
|
|
266
|
+
service_tier: z.string().optional(),
|
|
267
|
+
presence_penalty: z.number().optional(),
|
|
268
|
+
frequency_penalty: z.number().optional(),
|
|
269
|
+
// Accepted-but-ignored: include `reasoning.encrypted_content` is the canonical
|
|
270
|
+
// way to request reasoning replay — silently accept and drop.
|
|
271
|
+
background: z.unknown().optional(),
|
|
272
|
+
include: z.unknown().optional(),
|
|
273
|
+
prompt: z.unknown().optional(),
|
|
274
|
+
safety_identifier: z.unknown().optional(),
|
|
275
|
+
text: z.unknown().optional(),
|
|
276
|
+
top_logprobs: z.unknown().optional(),
|
|
277
|
+
truncation: z.unknown().optional(),
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
/**
|
|
281
|
+
* Public types are sourced from the OpenAI SDK so the gateway stays in
|
|
282
|
+
* lock-step with the canonical API surface; the schemas above are runtime
|
|
283
|
+
* validators for the subset we actually accept.
|
|
284
|
+
*/
|
|
285
|
+
export type OpenAIResponsesRequest = ResponseCreateParams;
|
|
286
|
+
export type OpenAIResponsesInputItem = ResponseInputItem;
|
|
287
|
+
export type OpenAIResponsesTool = ResponsesTool;
|
|
288
|
+
export type OpenAIResponsesToolChoice = NonNullable<ResponseCreateParams["tool_choice"]>;
|
|
289
|
+
export type OpenAIResponsesInputContent = ResponseInputContent;
|
|
290
|
+
export type OpenAIResponsesOutputContent = ResponseOutputMessage["content"][number];
|