Commit Graph

40938 Commits

Author SHA1 Message Date
Peter Steinberger
bc5999bdca fix(sessions): rebase stale explicit parents onto the transcript tail (#98790) (#115658) 2026-07-29 09:49:59 -04:00
Harish
b8dcac19bf fix(agent): honor explicit local timeout override (#114621) 2026-07-29 09:38:51 -04:00
Vincent Koc
7d74e45f7f fix(ports): prevent duplicate macOS listener probes during status checks (#115813)
* fix(ports): batch macOS lsof listener inspection to one spawn per cycle

(cherry picked from commit edd01c72ae)

* fix(ports): keep single-port lsof checks targeted

(cherry picked from commit 18ece86a57)

* test(daemon): mock batched port usage in coverage

(cherry picked from commit 917ef0d416)

* test(daemon): model batched listener status

* refactor(ports): isolate lsof listener parsing

---------

Co-authored-by: 狼哥 <hanwanlonga@gmail.com>
2026-07-29 21:33:55 +08:00
Colin Johnson
306c02af57 feat(ui): preview session workspace images (#95956)
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 09:22:46 -04:00
Peter Steinberger
8ec4a059fc fix(codex): keep stressed inference turns isolated and observable (#115893) 2026-07-29 09:11:20 -04:00
Peter Steinberger
095f30ae26 feat(skills): review interrupted deep turns in experience review (#115887)
* feat(skills): review interrupted deep turns in experience review

* test(skills): stabilize experience-review live eval and cover interrupted turns
2026-07-29 09:11:02 -04:00
chenyangjun-xy
107f1e6997 fix: reject malformed UTF-8 in proxy gateway error response bodies (#111852)
* fix: reject malformed UTF-8 in proxy gateway error response bodies

Add { fatal: true } to TextDecoder in readProxyErrorData so invalid
UTF-8 bytes throw a TypeError before JSON.parse, instead of silently
becoming U+FFFD inside the parsed error message.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>

* test(agents): prove proxy error UTF-8 boundaries

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 09:10:47 -04:00
Vincent Koc
f65c933287 merge: own Workshop apply transitions
* origin/refactor-workshop-apply-transitions:
  fix(skills): verify workshop migration without recovery
  fix(skills): recover complete apply transitions
  fix(skills): revalidate rollback targets
  fix(skills): restore post-commit write failures
  fix(skills): retain rollback for partial writes
  fix(skills): avoid recursive workshop recovery locks
  fix(skills): use bounded config recovery reads
  chore(skills): prune workshop max-lines baseline
  fix(skills): preserve workshop recovery config
  fix(skills): refresh snapshots after apply rollback
  fix(skills): guard workshop rollback recovery
  refactor(skills): drop obsolete workshop lint waiver
  test(skills): assert recovery through retry
  test(skills): prove workshop apply recovery
  fix(skills): avoid recursive workshop target locks
  refactor(skills): recover interrupted workshop applies
  refactor(skills): own workshop apply transitions
  refactor(skills): isolate workshop transition persistence
  refactor(skills): prepare reversible workspace writes
2026-07-29 21:03:00 +08:00
Vincent Koc
bc30f92c57 fix(test): stop asserting exact video deadline budgets (#115883) 2026-07-29 20:45:44 +08:00
Peter Steinberger
adf3178ae6 feat(gateway): expose MCP tool identity in effective tools (#115870)
* feat(gateway): expose MCP tool identity in effective-tools catalog

* docs(agents): comment utility-tool pass gate invariant
2026-07-29 08:41:04 -04:00
Vincent Koc
05a45ba8c2 fix(skills): verify workshop migration without recovery 2026-07-29 20:39:21 +08:00
Peter Steinberger
40dafc5c33 refactor: replace context-engine retry proxy with declared params (#115872)
* refactor(context-engine): remove legacy host-key retry proxy

* refactor(context-engine): declare accepted host parameters

* fix(context-engine): preserve engine adapter receivers

* refactor(plugins): tighten context-engine compat record

* refactor(context-engine): inline compat window lookup

* docs(plugins): align context-engine removal diagnostic

* test(context-engine): declare harness proof parameters
2026-07-29 08:37:08 -04:00
chenyangjun-xy
431562e775 fix: reject malformed UTF-8 in hosted official plugin catalog feed responses (#111768)
Add { fatal: true } to TextDecoder in readHostedCatalogResponseText so
invalid UTF-8 bytes throw a TypeError before the text is JSON.parsed,
instead of silently becoming U+FFFD inside field values.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 08:36:12 -04:00
synth
151c549494 fix(browser): uploads fail when the browser runs on a remote node (#115291)
* fix(browser): resolve upload paths on the owning browser node, not the Gateway

When a browser session is proxied to a remote node, the upload action
previously ran resolveExistingUploadPaths on the Gateway, pinning paths
to a filesystem the node cannot see and rejecting node-local files. The
node-side /hooks/file-chooser route already re-resolves paths against
its own filesystem, so skip Gateway-local resolution whenever the
request is proxied and forward the requested paths as-is.

Fixes openclaw/openclaw#115251

* fix(browser): transfer uploads to remote browser nodes

* fix(browser): normalize upload abort errors

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-29 20:31:46 +08:00
Vincent Koc
9b419ea2ac fix(skills): recover complete apply transitions 2026-07-29 20:28:49 +08:00
Vincent Koc
8606845bce fix(skills): revalidate rollback targets 2026-07-29 20:23:34 +08:00
Peter Steinberger
5de970c1cc refactor: correct SDK compatibility removal metadata (#115862)
* refactor(plugin-sdk): correct compat removal metadata

* test(plugins): align boundary report compat counts
2026-07-29 08:18:52 -04:00
Yuval Dinodia
edf4aca7bc fix(agents): apply_patch destroys an existing file when a patch creates that path (#114911)
* fix(agents): stop apply_patch from silently overwriting existing files

An "*** Add File:" hunk wrote its target unconditionally. When the path
already existed, apply_patch replaced the entire file, returned Success,
and listed the path under "added", so neither the model nor the UI got
any signal that existing content had been destroyed. The "*** Move to:"
destination of an update hunk had the same gap and reported the clobbered
path as merely modified.

The add and move-to branches now check the destination through the patch
file ops before writing and fail closed when it exists. Routing the check
through fileOps keeps it correct on all three backends (workspace-scoped
fs-safe root, raw fs, sandbox bridge). The check runs per hunk in patch
order, so deleting a path earlier in the same patch and recreating it
still works.

* fix(agents): make apply_patch destination creation atomic

The previous guard checked that an add or move-to destination was absent
and then wrote it. A competing writer could create the path in that gap,
after which the write still replaced it, so the no-clobber guarantee did
not hold under contention.

Destination creation now goes through a single exclusive create-if-absent
operation on every patch backend: Root.create for the workspace-scoped
default, an O_EXCL write for the raw filesystem, and a new pinned create
operation in the sandbox mutation helper that opens the target with
O_CREAT|O_EXCL and reports a reserved exit code when it already exists.
PatchFileOps drops its separate existence check.

Resolving the host ops behind an early return removes the repeated
workspaceOnly branch inside each operation and the optional-call dance
that let a missing root silently skip a write.

* fix(agents): complete atomic apply-patch creation

* fix(agents): preserve raced create replacements

* fix(agents): handle fs-safe patch collisions

* fix(agents): publish sandbox creates atomically

* test(agents): cover exclusive create provenance rollback

* fix(agents): use typed exclusive-create signal

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-07-29 20:17:54 +08:00
Vincent Koc
f8309bf75f fix(skills): restore post-commit write failures 2026-07-29 20:15:48 +08:00
Peter Steinberger
bfb7ff189e docs(codex): replace stale app/list wording with app/installed (#115867) 2026-07-29 08:09:44 -04:00
Peter Steinberger
ef63df8afd fix(memory): preserve taint across transcript runtimes (#115850)
* fix(memory): propagate taint across transcript owners

* test(copilot): consolidate taint journal coverage

* fix(codex): keep event projector within lint budget

* fix(codex): preserve projector merge-head budget
2026-07-29 08:06:17 -04:00
Vincent Koc
38abf500ba fix(update): stabilize cross-version dev upgrades (#115651)
* fix(e2e): stabilize cross-version Parallels upgrades

* fix(e2e): avoid inline macOS guest probes

* fix(e2e): detach Windows dev updates

* fix(e2e): detach macOS guest updates with Node

* fix(e2e): initialize skipped upgrade config

* fix(update): use partial clone for dev checkout

* fix(update): keep Windows dev checkouts clean

* fix(e2e): pin Parallels dev update targets

* fix(e2e): own Parallels gateway restarts

* fix(e2e): verify pinned Parallels checkouts

* fix(e2e): forward Parallels update budgets

* fix(e2e): use canonical provider auth choices

* chore: leave changelog to release automation

* test(ui): stabilize route waits on loaded runners
2026-07-29 19:52:34 +08:00
Peter Steinberger
8915f9c337 fix(gateway): prevent overlapping setup after wizard cancellation (#115856)
* fix(wizard): retain cancelled sessions until runner settles

* fix(wizard): purge cancelled sessions after settlement

* test(gateway): cover settled wizard replacement

* test(gateway): split wizard cancellation e2e

* test(gateway): fix wizard e2e env key types

* fix(gateway): forward daemon choice through wizard RPC

Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com>

* test(gateway): harden wizard cancellation cleanup

Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com>

* chore: drop changelog edit (release generation owns it)

---------

Co-authored-by: TheAngryPit <16145902+TheAngryPit@users.noreply.github.com>
2026-07-29 07:49:25 -04:00
Peter Steinberger
ac9d0ceab8 refactor: simplify TOOLS.md doctor migration recovery (#115857)
* refactor: prototype simpler tools migration recovery

Not landable until shipped interrupted-claim compatibility is decided.

* fix: diagnose waived beta migration artifacts
2026-07-29 07:47:37 -04:00
Vincent Koc
3d8953c3fe merge current main after workshop rollback fix
* origin/main:
  fix(ui): fall back to updateAvailable.latestVersion for handoff version verification (#112987)
  feat(gateway): manage audio and video attachments end to end (#115842)
2026-07-29 19:35:06 +08:00
Vincent Koc
e65cb941ca fix(skills): retain rollback for partial writes 2026-07-29 19:34:57 +08:00
dandriscoll
f0379468ff fix(config): materialize snapshot mode with the same defaults as load (#114759)
* fix(config): materialize snapshot mode with the same defaults as load

* test(config): prove snapshot-injected defaults stay out of persisted config

* test(cli): keep unknown-command process test hermetic

---------

Co-authored-by: Kevin Lin <kevin@dendron.so>
2026-07-29 04:34:13 -07:00
Peter Steinberger
a2ead0a929 fix(memory): recover divergent dreaming journals (#115855)
* fix(memory): recover divergent dreaming journals

Co-authored-by: brokemac79 <martin_cleary@yahoo.co.uk>

* chore: drop changelog edit (release generation owns it)

---------

Co-authored-by: brokemac79 <martin_cleary@yahoo.co.uk>
2026-07-29 07:32:26 -04:00
Peter Steinberger
4c4aa2ed12 feat(gateway): manage audio and video attachments end to end (#115842)
* feat(gateway): manage audio and video attachments

* feat(gateway): preserve generated media metadata

* fix(gateway): align seeded managed media

* fix(gateway): scope pending media trust by URL

* fix(gateway): split managed media by trust

* fix(gateway): require terminal media trust unanimity

* fix(gateway): align managed media metadata types

* fix(gateway): refresh managed media contracts

* chore(ci): model managed media test seams

* test(sessions): expect canonical media kinds
2026-07-29 07:27:36 -04:00
Vincent Koc
c8e8a33b66 merge latest main before workshop final review
* origin/main:
  fix: CJK replies are silently dropped instead of recovered when the model skips message(action=send) (#115556)
  fix(gateway): stop managed crash loops for pending agent DB migrations (#115631)
  fix(plugins): validate constrained empty config schemas (#109569)
  fix(cli-runner): scope bundle-MCP cleanup to the run's session, not the process-wide loopback server (#110251)
  fix(feishu): log message content JSON parse failures instead of silently swallowing (#107947)
  docs(vision,agents): layer calibration, interface-on-demand, telemetry opt-in, whole-document guidance rules
  fix(memory): preserve Windows session ownership (#115851)
  fix(compaction): drop context-engine fallback on codex ownership skip (#114155) (#115666)
  fix(msteams): ignore blank certificate settings (#109112)
2026-07-29 19:26:59 +08:00
ACD_RD4駱俊馳
e7f0fdfd9b fix: CJK replies are silently dropped instead of recovered when the model skips message(action=send) (#115556)
* fix(auto-reply): count CJK sentence terminators in stranded private-final detection

* fix(auto-reply): compare private-final substance thresholds with the CJK-aware estimator

* fix(auto-reply): detect CJK sentence boundaries

---------

Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 07:23:33 -04:00
Vincent Koc
f6e874835c fix(gateway): stop managed crash loops for pending agent DB migrations (#115631)
* fix(gateway): recover managed services after agent DB migration

* test(infra): use managed temp directory cleanup
2026-07-29 19:21:46 +08:00
zhanxingxin1998
943ebc012e fix(plugins): validate constrained empty config schemas (#109569)
Route pattern, dependency, and active conditional schemas through the real plugin config validator while keeping standalone conditional annotations on the empty-config path.

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 07:20:52 -04:00
Totó Busnello
d7864458a7 fix(cli-runner): scope bundle-MCP cleanup to the run's session, not the process-wide loopback server (#110251)
* fix(cli-runner): scope bundle-MCP cleanup to the run's session, not the process-wide loopback server

On run end, runCliAgentInternal handled cleanupBundleMcpOnRunEnd by calling
closeMcpLoopbackServer(), which tears down the process-wide MCP loopback HTTP
server for the whole gateway. Any concurrent CLI turn or restart-recovered live
session that already baked that loopback port into its --mcp-config is left
pinned to a dead port ("Unable to connect"), while the gateway still reports the
session as recovered. This is the same hazard the embedded-runner (run-loop.ts)
and CLI dispatch (cli-backend-dispatch.ts) paths already avoid by retiring only
session-scoped MCP runtimes.

Retire only this run's session-scoped MCP runtime here too (by session key, with
a session-id fallback), leaving the shared loopback server up for other sessions.
Every CLI spawn/respawn already re-derives the current loopback port and rewrites
mcp.json via prepareCliRunContext, so removing this teardown keeps recovered
sessions on a live transport instead of stranding them.

Fixes #98435

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MMPjCgbgHTiB8X3R9XACPW

* fix(cli): preserve rebound MCP session owners

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-07-29 07:18:50 -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
Vincent Koc
093b5c5f88 merge current main after workshop lock fix
* origin/main:
  fix(usage): guard malformed DeepSeek payloads (#110785)
2026-07-29 19:03:01 +08:00
Vincent Koc
43e1fb0096 fix(skills): avoid recursive workshop recovery locks 2026-07-29 19:02:46 +08: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
Vincent Koc
ee1b919c2c merge latest main into workshop apply transitions
* origin/main:
  docs(agents): reword imported review rules in repo voice
  docs(agents): add context-budget, tool-description, cache-invalidation, and review-premise rules
  docs(agents): mock-gateway proof satisfies gate without discouraging live proof
  docs(agents): add vitest in-flight edit rule and mock-gateway proof recipe
  docs(agents): restructure root AGENTS.md around product doctrine and deduped policy
  fix(codex): keep completed answers over audit gaps (#115849)
  test(cli): isolate unknown-command process validation (#115848)
  fix(memory-host-sdk): resolve stable execPath for worker fork to survive Homebrew Node upgrades (#99318)
  feat(ui): add composer capability menu (#115800)
  fix(synology-chat): stop fabricating send message ids (#110770)
  fix(feishu): reply to direct messages by chat id (#109637)
  fix(acp): attach error listener to spawned ACP agent process (#109529)
  fix(sessions): deliver agent announcements to direct message sessions (#115811)
  fix(nextcloud-talk): reject reactions for disabled or unconfigured accounts (#112675)
  refactor(ui): move Agent Defaults entry from the sidebar into the Agents page (#115836)
  feat(gateway): push session PR indicators to subscribed clients (#115643)
  fix(setup): make Gemini recovery actionable (#115835)
  fix(terminal-core): prevent String.replace $ pattern injection in display-string (#111398)
  refactor(channels): share ingress retention defaults (#115824)
  fix(nostr): profile imports vary on timestamp ties (#111798)
2026-07-29 18:55:16 +08: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
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
Vincent Koc
01739d6bff fix(skills): use bounded config recovery reads 2026-07-29 18:31:44 +08: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
Peter Steinberger
986e5d1758 refactor(channels): share ingress retention defaults (#115824) 2026-07-29 06:24:30 -04:00
Vincent Koc
a6dd28226b merge current main into workshop apply transitions
* origin/main:
  fix(codex): restore connected apps for token-authenticated runs (#115075)
  fix(codex): classify hosted search timeouts (#115837)
  fix(msteams): keep attachment replies in channel threads (#94348)
  fix(telegram): linkPreview:false is ignored on streamed replies (#114125)
  fix(protocol): make Swift model checks non-mutating (#115793)
  fix(searxng): avoid duplicating search endpoint (#113661)
  fix(agents): preserve tool-result middleware identity (#115821)
  refactor(meetings): consolidate runtime facades (#115819)
2026-07-29 18:22:39 +08:00
Vincent Koc
e2ff075b07 fix(skills): preserve workshop recovery config 2026-07-29 18:22:28 +08: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