Skip to content

fix(upstream-sync): selective cherry-picks from openclaw 58e9628300..fa39bef389#232

Merged
frankhli843 merged 22 commits into
mainfrom
maintenance/upstream-openclaw-20260524
May 24, 2026
Merged

fix(upstream-sync): selective cherry-picks from openclaw 58e9628300..fa39bef389#232
frankhli843 merged 22 commits into
mainfrom
maintenance/upstream-openclaw-20260524

Conversation

@frankhli843

Copy link
Copy Markdown

Summary

Selective cherry-pick sync of relevant upstream openclaw commits (range 58e9628300..fa39bef389), skipping commits that conflict with gemmaclaw architecture or introduce incompatible harness restructuring.

Changes included

  • WhatsApp auto-reply delivery log: serialize Error objects properly in WhatsApp plugin (fix fix(whatsapp): serialize Error in auto-reply delivery log openclaw/openclaw#85777)
  • Backup hardlink rejection: reject missing hardlink targets in tar archive
  • Backup link cache: BackupLinkCache disables hardlink deduplication in tar
  • Backup volatile filter: skip volatile paths (sockets, pids, temp files) during backup
  • Backup EACCES fix: skip unreadable files in tarFilter via accessSync(R_OK) check — handles root-owned .promisor files created by Docker git clones
  • Sandbox workspace mounts: resolveReadOnlyWorkspaceSkillMounts overlays skills directories read-only; split agent workspace mounts
  • Sandbox config hash: computeSandboxConfigHash includes mount format version and explicit env policy epoch
  • Model runtime aliases/policy: upstream model alias and policy modules for selection compatibility

Test fixes

  • workspace-mounts.test.ts: replaced hardcoded /tmp/workspace with isolated temp dirs to prevent false positives when /tmp/workspace/skills exists on disk from prior smoke runs
  • docker.config-hash-recreate.test.ts: same isolation fix for 3 tests that computed config hashes against hardcoded paths

Skipped upstream commits

Skipped harness restructuring (c8b75a7) that conflicts with gemmaclaw-specific harness layout; applied only the minimal relevant subset via cherry-pick conflict resolution.

Test plan

  • Changed test files pass: pnpm test src/agents/sandbox/workspace-mounts.test.ts src/agents/sandbox/docker.config-hash-recreate.test.ts — 20/20 pass
  • CI full test suite
  • Live Docker smoke test: GEMMACLAW_LOCAL_AGENT_SMOKE_REQUIRED=1 pnpm test:docker:gemmaclaw-setup-live-smoke

RomneyDa and others added 22 commits May 23, 2026 22:09
…ion (openclaw#85862)

Summary:
- The PR skips agent-harness compaction preflight for provider-owned or configured CLI runtime sessions, adds claude-cli regression coverage, includes a changelog entry, and applies small test/type cleanups.
- Reproducibility: yes. at source level. Current main still routes provider-owned `claude-cli` runtime compaction preflight through harness selection, where `claude-cli` is not a registered embedded harness.

Automerge notes:
- PR branch already contained follow-up commit before automerge: fix openclaw#84857: skip CLI runtime harness preflight during compaction
- PR branch already contained follow-up commit before automerge: fix(clawsweeper): address review for automerge-openclaw-openclaw-8487…

Validation:
- ClawSweeper review passed for head 1dd8a88.
- Required merge gates passed before the squash merge.

Prepared head SHA: 1dd8a88
Review: openclaw#85862 (comment)

Co-authored-by: 张贵萍0668001030 <zhang.guiping@xydigit.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Co-authored-by: clawsweeper[bot] <274271284+clawsweeper[bot]@users.noreply.github.com>
Approved-by: takhoffman
Co-authored-by: takhoffman <781889+takhoffman@users.noreply.github.com>
# Conflicts:
#	CHANGELOG.md
#	extensions/meeting-notes/index.test.ts
#	extensions/meeting-notes/src/tool.ts
#	src/agents/harness/selection.test.ts
#	src/agents/harness/selection.ts
#	src/gateway/server-startup-post-attach.test.ts
# Conflicts:
#	src/agents/sandbox/fs-paths.ts
# Conflicts:
#	src/agents/sandbox/workspace-skills-bridge-readonly.test.ts
# Conflicts:
#	src/agents/sandbox/browser.create.test.ts
#	src/agents/sandbox/docker.config-hash-recreate.test.ts
# Conflicts:
#	src/commands/backup-verify.test.ts
#	src/infra/backup-create.test.ts
#	src/infra/backup-create.ts
…5777)

The auto-reply "delivery failed" log path passes a raw Error
under the `err` field. tslog's default JSON serialization
renders bare Error instances as `{}` because Error own data
properties are non-enumerable. Every delivery failure in
production therefore logs `err: {}`, forcing operators to
guess the underlying Baileys error from timestamp alone.

Convert Error to `{ type, message, stack }` plus own-enumerable
properties at the log site, so Boom-style subclass diagnostics
(output.statusCode, data) and custom OutboundDeliveryError
fields (stage, results) survive. Non-Error rejection values
pass through unchanged.

Tests cover Error, Error subclass (Boom-style), string
rejection, and object rejection paths.

AI-assisted: Claude Code (Opus 4.7) authored, codex review
locally addressed.
# Conflicts:
#	extensions/whatsapp/src/auto-reply/monitor/inbound-dispatch.test.ts
#	extensions/whatsapp/src/auto-reply/monitor/inbound-dispatch.ts
- Add AgentRuntimePolicyConfig to types.agents-shared.ts
- Add agentRuntime field to AgentModelEntryConfig, ModelDefinitionConfig, ModelProviderConfig
- Add models field to AgentConfig
- Add relativePathEscapesContainerRoot to sandbox/path-utils.ts
- Add backup-volatile-filter.ts from upstream (isVolatileBackupPath)
- Add writeTarArchiveWithRetry, buildExtensionsNodeModulesFilter to backup-create.ts
- Fix resolveConfiguredAgentHarnessPolicy -> resolveAgentHarnessPolicy in selection.ts
…75a7 patch

The previous cherry-pick of c8b75a7 (and fa39bef duplicate) introduced
upstream-only files (v2.ts, policy.ts, result-classification.ts, etc.) that
depend on types not present in gemmaclaw, and corrupted several test files.

This commit reverts all wrongly-introduced upstream-only files to their
gemmaclaw branch-point state and applies only the actual c8b75a7 change:
- Add isCliRuntimeProvider/isCliRuntimeAliasForProvider guards to
  maybeCompactAgentHarnessSession to skip compaction preflight for CLI runtimes
- Add minimal gemmaclaw-compatible tests for the new skip behavior
- Remove dead code introduced by the rollback (staging-based archive helpers,
  unused imports, unreachable functions)
- Delete upstream-only meeting-notes extension files not in gemmaclaw
- Restore all test files to their gemmaclaw-compatible versions
…root-owned files)

