Commit Graph

73724 Commits

Author SHA1 Message Date
Yuval Dinodia
51241c4e00 fix(agents): edit tool rewrites line endings on lines it did not touch (#116011)
* fix(agents): edit tool rewrites line endings on lines it did not touch

The edit tool detected one line ending from the file's first newline,
normalized the whole file to LF for matching, then re-applied that single
ending to every line on write. A one-line edit therefore rewrote the
terminator of every untouched line, and deleted lone carriage returns
that were data rather than line breaks. The diff and unified patch
returned to the model are computed on the normalized text, so the damage
never surfaces in the tool result or the TUI preview.

Rebuild the written text from the original terminators instead. A bare
carriage return is tracked as its own terminator, so lines the edits did
not touch keep their exact bytes and a rewritten line is written back
with the terminator bytes it had. Newly written lines take the
terminator of the original line they replaced. Matching still runs in LF
space, so LF oldText against a CRLF file matches as before.

* fix(agents): preserve CR fallback for leading edit insertions

* fix(agents): align replacement line-ending boundaries

* fix(agents): preserve edit line-ending provenance

* refactor(agents): isolate edit replacement reconstruction

* test(agents): cover edits through production line endings

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 05:49:56 +08:00
Ayaan Zaidi
c661061d4a fix(agents): keep streamed pre-tool assistant text in claude-cli final output
The claude-cli terminal result envelope carries only the final message text.
On the default draft-preview path (no block streaming, no commentary
classification) the preview streamed every text block, then final delivery
edited it down to just the post-tool closer, silently erasing pre-tool
answer text (#106760).

Both the incremental parser and the transcript reparse now keep the
streamed accumulation when it is connected to the result through tool
splits: boundaries join with a paragraph break, non-tool message
boundaries restart preservation candidacy (superseded drafts still defer
to the envelope), interim results commit their segment without breaking
cumulative delta snapshots, and transcript reparses continue past interim
results like the incremental parser.
2026-07-30 06:48:01 +09:00
Adam Kalsey
e85e1dba3f fix(plugins): keep next-turn injections callable after register (#111131)
Co-authored-by: guptaishaan <guptaishaan@users.noreply.github.com>
2026-07-30 05:47:00 +08:00
Peter Steinberger
8fefe62ba4 fix(agents): settle aborted runs through after-turn so agent_end fires (#116087) 2026-07-29 17:44:51 -04:00
Vincent Koc
215e49b1a2 fix(hooks): report eventless hooks as not ready (#116083)
Fixes #72370

Release note: hooks check now reports selected hooks without declared events as not ready instead of ready.
2026-07-30 05:29:25 +08:00
Peter Steinberger
d98e984ec2 fix(qa): isolate Matrix live validation state (#116071)
* fix(qa): isolate Matrix live scenario routing

* fix(qa): preserve Matrix mention filenames

* fix(qa): reset Matrix transport scenario state

* test(qa): isolate stateful Matrix scenario partitions

* test(qa): match numbered Matrix isolation

* test(qa): reject stale Matrix progress results

* fix(qa): bound Matrix scenario prompt ownership

* fix(qa): bound mock scenario ownership

* test(qa): satisfy Matrix validation gates

* refactor(qa): remove stale prompt helper

* fix(qa): preserve tool-result ownership after rebase
2026-07-29 17:23:03 -04:00
Vincent Koc
fc3f114a93 fix(macos): recover dashboard after gateway auth reconnect (#116080) 2026-07-30 05:22:38 +08:00
Vincent Koc
9eee6181d7 fix(ui): serialize Control UI config writers (#116029) 2026-07-30 05:09:23 +08:00
Peter Steinberger
b9377f6048 fix(codex): enforce native MCP tool access (#116054)
* fix(codex): enforce native MCP tool access

* chore: remove prerelease changelog entry

* chore: restore changelog to main

* refactor(codex): build MCP server patches from entries
2026-07-29 17:06:49 -04:00
Vincent Koc
83d725761f docs(hooks): clarify inbound claim ownership (#116082)
Refs #109353
2026-07-30 05:02:50 +08:00
Peter Steinberger
7380875375 fix(memory): keep degraded status actionable (#116074)
* fix(memory): diagnose degraded auth owners

* fix(memory): use shared sqlite opener
2026-07-29 16:58:57 -04:00
xingzhou
b5c0878777 fix(build): bound bundled plugin asset generators (#111366)
Fail build and copy generators with ETIMEDOUT after 600000ms and terminate the complete managed process tree. Keep the timeout policy in the bundled-assets caller while preserving the shared helper for distinct callers such as #111349.

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 04:56:21 +08:00
metaforismo
55dd5d5c93 fix(agents): isolate finalize revision retries (#116006)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 04:50:23 +08:00
joshavant
d3afc2776e test(qa): stabilize Matrix tool progress scenarios 2026-07-29 15:46:18 -05:00
Vincent Koc
861b35ed44 fix(macos): allow dev source installs to finish (#116072) 2026-07-30 04:38:38 +08:00
Vincent Koc
b7193cd3fc fix(ui): recover curated settings state (#116032) 2026-07-30 04:29:44 +08:00
mids-neo
821b929c5b fix(whatsapp): emit sent events for native replies (#97728)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 04:28:11 +08:00
Frank Yang
511ecd9dba fix(plugins): expose inbound message id before dispatch (#112359)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 04:26:28 +08:00
Masato Hoshino
1225aa822f fix(diffs): stop naming gated tools in model-visible guidance (#115919)
The Diffs plugin named the `message` tool from three model-visible surfaces:
the guidance it injects via before_prompt_build, the mode=file tool result,
and its SKILL.md. `disableMessageTool` removes that tool in eight production
paths (subagent spawn, system agent, worker runtime, both skills-workshop
reviews, companion-ask, restart sentinel, active-memory recall), so agents in
those sessions were told to call a tool absent from their tool list.

The same surfaces plus the `diffs` tool description named the separately
gated Canvas plugin — SKILL.md through `canvas present` / `canvas navigate`,
the others through "for canvas use".

All of them now describe the capability instead of naming the tool, per the
root AGENTS.md rule that descriptions never statically name tools from other
toolsets. The two pinned assertions keep their snapshots and now also assert
the invariant directly.

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 04:22:10 +08:00
Peter Steinberger
11de91ad03 fix(qa): forward-port beta 6 validation fixes (#116065)
* test(macos): avoid busy-spin timeout fixtures

* fix(qa): forward-port beta 6 validation fixes

* test(qa): complete Telegram run options fixture
2026-07-29 16:21:04 -04:00
Vincent Koc
dcae280db6 Merge remote-tracking branch 'origin/audit/macos-accessibility-followup' into audit/macos-accessibility-land-116026
* origin/audit/macos-accessibility-followup:
  fix(ui): dismiss picker after focus leaves widget
  fix(ui): keep picker trigger inside focus boundary
  test(ui): split terminal accessibility coverage
  test(ui): cover terminal picker pointer paths
  chore: leave accessibility notes to release prep
  fix(ui): type terminal shadow focus checks
  fix(ui): make terminal session picker keyboard accessible
2026-07-30 04:16:32 +08:00
salvormallow
73b5e7aab4 fix(hooks): save memory on automatic session rollover (#61675)
* fix(hooks): persist memory on session rollover

Co-authored-by: salvormallow <15044561+salvormallow@users.noreply.github.com>

* fix(hooks): persist memory on automatic session reset

* fix(hooks): keep auto-reset reason internal

* fix(hooks): retain auto-reset memory admission

* fix(hooks): make session rollover return explicit

* test(hooks): track session memory temp dirs

* fix(hooks): satisfy session memory return contract

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 04:13:26 +08:00
Vincent Koc
b0a091644f fix(macos): prevent app stalls from stuck subprocess probes (#115938)
* refactor(macos): pin subprocess groups through cleanup

* refactor(macos): keep bounded process probes async

* test(macos): cover async process probe limits

* fix(macos): preserve local gateway version fallback

* test(macos): cover gateway version probe fallback

* fix(macos): handle subprocesses that exit before monitoring

* test(macos): stress instant bounded process exits

* fix(macos): close bounded process exit registration race

* fix(macos): preserve bounded probe output ordering

* fix(macos): propagate bounded process cancellation

* fix(macos): recover missed subprocess exit events

* chore(macos): refresh native i18n inventory

* fix(macos): reject invalid process argument bytes
2026-07-29 20:12:35 +00:00
Peter Steinberger
25d3c39130 fix(protocol): allow config hint documentation URLs (#116063) 2026-07-29 16:09:11 -04:00
Shakker
4849ec4982 fix: clear partial Talk startup state (#116067) 2026-07-29 21:08:21 +01:00
Shakker
a7e881d14f docs: note Talk session isolation 2026-07-29 21:08:21 +01:00
Shakker
cae9a61f6d refactor: keep Talk reset internal 2026-07-29 21:08:21 +01:00
Shakker
c1438475eb test: cover realtime Talk teardown 2026-07-29 21:08:21 +01:00
Shakker
8671148999 fix: isolate realtime Talk sessions 2026-07-29 21:08:21 +01:00
Vincent Koc
702892e1c3 fix(ui): dismiss picker after focus leaves widget 2026-07-30 03:58:24 +08:00
Peter Steinberger
0021e51f22 feat(apple): media renditions, Now Playing, video upload (#116051)
* feat(apple): complete media playback and uploads

* fix(apple): preserve movie picker metadata

* fix(apple): harden rendition and picker routing

* style(apple): fix macOS media formatting
2026-07-29 15:50:18 -04:00
Peter Steinberger
e1cc617f86 feat(android): media renditions, MediaSession, video upload (#116037)
* feat(android): add media rendition and video support

* chore(android): refresh native i18n inventory

* fix(android): opt in to Media3 command API

* chore(android): sync native i18n source locations
2026-07-29 15:44:04 -04:00
Peter Steinberger
d6f9affe79 feat(cli): run agent exec against the ambient config, composed in memory (#116038)
* feat(cli): run agent exec against the ambient config, composed in memory

Exec previously ignored the operator's config entirely, so a one-shot turn
could not reach configured providers, credentials, or agentRuntime harness
selection. It now layers config the way other folder-scoped coding CLIs do.

The composed config is published as this process's runtime snapshot rather
than serialized to a temp file and re-read through OPENCLAW_CONFIG_PATH. The
snapshot is the only in-process config cache, so the file only ever fed it --
while writing env-substituted provider keys to disk where the run's own exec
tool could read them.

* fix(cli): resolve exec stored credentials from the configured agent dir

* chore(scripts): allow agent exec the file-scoped config loader at its process boundary

* test(cli): cover the exec credential default and pinned-config flags
2026-07-29 15:38:27 -04:00
mikasa
d2f2123da5 fix #95351: [Feature]: Generic JSONL line-parsing hook for CliBackendPlugin (native tool-card support beyond claude-stream-json) (#95386)
* feat(plugin-sdk): add CLI backend JSONL parser hook

* fix(test): isolate non-git workspace fixtures

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 03:37:39 +08:00
Stellar鱼
42e23c11e0 feat(plugins): allow per-turn tool narrowing in prompt hooks (#114151)
* feat(plugins): allow per-turn tool narrowing in prompt hooks

* fix(hooks): keep prompt tool policy baseline internal

* fix(test): track active tools in embedded session fixture

* test(agents): preserve active tool fixture state

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 03:28:45 +08:00
Vincent Koc
8a4f891450 docs(hooks): mark pairing hook observation-only (#116055) 2026-07-30 03:27:36 +08:00
Vincent Koc
2ad7427e16 fix(ui): keep picker trigger inside focus boundary 2026-07-30 03:27:24 +08:00
Peter Steinberger
03a2c8208d docs(control-ui): document composer capability menu (#115858)
* docs(control-ui): document composer capability menu

* docs(control-ui): explain tool access discovery states

* docs(map): regenerate docs map
2026-07-29 15:26:56 -04:00
Jason (Json)
3f6f172873 fix(build): bound declaration memory use (#116021) 2026-07-29 13:25:47 -06:00
Kevin Lin
ec32f181a1 fix: Slack replies recover after gateway startup replay (#115991)
* fix: diagnose prepared model owner config drift

* fix(gateway): bind replies to published model owner

* fix(gateway): bind durable replay to published owner

* test: preserve requested workspace in reply mock
2026-07-29 12:25:45 -07:00
sunlit-deng
066241a0d0 fix(azure-speech): keep valid voices from malformed catalogs (#115067)
Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-30 03:20:22 +08:00
Jason (Json)
46ec7a43a8 fix(agents): prevent model runtime startup timeout (#116039) 2026-07-29 13:17:07 -06:00
Peter Steinberger
e0ab154e5e fix(ui): explain unavailable MCP tool catalogs (#115994)
* fix(ui): explain undiscovered MCP tools

* fix(ui): scope MCP discovery notices to the viewed connector
2026-07-29 15:12:08 -04:00
Peter Steinberger
2366d354d9 fix(skills): run experience review outside released request roots (#116040) 2026-07-29 15:07:58 -04:00
Peter Steinberger
ca07207649 docs(security): add safe Gmail reader setup (#116041)
* docs(security): add safe Gmail reader setup

* docs: leave release notes to release flow

* docs: refresh documentation map
2026-07-29 15:07:35 -04:00
Shakker
052212dc97 chore: refresh browser gateway runtime (#116043) 2026-07-29 20:05:56 +01:00
Shakker
2cdedd7eeb test: isolate gateway sequence lifecycle coverage 2026-07-29 20:05:56 +01:00
Shakker
e7547d470c docs: note gateway reconnect sequence fix 2026-07-29 20:05:56 +01:00
Shakker
403a9b778b test: cover gateway sequence reset on restart 2026-07-29 20:05:56 +01:00
Shakker
dbcd479007 test: cover gateway sequence reset on reconnect 2026-07-29 20:05:56 +01:00