Commit Graph

73452 Commits

Author SHA1 Message Date
Ayaan Zaidi 987522fdcc docs(vision,agents): layer calibration, interface-on-demand, telemetry opt-in, whole-document guidance rules 2026-07-29 20:13:45 +09:00
Peter Steinberger 216f45af8e fix(memory): preserve Windows session ownership (#115851)
* fix(memory): preserve Windows session ownership

* test(memory): cover custom and nested Windows transcripts

* fix(memory): retain nested and custom Windows transcripts

* fix(memory): isolate agent-local Windows transcript stores

* style(memory): format Windows ownership regression coverage

* fix(memory): validate physical transcript ownership boundaries

* fix(memory): bind external session paths to configured agent stores

* fix(memory): reject unowned shared transcript store roots

* fix(memory): restrict transcript archives to agent-owned roots

* refactor(memory): preserve canonical transcript corpus contracts

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 07:11:24 -04:00
Peter Steinberger bc3a4c6757 fix(compaction): drop context-engine fallback on codex ownership skip (#114155) (#115666)
Co-authored-by: HOYALIM <HOYALIM@users.noreply.github.com>
2026-07-29 07:11:21 -04:00
wahaha1223 8bcbc3178b fix(msteams): ignore blank certificate settings (#109112)
* fix(msteams): ignore blank certificate settings

* fix(msteams): preserve federated certificate path behavior

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 07:10:47 -04:00
Leon-SK668 7c024cad48 fix(usage): guard malformed DeepSeek payloads (#110785)
Co-authored-by: Leon-SK668 <17695126+Leon-SK668@users.noreply.github.com>
2026-07-29 07:02:44 -04:00
Ayaan Zaidi e92da4c8ba docs(agents): reword imported review rules in repo voice 2026-07-29 19:54:37 +09:00
Ayaan Zaidi 9182999eb6 docs(agents): add context-budget, tool-description, cache-invalidation, and review-premise rules 2026-07-29 19:54:37 +09:00
Ayaan Zaidi 344a8e48df docs(agents): mock-gateway proof satisfies gate without discouraging live proof 2026-07-29 19:54:37 +09:00
Ayaan Zaidi c9f8c05598 docs(agents): add vitest in-flight edit rule and mock-gateway proof recipe 2026-07-29 19:54:37 +09:00
Ayaan Zaidi 620bf5a9c0 docs(agents): restructure root AGENTS.md around product doctrine and deduped policy 2026-07-29 19:54:37 +09:00
Peter Steinberger e6fec4d51b fix(codex): keep completed answers over audit gaps (#115849) 2026-07-29 06:52:21 -04:00
Peter Steinberger f20fc70cb4 test(cli): isolate unknown-command process validation (#115848) 2026-07-29 06:49:55 -04:00
loong 7bdd1f646b fix(memory-host-sdk): resolve stable execPath for worker fork to survive Homebrew Node upgrades (#99318)
* fix(memory): survive Homebrew Node upgrades

Co-authored-by: 袁龙辉0668001277 <yuan.longhui@xydigit.com>

* test(whatsapp): isolate last-route coverage

* fix(deepinfra): preserve offline model compatibility

* test(memory): isolate migration cleanup lifecycle

* test: stabilize aggregate extension gates

* ci: retrigger pull request workflow

* test: preserve inherited Node options

* test(cli): tolerate cold hosted startup

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 06:49:02 -04:00
Peter Steinberger f27899181e feat(ui): add composer capability menu (#115800)
* feat(ui): composer capability menu with per-session overrides

* refactor(ui): keep chat render within lint ceiling

* fix(ui): preserve loaded capability overrides

* fix(ui): remove stale capability menu field

* fix(ui): gate capability menu on runtime-config readiness
2026-07-29 06:48:08 -04:00
wangmiao0668000666 77e9ee092f fix(synology-chat): stop fabricating send message ids (#110770)
* fix(synology-chat): stop fabricating send message ids

The incoming-webhook send contract acks with a bare boolean and carries
no platform message id, but the adapter returned a synthetic
`sc-${Date.now()}` id and stamped it into the delivery receipt. Return
the established empty-id sentinel and an empty receipt instead, matching
the honest no-platform-id shape used by sibling channels (qqbot,
googlechat) and the plugin-sdk empty-id contract.

Co-Authored-By: Claude <noreply@anthropic.com>

* test(synology-chat): verify truthful webhook receipts

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 06:44:44 -04:00
Goutam Adwant b11ed1877c fix(feishu): reply to direct messages by chat id (#109637)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 06:42:41 -04:00
krissding ee820b185c fix(acp): attach error listener to spawned ACP agent process (#109529)
The spawned agent child process in createAcpClient had no error
listener. If the agent binary failed to start, the error event
would be unhandled and could crash the process.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 06:40:34 -04:00
Peter Steinberger 1f4f1bbc33 fix(sessions): deliver agent announcements to direct message sessions (#115811)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: avatasia <eric.tomcat@gmail.com>
2026-07-29 06:35:42 -04:00
Masato Hoshino 46b2bed375 fix(nextcloud-talk): reject reactions for disabled or unconfigured accounts (#112675)
The react message-action handler dispatched straight to the sender without
checking the resolved account, so a disabled Nextcloud Talk account
(`enabled:false`) that still had a baseUrl/botSecret in config could keep
emitting reactions. `describeMessageTool` already hides the tool for
unconfigured accounts, but an explicit accountId can reach `handleAction`
directly. Enforce the same enabled+configured gate at dispatch, mirroring
the Signal reaction fix (#112607).

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-29 06:34:54 -04:00
Peter Steinberger af70829cdf refactor(ui): move Agent Defaults entry from the sidebar into the Agents page (#115836)
* refactor(ui): move Agent Defaults entry from the sidebar into the Agents page

* fix(ui): keep Agent Defaults searchable
2026-07-29 06:30:40 -04:00
Peter Steinberger 662abec754 feat(gateway): push session PR indicators to subscribed clients (#115643)
* feat(gateway): push session PR indicators to subscribed clients

* test(gateway): fix PR indicator drift

* chore(protocol): allowlist PR-indicator event for native apps (Control UI surface)

* test: align PR indicator lifecycle coverage

* fix(ui): scope session PR store listeners to active watchers
2026-07-29 06:30:01 -04:00
Vincent Koc b6f70ea440 fix(setup): make Gemini recovery actionable (#115835) 2026-07-29 18:29:32 +08:00
coder-master-0915 745f780c34 fix(terminal-core): prevent String.replace $ pattern injection in display-string (#111398)
* fix(terminal-core): prevent $ pattern injection in replaceHomePath

The second argument of String.prototype.replace() interprets $ sequences
as special replacement patterns ($&, $`, $', $1-$9, $<name>). When the
user home directory path contains $ followed by special characters, the
replacement produces a corrupted path in the display string.

Using a replacer function (() => fallbackHome) instead of the raw string
argument prevents $ pattern interpretation, ensuring the literal home
directory path is used regardless of its content.

* test(terminal-core): cover literal dollar home paths

---------

Co-authored-by: lizeyu-xydt <li.zeyu@xydigit.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 06:24:49 -04:00
Peter Steinberger 986e5d1758 refactor(channels): share ingress retention defaults (#115824) 2026-07-29 06:24:30 -04:00
mushuiyu886 d8935248e4 fix(nostr): profile imports vary on timestamp ties (#111798)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 06:22:33 -04:00
stevenlee-oai a00438a867 fix(codex): restore connected apps for token-authenticated runs (#115075)
* fix(codex): restore connected apps for token-authenticated runs

* fix(codex): keep app inventory protocol types private

* fix(codex): align native runtime with Codex 0.146.0

Co-authored-by: Steven Lee <stevenlee@openai.com>

* fix(codex): clean up latest app-server integration

Co-authored-by: Steven Lee <stevenlee@openai.com>

* fix(codex): keep internal protocol types private

* fix(ci): repair current main Codex landing gates

* fix(ci): format inherited code mode matrix

* fix(codex): reconcile native app-server contracts with main

Prepare a verified GitHub-hosted mainline merge while preserving the reviewed Codex 0.146.0 fixes and canonical OpenAI authentication.

Co-authored-by: Steven Lee <stevenlee@openai.com>

* fix(codex): keep QA evidence in its owning plugin

Resolve the current-main Code Mode test rename without resurrecting the retired core test path.

Co-authored-by: Steven Lee <stevenlee@openai.com>

* fix(codex): enforce canonical OpenAI app-server auth

Reject retired provider aliases without runtime compatibility, direct operators to the doctor migration, and remove the redundant OpenAI API-key predicate.

Co-authored-by: Steven Lee <stevenlee@openai.com>

* chore(codex): reconcile latest main dependency graph

Preserve current main dependency changes while preparing the original Codex PR for an ancestry-preserving signed mainline merge.

Co-authored-by: Steven Lee <stevenlee@openai.com>

* fix(codex): unify bundled Codex 0.146 runtimes

Keep the ACP adapter on the same 0.146.0 Codex release as the managed runtime, remove obsolete 0.145.0 platform artifacts and unused semver compatibility, and preserve the latest main dependency upgrades.

Co-authored-by: Steven Lee <stevenlee@openai.com>

---------

Co-authored-by: Peter Steinberger <peter@steipete.me>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 06:21:25 -04:00
Peter Steinberger 7bc453f508 fix(codex): classify hosted search timeouts (#115837) 2026-07-29 06:21:11 -04:00
dongdong 1219ebff9a fix(msteams): keep attachment replies in channel threads (#94348)
* fix(msteams): keep file replies in channel threads

* fix(msteams): keep SharePoint files in channel threads

Fixes #88836 by forwarding channel thread roots through the existing Microsoft Teams proactive activity boundary while preserving top-level, group chat, and personal delivery.

Co-authored-by: Jasmine Zhang <jasminezhang@JasminedeMac-mini.local>

* test(msteams): use lint-safe real SDK HTTP capture

---------

Co-authored-by: Jasmine Zhang <jasminezhang@JasminedeMac-mini.local>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 06:19:11 -04:00
Zakaria Rahali a9391d7312 fix(telegram): linkPreview:false is ignored on streamed replies (#114125)
* fix(telegram): linkPreview:false is ignored on streamed replies

Replies delivered through draft streaming still unfurled the first URL
even with channels.telegram.linkPreview: false. Non-streamed sends
already honored the flag.

createTelegramDraftStream never received linkPreview and never set
link_preview_options, on either its initial sendMessage or its
editMessageText calls. Finalization could not clean it up: it skips the
final edit when the streamed draft text already equals the final text,
which is the common case, so the draft message stays as-is with the
preview attached.

Passes linkPreview from telegramCfg into the draft stream and applies
link_preview_options: { is_disabled: true } on the send and on every
edit, since an edit that omits the field re-enables the preview
server-side. Rich messages keep expressing this as skip_entity_detection
at render time, which already worked.

Call arity is preserved when no preview options apply, so existing edit
assertions are unaffected.

Closes #111525

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

* test(telegram): cover streamed reply option parity

Co-authored-by: Zakaria Rahali <zakariarahali288@gmail.com>

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 06:18:35 -04:00
Vincent Koc 951e7a39bd fix(protocol): make Swift model checks non-mutating (#115793)
* fix(protocol): make Swift drift checks non-mutating

* test(protocol): cover core Swift gateway frames

* docs(protocol): clarify Swift model update flow
2026-07-29 18:17:36 +08:00
VectorPeak 404fafff77 fix(searxng): avoid duplicating search endpoint (#113661)
Co-authored-by: chatgpt-codex-connector[bot] <199175422+chatgpt-codex-connector[bot]@users.noreply.github.com>
2026-07-29 06:15:51 -04:00
Peter Steinberger bed7014273 fix(agents): preserve tool-result middleware identity (#115821)
Fixes #106910.

Preserve the contributor design from #107000 while updating both the normal and current compaction owner paths.

Co-authored-by: Sebastien Tardif <sebtardif@ncf.ca>
2026-07-29 06:13:50 -04:00
Peter Steinberger 9721ca15d2 refactor(meetings): consolidate runtime facades (#115819)
* refactor(meetings): consolidate runtime facades

* fix(meetings): keep facade contracts acyclic
2026-07-29 06:13:37 -04:00
sunlit-deng da8a2208d2 fix(browser): reject malformed proxy file base64 (#115045)
* fix(browser): reject malformed proxy file base64

* fix(browser): preserve empty proxy downloads

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 06:08:01 -04:00
Peter Steinberger 4f31ba97c2 fix(sandbox): repair workspace state without crossing agent owners (#115784)
* fix(sandbox): safely repair sandbox workspace state

Fixes #111661. Repair active agent, shared, session, and global sandbox workspace state through the existing canonical SQLite registry without importing inactive or unrelated agent state.

Preserves and builds on the original sandbox doctor migration and regression from #111812.

Co-authored-by: TianT1209 <55179364+TianT1209@users.noreply.github.com>

* fix(sandbox): isolate doctor sandbox state by profile

Resolve exact sandbox scope ownership from the state directory requested by doctor, not ambient process state, and cover cross-profile SQLite registry isolation.

Co-authored-by: TianT1209 <55179364+TianT1209@users.noreply.github.com>

* test(sandbox): preserve typed workspace ownership proof

Keep exact inactive and active sandbox fixture paths non-optional under the repository core-test typecheck.

Co-authored-by: TianT1209 <55179364+TianT1209@users.noreply.github.com>

* fix(sandbox): ignore stale non-session workspace scopes

Validate canonical registered session ownership before Doctor migrates sandbox workspace state; preserve exact profile isolation and leave the existing registry untouched.

Co-authored-by: TianT1209 <55179364+TianT1209@users.noreply.github.com>

* fix(doctor): derive sandbox ownership from durable sessions

Read the existing agent-owned SQLite session store without opening writable handles. Repair pruned, global and unscoped sandbox workspaces and resolve omitted sandbox roots from the selected state profile. Retire the transient runtime registry reader.

Co-authored-by: TianT1209 <55179364+TianT1209@users.noreply.github.com>

* test(doctor): derive overlap workspace from agent owner

Honor current main workspace-qualified sandbox scope contract when proving non-default agent ownership in hosted CI.

Co-authored-by: TianT1209 <55179364+TianT1209@users.noreply.github.com>

---------

Co-authored-by: TianT1209 <55179364+TianT1209@users.noreply.github.com>
2026-07-29 06:06:21 -04:00
Peter Steinberger 20668eed03 fix(memory): quarantine writes from tainted agent turns (#115818)
* feat(memory): taint writes after network tools

* fix(memory): keep provenance mutations recoverable

* fix(memory): roll back failed provenance writes

* fix(memory): serialize provenance mutations

* docs(memory): explain flush provenance boundary

* refactor(memory): share provenance mutation wrapper

* docs(memory): clarify flush provenance fallback

* fix(memory): canonicalize provenance paths
2026-07-29 06:02:06 -04:00
Chris Zhang 70251e415d fix(feishu): cache inaccessible sender lookups (#111700)
Co-authored-by: Chris <4436110+zqchris@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 05:59:55 -04:00
maweibin aa4c9416a7 docs(status): document missing --timeout flag (#102363) 2026-07-29 05:59:18 -04:00
Wynne668 522c747d3c fix(exa): reject invalid UTF-8 search responses (#111736) 2026-07-29 05:58:02 -04:00
Vincent Koc 99b5df0fd2 fix(openai): satisfy realtime lifecycle lint 2026-07-29 17:57:59 +08:00
Vincent Koc 5e0a75f0e5 fix(openai): close realtime lifecycle races 2026-07-29 17:57:59 +08:00
Vincent Koc 1cc2e28b5b chore(openai): keep lifecycle types internal 2026-07-29 17:57:59 +08:00
Vincent Koc 3bf40870ad refactor(openai): apply lifecycle to realtime bridge 2026-07-29 17:57:59 +08:00
Vincent Koc dd0e416303 refactor(openai): apply lifecycle to GPT-Live bridge 2026-07-29 17:57:59 +08:00
Vincent Koc 61cadc1459 refactor(openai): add realtime voice lifecycle 2026-07-29 17:57:59 +08:00
Peter Steinberger cedeca1708 fix(zalo): normalize prefixed Bot API delivery targets (#115814)
Preserve the original Zalo provider and target-kind normalization fix and regression test from #106171. Add real configured-plugin loopback HTTP proof for both text and photo delivery through group and user aliases.

Source: https://github.com/openclaw/openclaw/pull/106171

Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: lzw112 <wang.lizhang@xydigit.com>
2026-07-29 05:53:07 -04:00
Peter Steinberger f318df7a55 refactor(ui): dissolve the General settings page into Appearance (#115798)
* refactor(ui): dissolve the General settings page into Appearance

* test(ui): drop dissolved config route expectation

* test(ui): cover legacy General model redirect

* style(ui): format legacy redirect test
2026-07-29 05:49:20 -04:00
Peter Steinberger b0376d19bf fix(browser): abort cancelled CDP handshakes (#115805)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 05:48:27 -04:00
Peter Steinberger 85d2d698ff fix(nostr): deliver oversized encrypted replies as ordered chunks (#115816)
Apply the shared, surrogate-safe outbound chunker to the existing Nostr text limit so the real delivery planner produces ordered NIP-04 events. Preserve assistant-visible sanitization and prove short, word, newline, hard-split, and odd-prefix Unicode boundaries.

Co-authored-by: liyuanbin <li.yuanbin1@xydigit.com>
2026-07-29 05:47:01 -04:00
qingminlong 0063e46069 fix(gateway): show recovery guidance when context overflow hides replies (#114909)
* fix(gateway): show overflow recovery guidance in chat display

* fix(gateway): reuse context overflow classifier

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 05:45:07 -04:00