Docker git clones create root-owned .promisor files that are unreadable on the
host. Add accessSync R_OK check in tarFilter to skip such files gracefully.

Also fix sandbox tests to use real temp directories instead of hardcoded
/tmp/workspace paths for more robust test isolation.
…re logging

The cherry-pick of f0ec730 added logWhatsAppReplyDeliveryError and
normalizeErrForLog but missed wiring onError in dispatcherOptions because
the upstream base already had the onError call site (added in a prior
upstream commit not in our range). Add the missing onError handler so
delivery failures are logged with serialized Error objects.
…commit

Commit 0696195 was overly aggressive: it reverted upstream-only harness
files but also stripped ReplyDeliveryInfo, normalizeErrForLog, and
logWhatsAppReplyDeliveryError that were legitimately added by our
WhatsApp cherry-pick (2688cf4). Restore them so onError can call
logWhatsAppReplyDeliveryError correctly.
…line

extensions/whatsapp/runtime-setter-api.ts was added by cherry-pick but
the generated baseline JSON was not updated. Run runtime-sidecars:gen to
add dist/extensions/whatsapp/runtime-setter-api.js.
@frankhli843 frankhli843 merged commit 2e56407 into main May 24, 2026
105 of 106 checks passed
@frankhli843 frankhli843 deleted the maintenance/upstream-openclaw-20260524 branch May 24, 2026 04:57
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants