Files
openclaw/extensions/openai/openclaw.plugin.json
Peter Steinberger d16e33e08e fix: restore trustworthy end-to-end QA and cross-channel delivery (#115404)
* fix(qa): repair verified end-to-end and channel regressions

* fix(gateway): make interrupted restart recovery lifecycle-safe

* test(heartbeat): target the canonical recovery session store

* fix(gateway): prioritize durable restart recovery before heartbeat

* fix(qa): preserve safe restart recovery and channel expiry

* fix(qa): fail closed and fence restart recovery

* test(agents): isolate restart recovery timing

* test(agents): prove actual restart retry timing

* fix(qa): report incompatible profile scenarios

* fix(scripts): resolve symlinked docker scheduler entrypoints

* fix(qa): require fresh native test evidence

* fix(heartbeat): fence active restart recovery delivery

* fix(gateway): consume untargeted restart acknowledgements

* fix(qa): satisfy exhaustive hosted validation gates

* fix(agents): fence stopped restart recovery dispatch

* style(agents): format restart recovery lifecycle regression

* test(gateway): isolate context prewarm sidecar lifecycle

* test(qa): make scenario process timeout cleanup deterministic

* fix(qa): stamp synthetic gateway configs with current version

* fix(openai): preserve vision capabilities in stale model catalogs

* test(qa): align profile channel rejection with current main

* fix(openai): forward supported moderation for image edits

* fix: restore latest-main CI and image edit documentation

* fix(qa): retain relocated code-mode evidence validation

* fix(openai): expose GPT-5.4 vision in static catalog

* fix(pricing): honor explicit model cost overrides

* test(pricing): keep isolated provider regressions deterministic

* fix(openai): inherit transport for discovered static models

* fix(gateway): honor agent-owned static image capabilities

* test(gateway): preserve prepared-snapshot attachment races

* test(gateway): isolate subagent persistence failure injection

* test(gateway): exercise concurrent voice replay admission

* fix(gateway): restore stale model image capabilities

* fix(agents): publish configured model vision capabilities

* fix(agents): isolate detached media transcript ownership

* test(agents): preserve generic transcript lock regression

* fix(gateway): require proven static model route identity

* fix(qa): accept bounded full-size generated image attachments

* fix(qa): require fresh script producer evidence

* test(qa): prove native E2E scenario execution
2026-07-29 12:45:27 -04:00

314 lines
10 KiB
JSON

{
"id": "openai",
"activation": {
"onStartup": false
},
"enabledByDefault": true,
"providers": ["openai"],
"providerUsageAuthEnvVars": {
"openai": ["OPENAI_ADMIN_KEY"]
},
"modelSupport": {
"modelPrefixes": ["gpt-", "o1", "o3", "o4"]
},
"providerEndpoints": [
{
"endpointClass": "openai-public",
"hosts": ["api.openai.com"],
"hostSuffixes": [".api.openai.com"]
},
{
"endpointClass": "openai",
"hosts": ["chatgpt.com"]
},
{
"endpointClass": "azure-openai",
"hostSuffixes": [".openai.azure.com"]
}
],
"providerRequest": {
"providers": {
"openai": {
"family": "openai-family"
}
}
},
"modelCatalog": {
"providers": {
"openai": {
"baseUrl": "https://api.openai.com/v1",
"api": "openai-responses",
"defaultUtilityModel": "gpt-5.6-luna",
"models": [
{
"id": "gpt-5.6",
"name": "GPT-5.6",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 1050000,
"contextTokens": 272000,
"maxTokens": 128000,
"cost": { "input": 5, "output": 30, "cacheRead": 0.5, "cacheWrite": 6.25 },
"thinkingLevelMap": { "off": "none", "xhigh": "xhigh", "max": "max" },
"compat": {
"supportsReasoningEffort": true,
"supportedReasoningEfforts": ["none", "low", "medium", "high", "xhigh", "max"],
"supportsTemperature": false,
"codeMode": "preferred"
}
},
{
"id": "gpt-5.6-sol",
"name": "GPT-5.6 Sol",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 1050000,
"contextTokens": 272000,
"maxTokens": 128000,
"cost": { "input": 5, "output": 30, "cacheRead": 0.5, "cacheWrite": 6.25 },
"thinkingLevelMap": { "off": "none", "xhigh": "xhigh", "max": "max" },
"compat": {
"supportsReasoningEffort": true,
"supportedReasoningEfforts": ["none", "low", "medium", "high", "xhigh", "max"],
"supportsTemperature": false,
"codeMode": "preferred"
}
},
{
"id": "gpt-5.6-terra",
"name": "GPT-5.6 Terra",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 1050000,
"contextTokens": 272000,
"maxTokens": 128000,
"cost": { "input": 2.5, "output": 15, "cacheRead": 0.25, "cacheWrite": 3.125 },
"thinkingLevelMap": { "off": "none", "xhigh": "xhigh", "max": "max" },
"compat": {
"supportsReasoningEffort": true,
"supportedReasoningEfforts": ["none", "low", "medium", "high", "xhigh", "max"],
"supportsTemperature": false,
"codeMode": "preferred"
}
},
{
"id": "gpt-5.6-luna",
"name": "GPT-5.6 Luna",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 1050000,
"contextTokens": 272000,
"maxTokens": 128000,
"cost": { "input": 1, "output": 6, "cacheRead": 0.1, "cacheWrite": 1.25 },
"thinkingLevelMap": { "off": "none", "xhigh": "xhigh", "max": "max" },
"compat": {
"supportsReasoningEffort": true,
"supportedReasoningEfforts": ["none", "low", "medium", "high", "xhigh", "max"],
"supportsTemperature": false,
"codeMode": "preferred"
}
},
{
"id": "gpt-5.5",
"name": "GPT-5.5",
"status": "deprecated",
"replacedBy": "gpt-5.6",
"reasoning": true,
"input": ["text", "image"],
"mediaInput": {
"image": { "maxSidePx": 6000, "preferredSidePx": 2048, "tokenMode": "detail" }
},
"contextWindow": 1050000,
"contextTokens": 272000,
"maxTokens": 128000,
"cost": { "input": 5, "output": 30, "cacheRead": 0.5, "cacheWrite": 0 },
"compat": { "codeMode": "preferred" }
},
{
"id": "gpt-5.5-pro",
"name": "gpt-5.5-pro",
"status": "deprecated",
"replacedBy": "gpt-5.6",
"reasoning": true,
"input": ["text", "image"],
"mediaInput": {
"image": { "maxSidePx": 6000, "preferredSidePx": 2048, "tokenMode": "detail" }
},
"contextWindow": 1050000,
"contextTokens": 272000,
"maxTokens": 128000,
"cost": { "input": 30, "output": 180, "cacheRead": 0, "cacheWrite": 0 },
"compat": { "codeMode": "preferred" }
},
{
"id": "gpt-5.4",
"name": "GPT-5.4",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 1050000,
"maxTokens": 128000,
"cost": { "input": 2.5, "output": 15, "cacheRead": 0.25, "cacheWrite": 0 }
},
{
"id": "gpt-5.4-pro",
"name": "GPT-5.4 Pro",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 1050000,
"maxTokens": 128000,
"cost": { "input": 30, "output": 180, "cacheRead": 0, "cacheWrite": 0 }
},
{
"id": "gpt-5.4-mini",
"name": "GPT-5.4 Mini",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 400000,
"maxTokens": 128000,
"cost": { "input": 0.75, "output": 4.5, "cacheRead": 0.075, "cacheWrite": 0 }
},
{
"id": "gpt-5.4-nano",
"name": "GPT-5.4 Nano",
"reasoning": true,
"input": ["text", "image"],
"contextWindow": 400000,
"maxTokens": 128000,
"cost": { "input": 0.2, "output": 1.25, "cacheRead": 0.02, "cacheWrite": 0 }
}
]
}
},
"aliases": {
"azure-openai-responses": {
"provider": "openai",
"api": "azure-openai-responses"
}
},
"discovery": {
"openai": "runtime"
},
"suppressions": [
{
"provider": "openai",
"model": "gpt-5.3-codex-spark",
"reason": "gpt-5.3-codex-spark is available only through ChatGPT/Codex OAuth. Run `openclaw models auth login --provider openai` and use openai/gpt-5.3-codex-spark with that OAuth profile; OpenAI API-key auth cannot use this model.",
"when": {
"baseUrlHosts": ["api.openai.com"]
}
},
{
"provider": "azure-openai-responses",
"model": "gpt-5.3-codex-spark",
"reason": "gpt-5.3-codex-spark is available only through ChatGPT/Codex OAuth. Run `openclaw models auth login --provider openai` and use openai/gpt-5.3-codex-spark with that OAuth profile; Azure/OpenAI API-key auth cannot use this model."
}
]
},
"setup": {
"providers": [
{
"id": "openai",
"envVars": ["OPENAI_API_KEY"]
}
]
},
"providerAuthChoices": [
{
"provider": "openai",
"method": "oauth",
"choiceId": "openai",
"appGuidedAuth": "oauth",
"choiceLabel": "ChatGPT Login",
"choiceHint": "Sign in with your ChatGPT or Codex subscription",
"assistantPriority": -40,
"groupId": "openai",
"groupLabel": "OpenAI",
"groupHint": "ChatGPT/Codex sign-in or API key",
"onboardingFeatured": true
},
{
"provider": "openai",
"method": "device-code",
"choiceId": "openai-device-code",
"appGuidedAuth": "device-code",
"choiceLabel": "ChatGPT Device Pairing",
"choiceHint": "Pair your ChatGPT account in browser with a device code",
"assistantPriority": -10,
"assistantVisibility": "manual-only",
"groupId": "openai",
"groupLabel": "OpenAI",
"groupHint": "ChatGPT/Codex sign-in or API key"
},
{
"provider": "openai",
"method": "api-key",
"choiceId": "openai-api-key",
"appGuidedSecret": true,
"choiceLabel": "OpenAI API Key",
"choiceHint": "Use your OpenAI API key directly",
"assistantPriority": 5,
"groupId": "openai",
"groupLabel": "OpenAI",
"groupHint": "ChatGPT/Codex sign-in or API key",
"onboardingFeatured": true,
"optionKey": "openaiApiKey",
"cliFlag": "--openai-api-key",
"cliOption": "--openai-api-key <key>",
"cliDescription": "OpenAI API Key"
}
],
"contracts": {
"speechProviders": ["openai"],
"realtimeTranscriptionProviders": ["openai"],
"realtimeVoiceProviders": ["openai"],
"memoryEmbeddingProviders": ["openai"],
"mediaUnderstandingProviders": ["openai"],
"imageGenerationProviders": ["openai"],
"videoGenerationProviders": ["openai"],
"usageProviders": ["openai"]
},
"imageGenerationProviderMetadata": {
"openai": {
"authSignals": [
{
"provider": "openai"
}
]
}
},
"videoGenerationProviderMetadata": {
"openai": {
"authSignals": [
{
"provider": "openai"
}
]
}
},
"mediaUnderstandingProviderMetadata": {
"openai": {
"capabilities": ["image", "audio"],
"defaultModels": {
"image": "gpt-5.6-sol",
"audio": "gpt-4o-transcribe"
},
"autoPriority": {
"image": 20,
"audio": 20
}
}
},
"configSchema": {
"type": "object",
"additionalProperties": false,
"properties": {
"personality": {
"type": "string",
"enum": ["friendly", "on", "off"],
"default": "friendly",
"description": "Legacy compatibility fallback for the shared GPT-5 friendly interaction-style overlay. Prefer agents.defaults.promptOverlays.gpt5.personality. `friendly` and `on` enable the style overlay; `off` disables only that style layer."
}
}
}
}