mirror of
https://github.com/Gitlawb/openclaude.git
synced 2026-08-24 02:34:15 -05:00
* feat(provider): route GPT-5.6 models to the OpenAI Responses API
GPT-5.4/5.5/5.6 (incl. gpt-5.6-sol/terra/luna) reject function tools +
reasoning_effort on /v1/chat/completions, so an agent CLI (which always
sends tools) can't use them. Add a model+base predicate
(modelRequiresResponsesApi) that auto-selects the existing /v1/responses
transport for these models on api.openai.com and Azure OpenAI hosts.
Precedence: explicit responses/responses_compat > catalog
requiredApiFormat > explicit chat_completions > predicate > default. The
gpt-5.6 catalog entries deliberately set no requiredApiFormat so the
chat_completions escape hatch works for them. Register the gpt-5.6
descriptors and openai-vendor catalog entries (with reasoning metadata so
buildResponsesBody emits nested reasoning.effort).
Also fix a latent bug: the responses branch of buildRequestUrl emitted a
bare ${base}/responses and skipped Azure handling, so a forced/auto
responses route 404'd on Azure. It now mirrors buildChatCompletionsUrl —
deployment-style bases get the deployment path + api-version, bases
already containing /deployments/ keep their path and gain api-version,
while the modern Azure v1 surface (.../openai/v1) is preserved as
${base}/responses.
* fix(provider): honor OPENAI_AZURE_STYLE in the responses gate and use the Azure v1 responses surface
CodeRabbit review on #1961: the responses auto-route gate only checked
hostnames, ignoring the OPENAI_AZURE_STYLE override the shim honors for
custom/private Azure endpoints (APIM-fronted, private link). The Azure
detection is now a single shared predicate (isAzureStyleBaseUrl) used by
both the gate and the shim: OPENAI_AZURE_STYLE truthiness first, then
hostname matching.
Per Microsoft's docs, the Responses API exists only on the Azure v1
surface ({resource}/openai/v1/responses, model in the request body, no
api-version, no deployment-scoped form), so buildResponsesUrl now
normalizes any Azure-style base to that surface instead of mirroring the
chat builder's deployment-path + api-version form, which built endpoints
that do not exist.
https://learn.microsoft.com/en-us/azure/foundry/openai/how-to/responses
* fix(provider): address maintainer review on GPT-5.6 responses routing
Narrows the responses auto-route to verified variants (gpt-5.4/5.5/5.6
minus -mini/-nano, two-digit minors deliberately unmatched), corrects the
gpt-5.6 context window to 1,050,000 per the OpenAI model pages, documents
OPENAI_AZURE_STYLE's routing effect in .env.example, and hardens
buildResponsesUrl normalization (trailing-slash strip, stacked Azure
suffixes stripped until stable). Also pins --max-concurrency=1 on the
default test script and adds direct coverage for isAzureStyleBaseUrl, the
override-driven responses URL, and the gpt-5.6 catalog metadata.
* test(provider): pin responses predicate behavior for patch and suffixed ids
Pins gpt-5.4.1 (patch of a verified family, routed), gpt-5.41 (two-digit
minor read, not routed), and gpt-5.6-mini-high (mini variant, not routed)
so the predicate's edge behavior is asserted rather than implied.
* fix(provider): responses-contract test, regional OpenAI hosts, Azure deployment docs, env allowlist
Updates the providerOverride gpt-5.4 effort test to the Responses contract
the auto-route now sends (nested reasoning.effort, /responses URL); widens
the auto-route host check to OpenAI-controlled *.api.openai.com regional
endpoints; documents and regression-tests the explicit
OPENAI_API_FORMAT=responses path for arbitrary Azure deployment names; and
allows OPENAI_AZURE_STYLE through the --provider-env-file allowlist.
* fix(provider): narrow responses auto-route to verified minors and carry GPT-5.6 reasoning metadata on Azure
Narrows the model-name auto-route predicate from gpt-5.[4-9] to gpt-5.[4-6]
so unverified future minors (5.7/5.8/5.9) are not auto-routed, and syncs the
comment plus the two remaining "5.4+" phrasings in .env.example.
Fixes GPT-5.6 reasoning metadata on Azure and regional OpenAI bases: those
hosts resolve to route 'custom' (empty catalog), so resolveCatalogReasoningMetadata
returned undefined and the request dropped its default 'high' effort and the
reasoning.encrypted_content include. It now falls back to the openai vendor
catalog by model name on route 'custom', so gpt-5.6 carries its advertised
default 'high' and xhigh instead of incidental legacy controls.
* fix(provider): gate the custom-route reasoning fallback to verified OpenAI/Azure bases
The round-3 custom-route fallback also fired for arbitrary OpenAI-compatible
gateways (which resolve to route 'custom' too), injecting a default
reasoning_effort:high on a chat_completions request those gateways may reject
— a behavior change on third-party gateways the PR promised not to make.
Gate the fallback on baseUrlSupportsResponsesAutoRoute (the same verified
OpenAI/Azure surfaces the Responses auto-route uses), threading the request
base via the reasoning context (process.env fallback for the upstream path).
* test(provider): isolate OPENAI_API_BASE/OPENAI_AZURE_STYLE in the gpt-5.6 reasoning tests
The Azure/regional/gateway reasoning tests snapshot-restored only
CLAUDE_CODE_USE_OPENAI/OPENAI_BASE_URL/OPENAI_API_KEY. A leaked
OPENAI_AZURE_STYLE from another test would make isAzureStyleBaseUrl treat
the gateway base as Azure-style, firing the fallback and flipping the
'no injected default' assertion. Snapshot both keys and delete them before
each test's setup so a leaked value cannot corrupt the result.
* fix: preserve GPT-5.6 fallback and Azure routing
* fix: cover GPT-5.6 Azure edge cases
* fix: cover GPT-5 forced chat tools
* fix(provider): narrow Azure-style responses routing
* fix(provider): isolate agent overrides from Azure mode
* fix(provider): isolate override reasoning from Azure mode
* fix(provider): isolate override API format
* fix(provider): preserve responses effort routing
* fix(provider): restore safe context and clear Azure mode
* fix(provider): preserve Azure routing state
* fix(provider): preserve Azure profile routing
* fix(provider): preserve automatic Responses routing in profiles
---------
Co-authored-by: jatmn <the@jat.mn>
211 lines
7.3 KiB
JSON
211 lines
7.3 KiB
JSON
{
|
|
"name": "@gitlawb/openclaude",
|
|
"version": "0.24.0",
|
|
"description": "OpenClaude opens coding-agent workflows to any LLM — OpenAI, Gemini, DeepSeek, Ollama, and 200+ models",
|
|
"type": "module",
|
|
"bin": {
|
|
"openclaude": "./bin/openclaude"
|
|
},
|
|
"exports": {
|
|
"./package.json": "./package.json",
|
|
"./dist/cli.mjs": "./dist/cli.mjs",
|
|
"./sdk": {
|
|
"types": "./src/entrypoints/sdk.d.ts",
|
|
"import": "./dist/sdk.mjs"
|
|
}
|
|
},
|
|
"files": [
|
|
"bin/",
|
|
"dist/cli.mjs",
|
|
"dist/sdk.mjs",
|
|
"src/entrypoints/sdk.d.ts",
|
|
"src/entrypoints/sdk/coreTypes.generated.ts",
|
|
"scripts/windows/openclaude-aliases.ps1",
|
|
"vendor/node-domexception-shim/",
|
|
"docs/windows-aliases-and-launchers.md",
|
|
"README.md"
|
|
],
|
|
"scripts": {
|
|
"build": "bun run scripts/build.ts",
|
|
"integrations:generate": "bun run scripts/generate-integrations-artifacts.ts",
|
|
"integrations:check": "bun run scripts/generate-integrations-artifacts.ts --check",
|
|
"dev": "bun run build && node bin/openclaude",
|
|
"dev:profile": "bun run scripts/provider-launch.ts",
|
|
"dev:profile:fast": "bun run scripts/provider-launch.ts auto --fast --bare",
|
|
"dev:codex": "bun run scripts/provider-launch.ts codex",
|
|
"dev:openai": "bun run scripts/provider-launch.ts openai",
|
|
"dev:gemini": "bun run scripts/provider-launch.ts gemini",
|
|
"dev:ollama": "bun run scripts/provider-launch.ts ollama",
|
|
"dev:ollama:fast": "bun run scripts/provider-launch.ts ollama --fast --bare",
|
|
"dev:atomic-chat": "bun run scripts/provider-launch.ts atomic-chat",
|
|
"profile:init": "bun run scripts/provider-bootstrap.ts",
|
|
"profile:recommend": "bun run scripts/provider-recommend.ts",
|
|
"profile:auto": "bun run scripts/provider-recommend.ts --apply",
|
|
"profile:codex": "bun run profile:init -- --provider codex --model codexplan",
|
|
"profile:fast": "bun run profile:init -- --provider ollama --model llama3.2:3b",
|
|
"profile:code": "bun run profile:init -- --provider ollama --model qwen2.5-coder:7b",
|
|
"dev:fast": "bun run profile:fast && bun run dev:ollama:fast",
|
|
"dev:code": "bun run profile:code && bun run dev:profile",
|
|
"dev:grpc": "bun run scripts/start-grpc.ts",
|
|
"dev:grpc:cli": "bun run scripts/grpc-cli.ts",
|
|
"start": "node bin/openclaude",
|
|
"web:dev": "bun run --cwd web dev",
|
|
"web:build": "bun run --cwd web build",
|
|
"web:preview": "bun run --cwd web preview",
|
|
"web:typecheck": "bun run --cwd web typecheck",
|
|
"test": "bun test --feature=UNATTENDED_RETRY --max-concurrency=1",
|
|
"test:full": "bun test --feature=UNATTENDED_RETRY --max-concurrency=1",
|
|
"test:coverage": "bun test --feature=UNATTENDED_RETRY --coverage --coverage-reporter=lcov --coverage-dir=coverage --max-concurrency=1 && bun run scripts/render-coverage-heatmap.ts",
|
|
"test:coverage:ui": "bun run scripts/render-coverage-heatmap.ts",
|
|
"security:pr-scan": "bun run scripts/pr-intent-scan.ts",
|
|
"test:provider-recommendation": "bun test src/utils/providerRecommendation.test.ts src/utils/providerProfile.test.ts",
|
|
"typecheck": "tsc --noEmit",
|
|
"typecheck:type-tests": "bun run scripts/typecheck-type-tests.ts",
|
|
"smoke": "bun run build && node dist/cli.mjs --version",
|
|
"deadcode": "knip --include files,dependencies",
|
|
"check": "bun run smoke && bun run deadcode && bun run test:full",
|
|
"verify:privacy": "bun run scripts/verify-no-phone-home.ts",
|
|
"build:verified": "bun run build && bun run verify:privacy",
|
|
"test:provider": "bun test --feature=UNATTENDED_RETRY --max-concurrency=1 src/services/api/*.test.ts src/utils/context.test.ts",
|
|
"doctor:runtime": "bun run scripts/system-check.ts",
|
|
"doctor:runtime:json": "bun run scripts/system-check.ts --json",
|
|
"doctor:report": "bun run scripts/system-check.ts --out reports/doctor-runtime.json",
|
|
"hardening:check": "bun run smoke && bun run doctor:runtime",
|
|
"hardening:strict": "bun run typecheck && bun run hardening:check",
|
|
"prepack": "npm run build"
|
|
},
|
|
"dependencies": {
|
|
"@orama/orama": "^3.1.18",
|
|
"@orama/plugin-data-persistence": "^3.1.18",
|
|
"@vscode/ripgrep": "^1.17.1"
|
|
},
|
|
"devDependencies": {
|
|
"@alcalzone/ansi-tokenize": "0.3.0",
|
|
"@anthropic-ai/bedrock-sdk": "0.29.1",
|
|
"@anthropic-ai/foundry-sdk": "0.2.3",
|
|
"@anthropic-ai/sandbox-runtime": "0.0.55",
|
|
"@anthropic-ai/sdk": "0.94.0",
|
|
"@aws-sdk/client-bedrock": "3.1047.0",
|
|
"@aws-sdk/client-sts": "3.1047.0",
|
|
"@aws-sdk/credential-provider-node": "3.972.41",
|
|
"@azure/identity": "^4.13.1",
|
|
"@commander-js/extra-typings": "12.1.0",
|
|
"@grpc/grpc-js": "^1.14.3",
|
|
"@grpc/proto-loader": "^0.8.0",
|
|
"@modelcontextprotocol/sdk": "1.29.0",
|
|
"@smithy/core": "3.24.3",
|
|
"@smithy/node-http-handler": "4.7.3",
|
|
"@types/bun": "1.3.11",
|
|
"@types/node": "25.5.0",
|
|
"@types/react": "19.2.14",
|
|
"ajv": "8.18.0",
|
|
"auto-bind": "5.0.1",
|
|
"axios": "1.16.0",
|
|
"bidi-js": "1.0.3",
|
|
"chalk": "5.6.2",
|
|
"chokidar": "4.0.3",
|
|
"cli-boxes": "3.0.0",
|
|
"cli-highlight": "2.1.11",
|
|
"commander": "12.1.0",
|
|
"cross-spawn": "7.0.6",
|
|
"diff": "8.0.3",
|
|
"duck-duck-scrape": "^2.2.7",
|
|
"emoji-regex": "10.6.0",
|
|
"env-paths": "3.0.0",
|
|
"execa": "9.6.1",
|
|
"fflate": "0.8.2",
|
|
"figures": "6.1.0",
|
|
"fuse.js": "7.1.0",
|
|
"graphology": "0.26.0",
|
|
"get-east-asian-width": "1.5.0",
|
|
"google-auth-library": "10.6.2",
|
|
"https-proxy-agent": "7.0.6",
|
|
"ignore": "7.0.5",
|
|
"graphology-metrics": "2.4.0",
|
|
"indent-string": "5.0.0",
|
|
"js-tiktoken": "1.0.21",
|
|
"jsonc-parser": "3.3.1",
|
|
"knip": "^6.16.1",
|
|
"lodash-es": "4.18.1",
|
|
"lru-cache": "11.2.7",
|
|
"marked": "15.0.12",
|
|
"p-map": "7.0.4",
|
|
"picomatch": "4.0.4",
|
|
"proper-lockfile": "4.1.2",
|
|
"qrcode": "1.5.4",
|
|
"react": "19.2.4",
|
|
"react-compiler-runtime": "1.0.0",
|
|
"react-reconciler": "0.33.0",
|
|
"semver": "7.7.4",
|
|
"sharp": "^0.34.5",
|
|
"shell-quote": "1.8.4",
|
|
"signal-exit": "4.1.0",
|
|
"supports-hyperlinks": "3.2.0",
|
|
"tree-kill": "1.2.2",
|
|
"tree-sitter-wasms": "0.1.13",
|
|
"turndown": "7.2.2",
|
|
"type-fest": "4.41.0",
|
|
"typescript": "5.9.3",
|
|
"undici": "7.28.0",
|
|
"usehooks-ts": "3.1.1",
|
|
"web-tree-sitter": "0.25.10",
|
|
"vscode-languageserver-protocol": "3.17.5",
|
|
"wrap-ansi": "9.0.2",
|
|
"ws": "8.21.0",
|
|
"xss": "1.0.15",
|
|
"yaml": "2.8.3",
|
|
"zod": "3.25.76"
|
|
},
|
|
"peerDependencies": {
|
|
"@anthropic-ai/sdk": "^0.94.0",
|
|
"@modelcontextprotocol/sdk": "^1.29.0",
|
|
"react": "^19.0.0",
|
|
"react-reconciler": "^0.33.0"
|
|
},
|
|
"peerDependenciesMeta": {
|
|
"@anthropic-ai/sdk": {
|
|
"optional": true
|
|
},
|
|
"@modelcontextprotocol/sdk": {
|
|
"optional": true
|
|
},
|
|
"react": {
|
|
"optional": true
|
|
},
|
|
"react-reconciler": {
|
|
"optional": true
|
|
}
|
|
},
|
|
"engines": {
|
|
"node": ">=22.0.0"
|
|
},
|
|
"repository": {
|
|
"type": "git",
|
|
"url": "https://github.com/Gitlawb/openclaude.git"
|
|
},
|
|
"keywords": [
|
|
"claude-code",
|
|
"openai",
|
|
"llm",
|
|
"cli",
|
|
"agent",
|
|
"deepseek",
|
|
"ollama",
|
|
"gemini"
|
|
],
|
|
"license": "SEE LICENSE FILE",
|
|
"publishConfig": {
|
|
"access": "public"
|
|
},
|
|
"overrides": {
|
|
"ip-address": "10.2.0",
|
|
"google-auth-library": "10.6.2",
|
|
"lodash-es": "4.18.1",
|
|
"node-domexception": "file:vendor/node-domexception-shim"
|
|
},
|
|
"allowScripts": {
|
|
"protobufjs@7.6.4": true,
|
|
"sharp@0.34.5": true
|
|
}
|
|
}
|