Keep the new attempt-result field optional for third-party harness compatibility while defaulting absent values at the runner boundary.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Thread tool-timeout state through timeout-triggered compaction, generic timeout payload synthesis, and the changelog.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Detect run-level timeouts that fire while a tool call is still active and keep them out of assistant model fallback.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary:
- The PR changes Gateway reload planning, CLI plugin install-index writes, plugin runtime/cache cleanup, docs, changelog, and tests so plugin enable/disable hot reloads while install/update/uninstall stay restart-backed.
- Reproducibility: yes. The earlier blocker has a source-level reproduction: run an external plugin install/up ... watches config and only the managed plugin index changes; the PR now tests that path and queues a restart.
ClawSweeper fixups:
- Included follow-up commit: fix: hot reload plugin management changes
- Included follow-up commit: fix(clawsweeper): address review for automerge-openclaw-openclaw-7597…
- Ran the ClawSweeper repair loop before final review.
Validation:
- ClawSweeper review passed for head 860594f722.
- Required merge gates passed before the squash merge.
Prepared head SHA: 860594f722
Review: https://github.com/openclaw/openclaw/pull/75976#issuecomment-4363168379
Co-authored-by: Peter Steinberger <steipete@gmail.com>
Co-authored-by: clawsweeper <274271284+clawsweeper[bot]@users.noreply.github.com>
Reuse the startup runtime plugin registry across provider/tool helper paths while preserving standalone CLI/MCP fallback loading.
Includes follow-up fixes for migration/provider/tool registry bootstrap and regression coverage for compatible registry reuse.
Co-authored-by: DmitryPogodaev <pogodaev.dm@gmail.com>
Fix restart recovery for main sessions that use topic-suffixed transcript files by matching cleaned transcript lock paths directly while preserving the canonical session-id fallback for stale metadata.
Thanks @anyech.
Codex review on PR #75960 flagged that prepareClaudeCliSkillsPlugin and
the claude-live-session fingerprint read skillsSnapshot.resolvedSkills
directly without a disk fallback. After the persistence-layer strip,
those consumers would see an empty Skill[] on cold session resume,
breaking the documented Claude Code skills integration.
Add a hydration helper in ensureSkillSnapshot that rebuilds
resolvedSkills from a fresh workspace scan when the loaded snapshot
lacks it, while keeping the persisted prompt/skills/skillFilter/version
fields untouched so the model's prompt-cache key stays stable across
resume. The embedded runner's existing consumer-level fallback in
src/agents/pi-embedded-runner/skills-runtime.ts is now a redundant
safety net rather than the only fallback path.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Each SessionEntry carried the fully parsed Skill[] (including each
SKILL.md body) inside skillsSnapshot.resolvedSkills, multiplied across
every active session. Strip the field at the persistence chokepoint —
normalizeSessionStore in store-load.ts — so every load and every save
naturally drops it. The runtime already falls back to a workspace skill
scan when resolvedSkills is absent (see
src/agents/pi-embedded-runner/skills-runtime.ts:14), so prompts and
session resume behavior are unchanged.
Legacy sessions.json files self-heal on first load: normalize strips
the in-memory store, the next write rewrites the file in stripped form.
Test fixture (100 sessions × 50 skills × ~3KB body) goes from ~32MB to
under 2MB on disk.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>