fix(ollama): unify context window handling across discovery, merge, and OpenAI-compat transport#29205
Conversation
72be736 to
ff24720
Compare
ff24720 to
875b870
Compare
🔒 Aisle Security AnalysisWe found 4 potential security issue(s) in this PR:
1. 🟡 Potential denial-of-service via synchronous Ollama model discovery (/api/show) on every agent run
DescriptionThe new Ollama discovery logic performs per-model Key points:
Impact:
Vulnerable code (sequential batched for (let index = 0; index < modelsToInspect.length; index += OLLAMA_SHOW_CONCURRENCY) {
const batch = modelsToInspect.slice(index, index + OLLAMA_SHOW_CONCURRENCY);
const batchDiscovered = await Promise.all(
batch.map(async (model) => {
const modelId = model.name;
const contextWindow = await queryOllamaContextWindow(apiBase, modelId);
...
return { ... };
}),
);
discovered.push(...batchDiscovered);
}RecommendationReduce DoS risk by moving discovery off the per-run critical path and bounding total time. Recommended changes (one or more):
Example: global deadline + early exit: const deadlineMs = 5000; // total budget for /api/show inspection
const deadlineAt = Date.now() + deadlineMs;
for (let index = 0; index < modelsToInspect.length; index += OLLAMA_SHOW_CONCURRENCY) {
if (Date.now() > deadlineAt) break;
const batch = modelsToInspect.slice(index, index + OLLAMA_SHOW_CONCURRENCY);
const batchDiscovered = await Promise.all(
batch.map(async (model) => {
const remaining = Math.max(0, deadlineAt - Date.now());
const signal = AbortSignal.timeout(Math.min(3000, remaining));
return queryOllamaContextWindow(apiBase, model.name, signal);
}),
);
...
}Also consider making 2. 🟡 Unbounded Ollama OpenAI-compat
|
| Property | Value |
|---|---|
| Severity | Medium |
| CWE | CWE-400 |
| Location | src/agents/pi-embedded-runner/run/attempt.ts:874-893 |
Description
runEmbeddedAttempt() now injects options.num_ctx into every OpenAI-compatible request when the provider is detected as Ollama-compatible.
Security impact:
num_ctxis derived directly frommodel.contextWindow/model.maxTokens(or a default) without any upper bound.contextWindowcan come from user-controlled configuration (and for Ollama discovery is sourced from/api/show), so it can be set extremely large.- For Ollama,
num_ctxinfluences the context size the server attempts to allocate for inference; setting it very large can significantly increase CPU/RAM usage per request. - In deployments where untrusted users can trigger model runs (e.g., a hosted OpenClaw Gateway / multi-tenant environment), an attacker can repeatedly invoke the model to amplify resource consumption and cause denial of service.
Vulnerable code:
const numCtx = Math.max(
1,
Math.floor(
params.model.contextWindow ?? params.model.maxTokens ?? DEFAULT_CONTEXT_TOKENS,
),
);
activeSession.agent.streamFn = wrapOllamaCompatNumCtx(activeSession.agent.streamFn, numCtx);and the wrapper that writes it into the outgoing payload:
(payloadRecord.options as Record<string, unknown>).num_ctx = numCtx;Recommendation
Add a hard upper bound (and ideally a configurable bound) for injected num_ctx, and validate/discard absurd contextWindow values coming from config or discovery.
Example mitigation:
const MAX_OLLAMA_NUM_CTX = 262_144; // choose a safe cap for your deployment
const raw = params.model.contextWindow ?? params.model.maxTokens ?? DEFAULT_CONTEXT_TOKENS;
const numCtx = Math.min(
MAX_OLLAMA_NUM_CTX,
Math.max(1, Math.floor(raw)),
);Additional hardening options:
- Only inject
num_ctxwhenbaseUrlis localhost/loopback unless explicitly opted-in for remote hosts. - Consider defaulting
injectNumCtxForOpenAICompattofalsefor safety, or auto-disable when the upstream is not clearly Ollama. - Add a
zodmax constraint forcontextWindow/maxTokensin configuration schemas (or clamp at runtime) to prevent misconfiguration-driven outages.
3. 🔵 SSRF via configurable Ollama baseUrl used for automatic model discovery (/api/tags, /api/show)
| Property | Value |
|---|---|
| Severity | Low |
| CWE | CWE-918 |
| Location | src/agents/models-config.providers.ts:246-251 |
Description
discoverOllamaModels() performs HTTP requests to an Ollama native API base derived directly from models.providers.ollama.baseUrl (config), without validation or network allowlisting.
With this change, model discovery now performs:
GET ${apiBase}/api/tags- Up to 200 additional
POST ${apiBase}/api/showrequests (batched with concurrency 8)
If an attacker can influence models.providers.ollama.baseUrl (e.g., via a config injection path, runtime overrides, or multi-tenant user-supplied config), this becomes a server-side request primitive that can target internal services (including link-local/cloud metadata IPs) as long as the target host exposes the expected paths. Node's fetch() follows redirects by default, which can also enable pivoting to other hosts.
Vulnerable code:
const response = await fetch(`${apiBase}/api/show`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ name: modelName }),
signal: AbortSignal.timeout(3000),
});Recommendation
Harden Ollama discovery so a configurable base URL cannot be abused as an SSRF gadget:
- Validate and constrain
baseUrl/apiBasebefore use (scheme, hostname, port). - Consider defaulting discovery to localhost-only and requiring an explicit opt-in flag for remote discovery.
- Disable redirects (or only allow same-origin redirects) to prevent cross-host pivoting.
Example (sketch):
function validateOllamaBaseUrl(raw: string): string {
const u = new URL(raw);
if (u.protocol !== "http:" && u.protocol !== "https:") {
throw new Error("Invalid Ollama baseUrl scheme");
}
// safest default: only allow loopback unless explicitly opted-in
if (!["127.0.0.1", "localhost", "::1"].includes(u.hostname)) {
throw new Error("Remote Ollama discovery is not allowed");
}
u.username = "";
u.password = "";
return u.toString().replace(/\/+$/, "");
}
await fetch(`${apiBase}/api/show`, {
method: "POST",
redirect: "error", // prevent pivot
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ name: modelName }),
signal: AbortSignal.timeout(3000),
});If remote Ollama is a supported feature, replace the loopback-only check with an explicit allowlist (exact hostnames) or IP-range blocking (e.g., deny 169.254.0.0/16, RFC1918, etc.) depending on your threat model.
4. 🔵 Unbounded contextWindow/maxTokens preserved during provider merge can enable resource-exhaustion (DoS) via large token limits
| Property | Value |
|---|---|
| Severity | Low |
| CWE | CWE-400 |
| Location | src/agents/models-config.ts:18-69 |
Description
mergeProviderModels() now prefers the higher of the explicit (user-configured) and implicit (catalog) token limits for contextWindow/maxTokens.
Because there is no upper bound enforced on these values (config schema only requires .positive()), a config or generated models.json entry can set extremely large token limits, which then propagate into runtime behavior that uses these numbers to size budgets and inject provider parameters:
- The explicit larger values are preserved during merge (changed behavior), making it easier for very large values to reach runtime.
- Downstream, these values are used to derive
num_ctxfor Ollama OpenAI-compat requests (payload.options.num_ctx) and to set context-guard budgets. Excessively large values can effectively disable truncation/guardrails and/or cause providers (and potentially the client) to consume excessive CPU/memory, resulting in denial-of-service.
Vulnerable code (merge preserves larger explicit limits):
function resolvePreferredTokenLimit(explicitValue: number, implicitValue: number): number {
return explicitValue > implicitValue ? explicitValue : implicitValue;
}
...
contextWindow: resolvePreferredTokenLimit(
explicitModel.contextWindow,
implicitModel.contextWindow,
),
maxTokens: resolvePreferredTokenLimit(explicitModel.maxTokens, implicitModel.maxTokens),Why this is security-relevant:
- If the configuration (or model metadata used to produce it) is influenced by an untrusted party (e.g., in a hosted/multi-tenant setup, or when pointing at an untrusted Ollama endpoint that reports a huge
context_length), the process may send requests with huge context settings and/or retain extremely large tool/model outputs in memory.
Recommendation
Add hard upper bounds (and integer/finite checks) for contextWindow and maxTokens, and clamp at merge-time and/or normalization-time.
Suggested approach:
- Enforce bounds in schema and normalization (recommended):
const MAX_CONTEXT_WINDOW = 1_000_000; // choose a safe global cap
const MAX_MAX_TOKENS = 262_144; // choose a safe global cap
const TokenLimitSchema = z.number().int().positive().finite();
contextWindow: TokenLimitSchema.max(MAX_CONTEXT_WINDOW).optional(),
maxTokens: TokenLimitSchema.max(MAX_MAX_TOKENS).optional(),- Also clamp after merge (defense in depth):
function clampTokenLimit(value: number, cap: number): number {
return Math.min(Math.max(1, Math.floor(value)), cap);
}
const contextWindow = clampTokenLimit(
resolvePreferredTokenLimit(explicitModel.contextWindow, implicitModel.contextWindow),
MAX_CONTEXT_WINDOW,
);
const maxTokens = clampTokenLimit(
resolvePreferredTokenLimit(explicitModel.maxTokens, implicitModel.maxTokens),
Math.min(MAX_MAX_TOKENS, contextWindow),
);This prevents extreme values from disabling truncation safeguards or being propagated into provider-specific knobs like num_ctx.
Analyzed PR: #29205 at commit 108bd73
Greptile SummaryUnifies Ollama context window handling across discovery, merging, and OpenAI-compatible transport to prevent silent low-context fallback behavior. Key improvements:
Previous review feedback addressed:
Minor observation: All changes are backward-compatible with proper fallbacks and sensible defaults. Confidence Score: 5/5
Last reviewed commit: 108bd73 |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: f342fb9d7f
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
…nd OpenAI-compat transport (openclaw#29205) * fix(ollama): inject num_ctx for OpenAI-compatible transport * fix(ollama): discover per-model context and preserve higher limits * fix(agents): prefer matching provider model for fallback limits * fix(types): require numeric token limits in provider model merge * fix(types): accept unknown payload in ollama num_ctx wrapper * fix(types): simplify ollama settled-result extraction * config(models): add provider flag for Ollama OpenAI num_ctx injection * config(schema): allow provider num_ctx injection flag * config(labels): label provider num_ctx injection flag * config(help): document provider num_ctx injection flag * agents(ollama): gate OpenAI num_ctx injection with provider config * tests(ollama): cover provider num_ctx injection flag behavior * docs(config): list provider num_ctx injection option * docs(ollama): document OpenAI num_ctx injection toggle * docs(config): clarify merge token-limit precedence * config(help): note merge uses higher model token limits * fix(ollama): cap /api/show discovery concurrency * fix(ollama): restrict num_ctx injection to OpenAI compat * tests(ollama): cover ipv6 and compat num_ctx gating * fix(ollama): detect remote compat endpoints for ollama-labeled providers * fix(ollama): cap per-model /api/show lookups to bound discovery load
* Changelog: add LanceDB custom baseUrl + dimensions entry (openclaw#17874) * Changelog: add Ollama autodiscovery hardening entry (openclaw#29201) * Changelog: add Ollama context-window unification entry (openclaw#29205) * Changelog: add compaction audit injection removal entry (openclaw#28507) * Changelog: add browser url alias entry (openclaw#29260) * Changelog: add codex weekly usage label entry (openclaw#26267)
…nd OpenAI-compat transport (openclaw#29205) * fix(ollama): inject num_ctx for OpenAI-compatible transport * fix(ollama): discover per-model context and preserve higher limits * fix(agents): prefer matching provider model for fallback limits * fix(types): require numeric token limits in provider model merge * fix(types): accept unknown payload in ollama num_ctx wrapper * fix(types): simplify ollama settled-result extraction * config(models): add provider flag for Ollama OpenAI num_ctx injection * config(schema): allow provider num_ctx injection flag * config(labels): label provider num_ctx injection flag * config(help): document provider num_ctx injection flag * agents(ollama): gate OpenAI num_ctx injection with provider config * tests(ollama): cover provider num_ctx injection flag behavior * docs(config): list provider num_ctx injection option * docs(ollama): document OpenAI num_ctx injection toggle * docs(config): clarify merge token-limit precedence * config(help): note merge uses higher model token limits * fix(ollama): cap /api/show discovery concurrency * fix(ollama): restrict num_ctx injection to OpenAI compat * tests(ollama): cover ipv6 and compat num_ctx gating * fix(ollama): detect remote compat endpoints for ollama-labeled providers * fix(ollama): cap per-model /api/show lookups to bound discovery load
* Changelog: add LanceDB custom baseUrl + dimensions entry (openclaw#17874) * Changelog: add Ollama autodiscovery hardening entry (openclaw#29201) * Changelog: add Ollama context-window unification entry (openclaw#29205) * Changelog: add compaction audit injection removal entry (openclaw#28507) * Changelog: add browser url alias entry (openclaw#29260) * Changelog: add codex weekly usage label entry (openclaw#26267)
…nd OpenAI-compat transport (openclaw#29205) * fix(ollama): inject num_ctx for OpenAI-compatible transport * fix(ollama): discover per-model context and preserve higher limits * fix(agents): prefer matching provider model for fallback limits * fix(types): require numeric token limits in provider model merge * fix(types): accept unknown payload in ollama num_ctx wrapper * fix(types): simplify ollama settled-result extraction * config(models): add provider flag for Ollama OpenAI num_ctx injection * config(schema): allow provider num_ctx injection flag * config(labels): label provider num_ctx injection flag * config(help): document provider num_ctx injection flag * agents(ollama): gate OpenAI num_ctx injection with provider config * tests(ollama): cover provider num_ctx injection flag behavior * docs(config): list provider num_ctx injection option * docs(ollama): document OpenAI num_ctx injection toggle * docs(config): clarify merge token-limit precedence * config(help): note merge uses higher model token limits * fix(ollama): cap /api/show discovery concurrency * fix(ollama): restrict num_ctx injection to OpenAI compat * tests(ollama): cover ipv6 and compat num_ctx gating * fix(ollama): detect remote compat endpoints for ollama-labeled providers * fix(ollama): cap per-model /api/show lookups to bound discovery load
* Changelog: add LanceDB custom baseUrl + dimensions entry (openclaw#17874) * Changelog: add Ollama autodiscovery hardening entry (openclaw#29201) * Changelog: add Ollama context-window unification entry (openclaw#29205) * Changelog: add compaction audit injection removal entry (openclaw#28507) * Changelog: add browser url alias entry (openclaw#29260) * Changelog: add codex weekly usage label entry (openclaw#26267)
* Changelog: add LanceDB custom baseUrl + dimensions entry (openclaw#17874) * Changelog: add Ollama autodiscovery hardening entry (openclaw#29201) * Changelog: add Ollama context-window unification entry (openclaw#29205) * Changelog: add compaction audit injection removal entry (openclaw#28507) * Changelog: add browser url alias entry (openclaw#29260) * Changelog: add codex weekly usage label entry (openclaw#26267) (cherry picked from commit 8090cb4) # Conflicts: # CHANGELOG.md
…nd OpenAI-compat transport (openclaw#29205) * fix(ollama): inject num_ctx for OpenAI-compatible transport * fix(ollama): discover per-model context and preserve higher limits * fix(agents): prefer matching provider model for fallback limits * fix(types): require numeric token limits in provider model merge * fix(types): accept unknown payload in ollama num_ctx wrapper * fix(types): simplify ollama settled-result extraction * config(models): add provider flag for Ollama OpenAI num_ctx injection * config(schema): allow provider num_ctx injection flag * config(labels): label provider num_ctx injection flag * config(help): document provider num_ctx injection flag * agents(ollama): gate OpenAI num_ctx injection with provider config * tests(ollama): cover provider num_ctx injection flag behavior * docs(config): list provider num_ctx injection option * docs(ollama): document OpenAI num_ctx injection toggle * docs(config): clarify merge token-limit precedence * config(help): note merge uses higher model token limits * fix(ollama): cap /api/show discovery concurrency * fix(ollama): restrict num_ctx injection to OpenAI compat * tests(ollama): cover ipv6 and compat num_ctx gating * fix(ollama): detect remote compat endpoints for ollama-labeled providers * fix(ollama): cap per-model /api/show lookups to bound discovery load
* Changelog: add LanceDB custom baseUrl + dimensions entry (openclaw#17874) * Changelog: add Ollama autodiscovery hardening entry (openclaw#29201) * Changelog: add Ollama context-window unification entry (openclaw#29205) * Changelog: add compaction audit injection removal entry (openclaw#28507) * Changelog: add browser url alias entry (openclaw#29260) * Changelog: add codex weekly usage label entry (openclaw#26267)
…nd OpenAI-compat transport (openclaw#29205) * fix(ollama): inject num_ctx for OpenAI-compatible transport * fix(ollama): discover per-model context and preserve higher limits * fix(agents): prefer matching provider model for fallback limits * fix(types): require numeric token limits in provider model merge * fix(types): accept unknown payload in ollama num_ctx wrapper * fix(types): simplify ollama settled-result extraction * config(models): add provider flag for Ollama OpenAI num_ctx injection * config(schema): allow provider num_ctx injection flag * config(labels): label provider num_ctx injection flag * config(help): document provider num_ctx injection flag * agents(ollama): gate OpenAI num_ctx injection with provider config * tests(ollama): cover provider num_ctx injection flag behavior * docs(config): list provider num_ctx injection option * docs(ollama): document OpenAI num_ctx injection toggle * docs(config): clarify merge token-limit precedence * config(help): note merge uses higher model token limits * fix(ollama): cap /api/show discovery concurrency * fix(ollama): restrict num_ctx injection to OpenAI compat * tests(ollama): cover ipv6 and compat num_ctx gating * fix(ollama): detect remote compat endpoints for ollama-labeled providers * fix(ollama): cap per-model /api/show lookups to bound discovery load
* Changelog: add LanceDB custom baseUrl + dimensions entry (openclaw#17874) * Changelog: add Ollama autodiscovery hardening entry (openclaw#29201) * Changelog: add Ollama context-window unification entry (openclaw#29205) * Changelog: add compaction audit injection removal entry (openclaw#28507) * Changelog: add browser url alias entry (openclaw#29260) * Changelog: add codex weekly usage label entry (openclaw#26267)
…nd OpenAI-compat transport (openclaw#29205) * fix(ollama): inject num_ctx for OpenAI-compatible transport * fix(ollama): discover per-model context and preserve higher limits * fix(agents): prefer matching provider model for fallback limits * fix(types): require numeric token limits in provider model merge * fix(types): accept unknown payload in ollama num_ctx wrapper * fix(types): simplify ollama settled-result extraction * config(models): add provider flag for Ollama OpenAI num_ctx injection * config(schema): allow provider num_ctx injection flag * config(labels): label provider num_ctx injection flag * config(help): document provider num_ctx injection flag * agents(ollama): gate OpenAI num_ctx injection with provider config * tests(ollama): cover provider num_ctx injection flag behavior * docs(config): list provider num_ctx injection option * docs(ollama): document OpenAI num_ctx injection toggle * docs(config): clarify merge token-limit precedence * config(help): note merge uses higher model token limits * fix(ollama): cap /api/show discovery concurrency * fix(ollama): restrict num_ctx injection to OpenAI compat * tests(ollama): cover ipv6 and compat num_ctx gating * fix(ollama): detect remote compat endpoints for ollama-labeled providers * fix(ollama): cap per-model /api/show lookups to bound discovery load
* Changelog: add LanceDB custom baseUrl + dimensions entry (openclaw#17874) * Changelog: add Ollama autodiscovery hardening entry (openclaw#29201) * Changelog: add Ollama context-window unification entry (openclaw#29205) * Changelog: add compaction audit injection removal entry (openclaw#28507) * Changelog: add browser url alias entry (openclaw#29260) * Changelog: add codex weekly usage label entry (openclaw#26267)
…nd OpenAI-compat transport (openclaw#29205) * fix(ollama): inject num_ctx for OpenAI-compatible transport * fix(ollama): discover per-model context and preserve higher limits * fix(agents): prefer matching provider model for fallback limits * fix(types): require numeric token limits in provider model merge * fix(types): accept unknown payload in ollama num_ctx wrapper * fix(types): simplify ollama settled-result extraction * config(models): add provider flag for Ollama OpenAI num_ctx injection * config(schema): allow provider num_ctx injection flag * config(labels): label provider num_ctx injection flag * config(help): document provider num_ctx injection flag * agents(ollama): gate OpenAI num_ctx injection with provider config * tests(ollama): cover provider num_ctx injection flag behavior * docs(config): list provider num_ctx injection option * docs(ollama): document OpenAI num_ctx injection toggle * docs(config): clarify merge token-limit precedence * config(help): note merge uses higher model token limits * fix(ollama): cap /api/show discovery concurrency * fix(ollama): restrict num_ctx injection to OpenAI compat * tests(ollama): cover ipv6 and compat num_ctx gating * fix(ollama): detect remote compat endpoints for ollama-labeled providers * fix(ollama): cap per-model /api/show lookups to bound discovery load
* Changelog: add LanceDB custom baseUrl + dimensions entry (openclaw#17874) * Changelog: add Ollama autodiscovery hardening entry (openclaw#29201) * Changelog: add Ollama context-window unification entry (openclaw#29205) * Changelog: add compaction audit injection removal entry (openclaw#28507) * Changelog: add browser url alias entry (openclaw#29260) * Changelog: add codex weekly usage label entry (openclaw#26267)
…nd OpenAI-compat transport (openclaw#29205) * fix(ollama): inject num_ctx for OpenAI-compatible transport * fix(ollama): discover per-model context and preserve higher limits * fix(agents): prefer matching provider model for fallback limits * fix(types): require numeric token limits in provider model merge * fix(types): accept unknown payload in ollama num_ctx wrapper * fix(types): simplify ollama settled-result extraction * config(models): add provider flag for Ollama OpenAI num_ctx injection * config(schema): allow provider num_ctx injection flag * config(labels): label provider num_ctx injection flag * config(help): document provider num_ctx injection flag * agents(ollama): gate OpenAI num_ctx injection with provider config * tests(ollama): cover provider num_ctx injection flag behavior * docs(config): list provider num_ctx injection option * docs(ollama): document OpenAI num_ctx injection toggle * docs(config): clarify merge token-limit precedence * config(help): note merge uses higher model token limits * fix(ollama): cap /api/show discovery concurrency * fix(ollama): restrict num_ctx injection to OpenAI compat * tests(ollama): cover ipv6 and compat num_ctx gating * fix(ollama): detect remote compat endpoints for ollama-labeled providers * fix(ollama): cap per-model /api/show lookups to bound discovery load
* Changelog: add LanceDB custom baseUrl + dimensions entry (openclaw#17874) * Changelog: add Ollama autodiscovery hardening entry (openclaw#29201) * Changelog: add Ollama context-window unification entry (openclaw#29205) * Changelog: add compaction audit injection removal entry (openclaw#28507) * Changelog: add browser url alias entry (openclaw#29260) * Changelog: add codex weekly usage label entry (openclaw#26267)
…nd OpenAI-compat transport (openclaw#29205) * fix(ollama): inject num_ctx for OpenAI-compatible transport * fix(ollama): discover per-model context and preserve higher limits * fix(agents): prefer matching provider model for fallback limits * fix(types): require numeric token limits in provider model merge * fix(types): accept unknown payload in ollama num_ctx wrapper * fix(types): simplify ollama settled-result extraction * config(models): add provider flag for Ollama OpenAI num_ctx injection * config(schema): allow provider num_ctx injection flag * config(labels): label provider num_ctx injection flag * config(help): document provider num_ctx injection flag * agents(ollama): gate OpenAI num_ctx injection with provider config * tests(ollama): cover provider num_ctx injection flag behavior * docs(config): list provider num_ctx injection option * docs(ollama): document OpenAI num_ctx injection toggle * docs(config): clarify merge token-limit precedence * config(help): note merge uses higher model token limits * fix(ollama): cap /api/show discovery concurrency * fix(ollama): restrict num_ctx injection to OpenAI compat * tests(ollama): cover ipv6 and compat num_ctx gating * fix(ollama): detect remote compat endpoints for ollama-labeled providers * fix(ollama): cap per-model /api/show lookups to bound discovery load
* Changelog: add LanceDB custom baseUrl + dimensions entry (openclaw#17874) * Changelog: add Ollama autodiscovery hardening entry (openclaw#29201) * Changelog: add Ollama context-window unification entry (openclaw#29205) * Changelog: add compaction audit injection removal entry (openclaw#28507) * Changelog: add browser url alias entry (openclaw#29260) * Changelog: add codex weekly usage label entry (openclaw#26267)
…nd OpenAI-compat transport (openclaw#29205) * fix(ollama): inject num_ctx for OpenAI-compatible transport * fix(ollama): discover per-model context and preserve higher limits * fix(agents): prefer matching provider model for fallback limits * fix(types): require numeric token limits in provider model merge * fix(types): accept unknown payload in ollama num_ctx wrapper * fix(types): simplify ollama settled-result extraction * config(models): add provider flag for Ollama OpenAI num_ctx injection * config(schema): allow provider num_ctx injection flag * config(labels): label provider num_ctx injection flag * config(help): document provider num_ctx injection flag * agents(ollama): gate OpenAI num_ctx injection with provider config * tests(ollama): cover provider num_ctx injection flag behavior * docs(config): list provider num_ctx injection option * docs(ollama): document OpenAI num_ctx injection toggle * docs(config): clarify merge token-limit precedence * config(help): note merge uses higher model token limits * fix(ollama): cap /api/show discovery concurrency * fix(ollama): restrict num_ctx injection to OpenAI compat * tests(ollama): cover ipv6 and compat num_ctx gating * fix(ollama): detect remote compat endpoints for ollama-labeled providers * fix(ollama): cap per-model /api/show lookups to bound discovery load
* Changelog: add LanceDB custom baseUrl + dimensions entry (openclaw#17874) * Changelog: add Ollama autodiscovery hardening entry (openclaw#29201) * Changelog: add Ollama context-window unification entry (openclaw#29205) * Changelog: add compaction audit injection removal entry (openclaw#28507) * Changelog: add browser url alias entry (openclaw#29260) * Changelog: add codex weekly usage label entry (openclaw#26267)
* Changelog: add LanceDB custom baseUrl + dimensions entry (openclaw#17874) * Changelog: add Ollama autodiscovery hardening entry (openclaw#29201) * Changelog: add Ollama context-window unification entry (openclaw#29205) * Changelog: add compaction audit injection removal entry (openclaw#28507) * Changelog: add browser url alias entry (openclaw#29260) * Changelog: add codex weekly usage label entry (openclaw#26267) (cherry picked from commit 8090cb4) # Conflicts: # CHANGELOG.md
…nd OpenAI-compat transport (openclaw#29205) * fix(ollama): inject num_ctx for OpenAI-compatible transport * fix(ollama): discover per-model context and preserve higher limits * fix(agents): prefer matching provider model for fallback limits * fix(types): require numeric token limits in provider model merge * fix(types): accept unknown payload in ollama num_ctx wrapper * fix(types): simplify ollama settled-result extraction * config(models): add provider flag for Ollama OpenAI num_ctx injection * config(schema): allow provider num_ctx injection flag * config(labels): label provider num_ctx injection flag * config(help): document provider num_ctx injection flag * agents(ollama): gate OpenAI num_ctx injection with provider config * tests(ollama): cover provider num_ctx injection flag behavior * docs(config): list provider num_ctx injection option * docs(ollama): document OpenAI num_ctx injection toggle * docs(config): clarify merge token-limit precedence * config(help): note merge uses higher model token limits * fix(ollama): cap /api/show discovery concurrency * fix(ollama): restrict num_ctx injection to OpenAI compat * tests(ollama): cover ipv6 and compat num_ctx gating * fix(ollama): detect remote compat endpoints for ollama-labeled providers * fix(ollama): cap per-model /api/show lookups to bound discovery load
* Changelog: add LanceDB custom baseUrl + dimensions entry (openclaw#17874) * Changelog: add Ollama autodiscovery hardening entry (openclaw#29201) * Changelog: add Ollama context-window unification entry (openclaw#29205) * Changelog: add compaction audit injection removal entry (openclaw#28507) * Changelog: add browser url alias entry (openclaw#29260) * Changelog: add codex weekly usage label entry (openclaw#26267)
…nd OpenAI-compat transport (openclaw#29205) * fix(ollama): inject num_ctx for OpenAI-compatible transport * fix(ollama): discover per-model context and preserve higher limits * fix(agents): prefer matching provider model for fallback limits * fix(types): require numeric token limits in provider model merge * fix(types): accept unknown payload in ollama num_ctx wrapper * fix(types): simplify ollama settled-result extraction * config(models): add provider flag for Ollama OpenAI num_ctx injection * config(schema): allow provider num_ctx injection flag * config(labels): label provider num_ctx injection flag * config(help): document provider num_ctx injection flag * agents(ollama): gate OpenAI num_ctx injection with provider config * tests(ollama): cover provider num_ctx injection flag behavior * docs(config): list provider num_ctx injection option * docs(ollama): document OpenAI num_ctx injection toggle * docs(config): clarify merge token-limit precedence * config(help): note merge uses higher model token limits * fix(ollama): cap /api/show discovery concurrency * fix(ollama): restrict num_ctx injection to OpenAI compat * tests(ollama): cover ipv6 and compat num_ctx gating * fix(ollama): detect remote compat endpoints for ollama-labeled providers * fix(ollama): cap per-model /api/show lookups to bound discovery load
* Changelog: add LanceDB custom baseUrl + dimensions entry (openclaw#17874) * Changelog: add Ollama autodiscovery hardening entry (openclaw#29201) * Changelog: add Ollama context-window unification entry (openclaw#29205) * Changelog: add compaction audit injection removal entry (openclaw#28507) * Changelog: add browser url alias entry (openclaw#29260) * Changelog: add codex weekly usage label entry (openclaw#26267)
…nd OpenAI-compat transport (openclaw#29205) * fix(ollama): inject num_ctx for OpenAI-compatible transport * fix(ollama): discover per-model context and preserve higher limits * fix(agents): prefer matching provider model for fallback limits * fix(types): require numeric token limits in provider model merge * fix(types): accept unknown payload in ollama num_ctx wrapper * fix(types): simplify ollama settled-result extraction * config(models): add provider flag for Ollama OpenAI num_ctx injection * config(schema): allow provider num_ctx injection flag * config(labels): label provider num_ctx injection flag * config(help): document provider num_ctx injection flag * agents(ollama): gate OpenAI num_ctx injection with provider config * tests(ollama): cover provider num_ctx injection flag behavior * docs(config): list provider num_ctx injection option * docs(ollama): document OpenAI num_ctx injection toggle * docs(config): clarify merge token-limit precedence * config(help): note merge uses higher model token limits * fix(ollama): cap /api/show discovery concurrency * fix(ollama): restrict num_ctx injection to OpenAI compat * tests(ollama): cover ipv6 and compat num_ctx gating * fix(ollama): detect remote compat endpoints for ollama-labeled providers * fix(ollama): cap per-model /api/show lookups to bound discovery load
* Changelog: add LanceDB custom baseUrl + dimensions entry (openclaw#17874) * Changelog: add Ollama autodiscovery hardening entry (openclaw#29201) * Changelog: add Ollama context-window unification entry (openclaw#29205) * Changelog: add compaction audit injection removal entry (openclaw#28507) * Changelog: add browser url alias entry (openclaw#29260) * Changelog: add codex weekly usage label entry (openclaw#26267)
Summary
/api/show(fix(ollama): query per-model context window via /api/show #24146), preserving larger configured limits (fix(ollama): preserve configured context window #26475), and injectingnum_ctxon the OpenAI-compatible path (fix(agents): inject num_ctx for Ollama OpenAI-compat API to prevent 4096 token cap #27292)./api/showduring provider discovery, with timeout and safe fallback to 128k.contextWindow/maxTokensonly when they are larger than implicit catalog values, so stale low explicit values are still refreshed.models[0].payload.options.num_ctxfor Ollama OpenAI-compatible transport so context window is respected.api: "ollama"transport behavior and non-Ollama providers are unchanged.Change Type (select all)
Scope (select all touched areas)
Linked Issue/PR
User-visible / Behavior Changes
num_ctx, avoiding silent fallback to 4096.Security Impact (required)
NoNoYes(POST /api/showduring Ollama model discovery)NoNoYes, explain risk + mitigation:/api/showcalls are local/provider-scoped metadata fetches with 3s timeout and safe fallback.Repro + Verification
Environment
Steps
num_ctxfor Ollama OpenAI-compat.Expected
num_ctx.Actual
Evidence
Human Verification (required)
What you personally verified (not just CI), and how:
src/agents/models-config.providers.ollama.test.tssrc/agents/models-config.fills-missing-provider-apikey-from-env-var.test.tssrc/agents/pi-embedded-runner/model.test.tssrc/agents/pi-embedded-runner/run/attempt.test.ts/api/showfailure fallback.Compatibility / Migration
YesNoNoFailure Recovery (if this breaks)
src/agents/models-config.providers.tssrc/agents/models-config.tssrc/agents/pi-embedded-runner/model.tssrc/agents/pi-embedded-runner/run/attempt.tsRisks and Mitigations