Compare commits
3 Commits
main
...
fix/codex-
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8a91af22a5 | ||
|
|
e4bfcff5a8 | ||
|
|
c42dc2e8c2 |
@ -11583,7 +11583,7 @@
|
|||||||
"filename": "src/agents/pi-embedded-runner/model.ts",
|
"filename": "src/agents/pi-embedded-runner/model.ts",
|
||||||
"hashed_secret": "e774aaeac31c6272107ba89080295e277050fa7c",
|
"hashed_secret": "e774aaeac31c6272107ba89080295e277050fa7c",
|
||||||
"is_verified": false,
|
"is_verified": false,
|
||||||
"line_number": 267
|
"line_number": 272
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"src/agents/pi-embedded-runner/run.overflow-compaction.mocks.shared.ts": [
|
"src/agents/pi-embedded-runner/run.overflow-compaction.mocks.shared.ts": [
|
||||||
|
|||||||
@ -14,6 +14,7 @@ Docs: https://docs.openclaw.ai
|
|||||||
- Mattermost replies: keep `root_id` pinned to the existing thread root when an agent replies inside a thread, while still using reply-target threading for top-level posts. (#27744) thanks @hnykda.
|
- Mattermost replies: keep `root_id` pinned to the existing thread root when an agent replies inside a thread, while still using reply-target threading for top-level posts. (#27744) thanks @hnykda.
|
||||||
- Agents/failover: detect Amazon Bedrock `Too many tokens per day` quota errors as rate limits across fallback, cron retry, and memory embeddings while keeping context-window `too many tokens per request` errors out of the rate-limit lane. (#39377) Thanks @gambletan.
|
- Agents/failover: detect Amazon Bedrock `Too many tokens per day` quota errors as rate limits across fallback, cron retry, and memory embeddings while keeping context-window `too many tokens per request` errors out of the rate-limit lane. (#39377) Thanks @gambletan.
|
||||||
- Android/Play distribution: remove self-update, background location, `screen.record`, and background mic capture from the Android app, narrow the foreground service to `dataSync` only, and clean up the legacy `location.enabledMode=always` preference migration. (#39660) Thanks @obviyus.
|
- Android/Play distribution: remove self-update, background location, `screen.record`, and background mic capture from the Android app, narrow the foreground service to `dataSync` only, and clean up the legacy `location.enabledMode=always` preference migration. (#39660) Thanks @obviyus.
|
||||||
|
- Agents/openai-codex model resolution: fall through from inline `openai-codex` model entries without an `api` so GPT-5.4 keeps the codex transport and still preserves configured `baseUrl` and headers. (#39753) Thanks @justinhuangcode.
|
||||||
|
|
||||||
## 2026.3.7
|
## 2026.3.7
|
||||||
|
|
||||||
|
|||||||
@ -22,7 +22,7 @@ enum HostEnvSecurityPolicy {
|
|||||||
"PS4",
|
"PS4",
|
||||||
"GCONV_PATH",
|
"GCONV_PATH",
|
||||||
"IFS",
|
"IFS",
|
||||||
"SSLKEYLOGFILE",
|
"SSLKEYLOGFILE"
|
||||||
]
|
]
|
||||||
|
|
||||||
static let blockedOverrideKeys: Set<String> = [
|
static let blockedOverrideKeys: Set<String> = [
|
||||||
@ -50,17 +50,17 @@ enum HostEnvSecurityPolicy {
|
|||||||
"OPENSSL_ENGINES",
|
"OPENSSL_ENGINES",
|
||||||
"PYTHONSTARTUP",
|
"PYTHONSTARTUP",
|
||||||
"WGETRC",
|
"WGETRC",
|
||||||
"CURL_HOME",
|
"CURL_HOME"
|
||||||
]
|
]
|
||||||
|
|
||||||
static let blockedOverridePrefixes: [String] = [
|
static let blockedOverridePrefixes: [String] = [
|
||||||
"GIT_CONFIG_",
|
"GIT_CONFIG_",
|
||||||
"NPM_CONFIG_",
|
"NPM_CONFIG_"
|
||||||
]
|
]
|
||||||
|
|
||||||
static let blockedPrefixes: [String] = [
|
static let blockedPrefixes: [String] = [
|
||||||
"DYLD_",
|
"DYLD_",
|
||||||
"LD_",
|
"LD_",
|
||||||
"BASH_FUNC_",
|
"BASH_FUNC_"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
@ -638,6 +638,32 @@ describe("resolveModel", () => {
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("uses codex fallback when inline model omits api (#39682)", () => {
|
||||||
|
mockOpenAICodexTemplateModel();
|
||||||
|
|
||||||
|
const cfg: OpenClawConfig = {
|
||||||
|
models: {
|
||||||
|
providers: {
|
||||||
|
"openai-codex": {
|
||||||
|
baseUrl: "https://custom.example.com",
|
||||||
|
headers: { "X-Custom-Auth": "token-123" },
|
||||||
|
models: [{ id: "gpt-5.4" }],
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
} as unknown as OpenClawConfig;
|
||||||
|
|
||||||
|
const result = resolveModel("openai-codex", "gpt-5.4", "/tmp/agent", cfg);
|
||||||
|
expect(result.error).toBeUndefined();
|
||||||
|
expect(result.model).toMatchObject({
|
||||||
|
api: "openai-codex-responses",
|
||||||
|
baseUrl: "https://custom.example.com",
|
||||||
|
headers: { "X-Custom-Auth": "token-123" },
|
||||||
|
id: "gpt-5.4",
|
||||||
|
provider: "openai-codex",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
it("includes auth hint for unknown ollama models (#17328)", () => {
|
it("includes auth hint for unknown ollama models (#17328)", () => {
|
||||||
// resetMockDiscoverModels() in beforeEach already sets find → null
|
// resetMockDiscoverModels() in beforeEach already sets find → null
|
||||||
const result = resolveModel("ollama", "gemma3:4b", "/tmp/agent");
|
const result = resolveModel("ollama", "gemma3:4b", "/tmp/agent");
|
||||||
|
|||||||
@ -160,7 +160,7 @@ export function resolveModelWithRegistry(params: {
|
|||||||
const inlineMatch = inlineModels.find(
|
const inlineMatch = inlineModels.find(
|
||||||
(entry) => normalizeProviderId(entry.provider) === normalizedProvider && entry.id === modelId,
|
(entry) => normalizeProviderId(entry.provider) === normalizedProvider && entry.id === modelId,
|
||||||
);
|
);
|
||||||
if (inlineMatch) {
|
if (inlineMatch?.api) {
|
||||||
return normalizeModelCompat(inlineMatch as Model<Api>);
|
return normalizeModelCompat(inlineMatch as Model<Api>);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user