fix: merge PR #93505 (baseURL alias) and PR #95311 (disableBoundaryAwareCache) - #1
Closed
sunlit-deng wants to merge 6839 commits into
Closed
fix: merge PR #93505 (baseURL alias) and PR #95311 (disableBoundaryAwareCache)#1sunlit-deng wants to merge 6839 commits into
sunlit-deng wants to merge 6839 commits into
Conversation
* fix(agents): make computer schema Codex-compatible * docs(changelog): note Codex computer schema fix
…#102658) * fix(imessage): cap per-chat group-allowlist warn-once cache Replace unbounded perChatWarned Set with createDedupeCache(maxSize=512) to keep long-running iMessage monitor memory stable. The cache grows with every distinct group chat the gateway sees; without a cap it can accumulate entries indefinitely. Co-Authored-By: Claude <noreply@anthropic.com> * fix(imessage): prove warning cache eviction --------- Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: bitkyc08 <bitkyc08@gmail.com>
* fix(browser): preserve no-display launch diagnostics * chore: keep changelog release-owned
…nclaw#102901) * feat(voice): universal talk waveform driven by real audio levels One shared Siri-style talk animation across iOS, watchOS, macOS, and Android (TalkWaveformView + exact Compose port), replacing per-platform fakes: synthetic speaking pulses, constant speech-detected power, static Android bar rows, flat realtime listening. Listening/recording follow live mic levels on every route; agent speech follows the real playback envelope (AVAudioPlayer metering + playback-aligned PCM envelope + WebRTC stats); voice-note recording shows a live capture wave. * fix(android): order waveform imports and sync native i18n inventory * chore(i18n): resync native inventory after rebase
Co-authored-by: kklouzal <kklouzal@users.noreply.github.com>
* feat(macos): add dashboard link browser * fix(macos): preserve browser navigation state * fix(macos): preserve accessible external link activation * fix(macos): preserve trusted editor handoff * docs: refresh dashboard link map * chore: keep dashboard release note in PR * fix(macos): harden sidebar browser lifecycle
…ion id (openclaw#96686) * fix(agents): isolated cron busts prompt prefix cache via per-run session id Isolated cron runs carry a per-run :run:<id> session scope (openclaw#91685) rendered verbatim into the cached system-prompt Runtime line, re-busting byte-exact prefix caching for the tool catalog after it every run (openclaw#96677, openclaw#43148 class). buildRuntimeLine now renders the stable base session key and drops the per-run id the run scope duplicates; parseCronRunScopeSuffix is gated to the isolated-cron key shape so a :run: segment in any other session key is never truncated. * fix(agents): preserve mixed-case cron run markers * test(agents): cover rotated cron session identity --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
* fix(launchd): verify profile updater jobs by metadata * fix(launchd): bind updater proof to job metadata --------- Co-authored-by: Peter Steinberger <peter@steipete.me> Co-authored-by: Peter Steinberger <steipete@gmail.com>
* fix: require env resolution for web provider refs * chore: retrigger PR checks --------- Co-authored-by: lin-hongkuan <lin-hongkuan@users.noreply.github.com>
…Ms (openclaw#96684) * fix(heartbeat): remove static iteration cap in seekNextActivePhaseDueMs * fix(heartbeat): floor seek step at 60s to bound active-hours seek iterations The static MAX_SEEK_ITERATIONS cap (10,080 ≈ 7 days / 1 min) was removed in the previous fix but replaced the risk with unbounded iteration for sub-minute intervals. Floor the seek step at 60s via MIN_SEEK_STEP_MS so the loop is always bounded by MAX_SEEK_HORIZON_MS / 60_000 = ~10,080 iterations regardless of the configured intervalMs. Active-hours windows are minute-granular, so finer steps add no precision. * fix(heartbeat): batch seek in whole-interval multiples to preserve phase alignment Use the smallest intervalMs multiple >= 60s as the seek step so every candidate checked is reachable from startMs by whole intervalMs steps. This fixes the phase-alignment regression from the previous fix where Math.max(intervalMs, 60_000) could return off-phase slots for non-divisor sub-minute intervals like 45s. Added a regression test for 45s interval to verify the returned candidate is phase-aligned. * fix(heartbeat): check every phase candidate, bound only by 1M-iter safety cap Drop batched seeking (intervalMs-multiple steps) because any multiplier > 1 can skip phase slots inside narrow active windows. Instead check every phase candidate, with a 1M-iteration safety cap that prevents event-loop stalls from sub-ms intervals while covering the full 7-day horizon for intervals >= 605ms. Added regression test for 59s interval / 1min active window where batched steps (118s) would skip from 08:59:44 past 09:00:43 to 09:01:42. * fix(heartbeat): bound sub-second seek with batch-step + backward-walk Replace the 1M-iteration per-candidate cap with a two-tier strategy: - intervalMs >= 1s: per-candidate scan (naturally bounded by horizon) - intervalMs < 1s: batch in whole-interval multiples >= 1s, with backward walk on inactive->active transitions to find the earliest phase-aligned active slot Max iterations <= 604,800 in all cases (~10 ms for trivial predicates, ~0.6-6 s for production isWithinActiveHours with Intl.DateTimeFormat). Added tests: - Sub-second interval, startMs already active -> returns directly - Sub-second interval, inactive->active transition -> backward walk finds earliest phase-aligned slot * fix(heartbeat): unify seek at >= 30s batch step, max 20,160 predicate calls Use a single batched-seek path for all intervals: step in whole-interval multiples >= 30 s with backward walk on inactive->active transitions. For intervalMs >= 30 s (30 s, 59 s, 60 s+): multiplier = 1, effectively per-candidate with no batch overhead. For intervalMs < 30 s (1 s, 500 ms, 1 ms): batched at >= 30 s, backward walk finds the first active phase-aligned slot in the window. Max predicate calls <= 20,160 for any interval (30 s minimum step / 7-day horizon). Production isWithinActiveHours (Intl.DateTimeFormat) cost: ~20–200 ms worst case vs 0.6–6 s for the per-candidate approach. * fix(heartbeat): bound active-hours seek cost * fix(heartbeat): resolve current main * test(heartbeat): isolate active-window regression --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
…moji (openclaw#102877) * fix(active-memory): keep recall query snippets utf16-safe * test(active-memory): exercise recall hook for utf16 bounds * test(active-memory): detect only unpaired surrogates * fix(active-memory): bound timeout partials safely Co-authored-by: 张贵萍0668001030 <zhang.guiping@xydigit.com> --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
…r truncation (openclaw#102685) * fix(agent-runner-memory): use truncateUtf16Safe for memory flush error truncation Replace raw UTF-16 slices in buildMemoryFlushErrorPayload and truncateMemoryFlushErrorMessage with truncateUtf16Safe to prevent surrogate pair splitting in error messages shown to users. 🤖 Generated with [Claude Code](https://claude.com/claude-code) * test(auto-reply): cover UTF-16-safe memory errors * test(auto-reply): tighten UTF-16 memory error coverage --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
* fix(nextcloud-talk): keep error snippets UTF-16 safe * test(nextcloud-talk): assert exact safe error --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
* fix(workshop): keep approval target names UTF-16 safe * test(workshop): tighten UTF-16 approval regression * test(workshop): mirror approval budget exactly * docs(plugins): correct approval description limit --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
* feat(providers): add Meta Model API - muse-spark-1.1 Adds meta-model-api provider via bundled extension: - extensions/meta-model-api/ (provider, catalog, stream, thinking, onboarding) - docs/providers/meta-model-api.md - core wiring: env-api-keys, zod-schema, provider-display-names, dotenv, provider-env-vars Model: meta-model-api/muse-spark-1.1 (Responses API at https://api.ai.meta.com/v1) Auth: MODEL_API_KEY (Bearer) Default reasoning: high, maps --thinking off -> minimal (model rejects none) Fix: bump live test maxTokens 200->4000 (high reasoning uses ~300 tokens for reasoning alone) Co-authored-by: Meta * fix(meta-model-api): clean reasoning lint * test(meta-model-api): align live proof checks * chore(meta-model-api): bundle provider metadata * docs: fix Meta Model API setup wording * docs: format Meta Model API provider page --------- Co-authored-by: Dave Morin <dave@morin.com> Co-authored-by: Colin <colin@solvely.net> Co-authored-by: Josh Lehman <josh@martian.engineering>
* fix(sandbox): keep redacted session keys UTF-16 safe * test(sandbox): cover UTF-16 redaction boundaries --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
* fix(codex-supervisor): ship CLI metadata entry * chore: keep release notes in PR body --------- Co-authored-by: Peter Steinberger <peter@steipete.me>
* feat: verify signed marketplace feed refresh * test: fix signed marketplace feed CI * Guard signed feed refresh trust state * test(feeds): sign decoded hosted feed payloads * fix(feeds): make signed snapshot writes monotonic --------- Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com> Co-authored-by: Gio Della-Libera <giodl@microsoft.com>
…ns (openclaw#103422) * fix(ai): preserve streamed tool-call identity * fix(computer): bind actions to current tool authority * fix(macos): serialize computer control lifecycle * docs(computer): document hardened control contract * chore: follow release-owned changelog policy * test(agents): cover node list cancellation
…l aliases (openclaw#103329) * fix(opencode-go): remove deprecated mimo-v2-omni and mimo-v2-pro model aliases These deprecated aliases reject agent requests from the OpenCode Go gateway. Remove them from the provider catalog and clean up all references in probe skip lists, CI workflows, and tests. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * fix(opencode-go): complete deprecated MiMo cleanup --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: VectorPeak <73048950+VectorPeak@users.noreply.github.com>
…#103438) Each inline link opens in its own tab (exact-URL dedupe); sidebar target=_blank links open new tabs. Tab strip on top with click to activate, close buttons, middle-click close, pointer-drag reorder, and a per-tab context menu (Open in Default Browser, Copy Link, Reload, Close Tab, Close Other Tabs). Navigation controls sit below the tabs and follow the active tab. Closing the last tab collapses the sidebar with no lingering webviews or history.
…ms as overflow victims (openclaw#103284) * fix(queue): prevent applyQueueDropPolicy from selecting in-flight items as overflow victims When a burst of inbound messages hits the followup queue cap while the head item is mid-delivery, applyQueueDropPolicy can select that same in-flight item as an overflow victim. With the default dropPolicy: "summarize", the in-flight item ends up recorded in the overflow summary as dropped even though it is still being delivered, producing a contradictory record where the same message is both answered and reported as unanswered-due-to-overflow. The fix introduces an optional `inFlight` Set parameter to applyQueueDropPolicy and drainNextQueueItem. The followup queue state now owns a shared inFlight set that is: - Populated by drainNextQueueItem during the await run(next) window - Populated by the collect-merge drain path for activeGroupItems - Passed to applyQueueDropPolicy in enqueueFollowupRun The drop policy now computes an effective queue length that excludes in-flight items, and skips them when selecting splice victims. Fixes openclaw#103246 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com> * fix(queue): align pending depth with active deliveries --------- Co-authored-by: Claude Opus 4.7 <noreply@anthropic.com> Co-authored-by: Peter Steinberger <steipete@gmail.com>
…s, vigil (openclaw#103344) The pet watches your pointer between acts (facing follows the cursor, throttled, reduced-motion inert). Press-and-hold now pets it - content closed eyes and a floating heart - while a quick tap stays a poke. Run endings are honest: resolveLobsterRunOutcome picks the most recently ended session (endedAt first, activity stamps as fallback) so successes cheer, failures earn a sympathetic droop with sagging antennae, and user-aborted runs just get an acknowledging startle. Runs longer than ten minutes summon the pet into a settled vigil pose that pauses all acts until the run ends.
…ext (openclaw#102925) * fix(synology-chat): strip internal tool-trace banners from outbound text * fix(synology-chat): satisfy eslint curly rule * fix(synology-chat): add sanitizeText to outbound type contract * fix(synology-chat): use canonical outbound sanitizer type --------- Co-authored-by: Pick-cat <266665499+Pick-cat@users.noreply.github.com> Co-authored-by: Peter Steinberger <steipete@gmail.com>
* fix(mcp): redact secrets in /mcp show replies Prevent owner /mcp show from dumping raw headers/env credentials into group chats. Mark MCP env values sensitive, restore redaction sentinels on set so show→set cannot overwrite real secrets. Fixes openclaw#103053 * test(mcp): e2e redaction of /mcp show secrets on live gateway Spin up an ephemeral gateway process, chat.send /mcp show with live credential-bearing config, and prove secrets never leave the reply path. Also prove show→set sentinel restore on disk via chat and CLI.
* test(qa): prove Slack native chart delivery * test(qa): exercise Slack chart verifier through scenario * fix(build): bound private QA SDK declarations separately * fix(qa): normalize Slack chart history whitespace
* fix(voice-call): add timeout to guardedJsonApiRequest * fix(voice-call): bound provider JSON requests --------- Co-authored-by: chengzhichao-xydt <chengzhichao-xydt@users.noreply.github.com> Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: hobo <hobo.l@binance.com> Co-authored-by: aaajiao <aaajiao@gmail.com>
…claw#103450) Route assistant-visible Tlon output through the shared sanitizer and prove the rendered Urbit poke payload for DMs, groups, and media captions. Co-authored-by: masatohoshino <g515hoshino@gmail.com>
Co-authored-by: NIO <nocodet@mail.com>
…aw#103352) Roughly one load in ten, someone else walks across the footer ledge once and leaves: usually a stranger lobster wearing a palette the resident pet does not (hover: 'a stranger'), and on rare loads a crab (hover: 'definitely a lobster') - wide shell, eye stalks, walks strictly sideways, smug about it. Passers never perch, never react, and never count for the Lobsterdex. Planned by a pure per-seed function, gated by the visits setting, skipped under reduced motion, and their timers reset with the seed and clean up on disconnect.
…enclaw#103218) * fix(signal): retry inbound flushes on reply session init conflict * fix(signal): bind conflict retries to monitor lifecycle --------- Co-authored-by: Peter Steinberger <steipete@gmail.com>
…3467) Co-authored-by: Peter Steinberger <steipete@gmail.com>
…e rail (openclaw#103426) * feat(ui): move app chrome into a topbar and dock the session workspace rail The desktop shell now uses a slim topbar for brand, primary navigation (Chat + pinned routes + More menu), command-palette search, pairing, theme, and Settings; the left column slims down to a sessions-only panel (Cmd+B hides it entirely — the 78px icon rail is gone). Split view drops the fixed geometry-mirroring toolbar for in-flow per-pane headers. The session workspace rail can dock right or bottom inside its pane — drag its header between edges or use the dock button — and the collapsed strip's file glyph is now a real button (it used to be a dead, button-looking span) with a changed-file count badge. The Mac app's injected chrome CSS slims down accordingly; its drag-region geometry is unchanged and the topbar brand strip stays passive under it. * chore(ui): regenerate locale bundles for topbar and workspace dock strings * fix(ui): keep the native macOS drawer clear of the titlebar overlay The narrow-width slide-over drawer sits fixed at the window top, over the AppKit traffic lights and drag regions. The old Mac-app-injected CSS padded .sidebar-shell for this; that rule moved web-side for the desktop topbar, so restore drawer clearance here for both the app drawer and the in-drawer settings sidebar. * chore(ui): translate topbar and workspace dock strings; regen docs map
Drop the 32pt drag-overlay clearance above the sidebar tab strip to a 12pt inset - just enough to clear the window's 12pt drag overlay so every tab pixel stays clickable - and shrink the header from 98pt to 78pt. Follow-up to openclaw#103438 per maintainer feedback.
* fix: parse zero-argument XML tool calls * fix(tool-call-repair): handle empty XML calls safely --------- Co-authored-by: Peter Steinberger <peter@steipete.me> Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: Hiroshi Tanaka <solavrc@gmail.com>
* improve(ui): mark the default model inline * chore: leave changelog to release workflow --------- Co-authored-by: Peter Steinberger <peter@steipete.me>
… prompt cache providers
Owner
Author
|
误创建,关闭 |
sunlit-deng
pushed a commit
that referenced
this pull request
Aug 13, 2026
… errors (openclaw#122624) * fix(codex): read canonical transcript session targets (#1) * test(slack): reproduce reconnect timer surviving shutdown * fix(slack): keep reconnects within one socket lifecycle * test(slack): exercise native reconnect over loopback * test(slack): satisfy reconnect integration checks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
概述
合并以下两个 PR 的变更,解决
docs/.generated/config-baseline.sha256冲突:PR openclaw#93505 — fix: support baseURL alias in memory embedding provider config resolution
ModelProviderConfig中新增baseURL兼容别名baseURL,解析时自动规范化为baseUrlbaseUrl和baseURL同时存在时进行校验报错PR openclaw#95311 — feat: add disableBoundaryAwareCache compat option
disableBoundaryAwareCachecompat 选项冲突解决
唯一冲突文件:
docs/.generated/config-baseline.sha256(自动生成文件)合并后需运行
pnpm config:docs:gen重新生成 baseline hash 以确保两个 PR 的 config 变更都被正确捕获。变更统计
24 files changed, +382/−30 lines