Compare commits

...

3 Commits

3 changed files with 23 additions and 1 deletions

View File

@ -8,12 +8,14 @@ Docs: https://docs.openclaw.ai
- TUI: infer the active agent from the current workspace when launched inside a configured agent workspace, while preserving explicit `agent:` session targets. (#39591) thanks @arceus77-7.
- Tools/Brave web search: add opt-in `tools.web.search.brave.mode: "llm-context"` so `web_search` can call Brave's LLM Context endpoint and return extracted grounding snippets with source metadata, plus config/docs/test coverage. (#33383) Thanks @thirumaleshp.
### Fixes
- macOS app/chat UI: route browser proxy through the local node browser service, preserve plain-text paste semantics, strip completed assistant trace/debug wrapper noise from transcripts, refresh permission state after returning from System Settings, and tolerate malformed cron rows in the macOS tab. (#39516) Thanks @Imhermes1.
- 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.
- 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.
- Kimi coding multi-turn sessions: stop preserving Anthropic thinking signatures for `kimi-coding`/`kimi-code` transcript replay so turn 2+ requests no longer crash. (#39841) Thanks @VarunChopra11.
- macOS overlays: fix VoiceWake, Talk, and Notify overlay exclusivity crashes by removing shared `inout` visibility mutation from `OverlayPanelFactory.present`, and add a repeated Talk overlay smoke test. (#39275, #39321) Thanks @fellanH.
- macOS Talk Mode: set the speech recognition request `taskHint` to `.dictation` for mic capture, and add regression coverage for the request defaults. (#38445) Thanks @dmiv.

View File

@ -122,6 +122,24 @@ describe("resolveTranscriptPolicy", () => {
expect(policy.preserveSignatures).toBe(false);
});
it("does not preserve signatures for kimi-coding provider (#39798)", () => {
const policy = resolveTranscriptPolicy({
provider: "kimi-coding",
modelId: "k2p5",
modelApi: "anthropic-messages",
});
expect(policy.preserveSignatures).toBe(false);
});
it("does not preserve signatures for kimi-code alias (#39798)", () => {
const policy = resolveTranscriptPolicy({
provider: "kimi-code",
modelId: "k2p5",
modelApi: "anthropic-messages",
});
expect(policy.preserveSignatures).toBe(false);
});
it("enables turn-ordering and assistant-merge for strict OpenAI-compatible providers (#38962)", () => {
const policy = resolveTranscriptPolicy({
provider: "vllm",

View File

@ -39,6 +39,8 @@ const OPENAI_MODEL_APIS = new Set([
]);
const OPENAI_PROVIDERS = new Set(["openai", "openai-codex"]);
const OPENAI_COMPAT_TURN_MERGE_EXCLUDED_PROVIDERS = new Set(["openrouter", "opencode"]);
// Providers that use anthropic-messages API but cannot handle re-sent thinkingSignature blobs (#39798)
const ANTHROPIC_API_SIGNATURE_EXCLUDED_PROVIDERS = new Set(["kimi-coding"]);
function isOpenAiApi(modelApi?: string | null): boolean {
if (!modelApi) {
@ -123,7 +125,7 @@ export function resolveTranscriptPolicy(params: {
(!isOpenAi && sanitizeToolCallIds) || requiresOpenAiCompatibleToolIdSanitization,
toolCallIdMode,
repairToolUseResultPairing,
preserveSignatures: isAnthropic,
preserveSignatures: isAnthropic && !ANTHROPIC_API_SIGNATURE_EXCLUDED_PROVIDERS.has(provider),
sanitizeThoughtSignatures: isOpenAi ? undefined : sanitizeThoughtSignatures,
sanitizeThinkingSignatures: false,
dropThinkingBlocks,