All notable changes to this project will be documented in this file.
[unreleased]
๐ผ Other
[V0-5] fix(plugin): run npm install in extension directory (#103)
The plugin installer copies dist/, package.json, and openclaw.plugin.json
but never ran npm install, leaving extensions without node_modules.
Added execSync npm install --omit=dev after file copy step.
[V0-5] fix(api): accept explicit configPath in createConfigApplyHandler (#104)
Components using custom --config paths couldn't use config apply because
the handler derived a path that didn't exist. Added optional configPath
parameter that takes precedence over registered and derived paths.
[059] fix: revert version bump (release is owner-controlled)
[059] refactor: hoist workspace config load to ComponentWriter cycle (DRY)
[059] test: add restart lifecycle and devRepos schema coverage
[059] fix: race condition in start() during finishing cycle, remove redundant nullish coalescing
Npm audit fix
โ๏ธ Miscellaneous Tasks
Release v0.5.9
[0.5.8] - 2026-04-22
๐ผ Other
[83] fix: resolve config apply path from registered override (#83) and downgrade transient fetch errors to concise warnings (#77)
Add registerComponentConfigPath/getComponentConfigPath to init state so
components can register their actual --config path after startup.
configApplyHandler now reads from the registered path when available,
falling back to the derived configRoot path.
Add isTransientError classifier (ECONNRESET, ETIMEDOUT, AbortError, etc.)
and use it in createAsyncContentCache default error handler to emit
single-line warnings for recoverable network failures while preserving
full stack traces for unexpected errors.
[83] fix: traverse full error cause chain for transient classification
โ๏ธ Miscellaneous Tasks
Release v0.5.8
[0.5.7] - 2026-04-15
๐ Features
Condense managed content and rewrite HEARTBEAT alerts
๐ Bug Fixes
Use dynamic budget in HEARTBEAT alert text
โ๏ธ Miscellaneous Tasks
Release v0.5.7
[0.5.6] - 2026-04-08
๐ Bug Fixes
Serialize managed content writer cycle
Preserve file lock safety for managed writes
Prevent component writer cycle reentry
๐ผ Other
Npm audit fix
โ๏ธ Miscellaneous Tasks
Release v0.5.6
[0.5.5] - 2026-04-05
๐ผ Other
[73] fix: preserve dist/ subdirectory in plugin install layout
copyDistFiles was copying dist contents flat into the extension root,
but package.json (main: dist/index.js) and openclaw.plugin.json
(skills: ["dist/skills/..."]) both expect a dist/ subdirectory.
Change copyDistFiles target from extensionsDir to
join(extensionsDir, 'dist') so the installed layout matches
the manifest paths.
Closes #73
โ๏ธ Miscellaneous Tasks
Release v0.5.5
[0.5.4] - 2026-04-05
๐ผ Other
[73] fix: replace distDir param with importMetaUrl in createPluginCli
createPluginCli now derives the package root internally via
packageDirectorySync and appends /dist, instead of trusting
callers to compute distDir. This fixes:
Server plugin skill path mismatch (distDir pointed to dist/,
flattening the copy and breaking the skill path declared in
openclaw.plugin.json)
Three plugins overcopying the entire package root into
extensions (README, LICENSE, content/, etc.)
Also extracts getPackageRoot() as a new exported helper and
refactors getPackageVersion() to use it.
BREAKING CHANGE: CreatePluginCliOptions.distDir replaced by
importMetaUrl. All plugin consumers must update their cli.ts.
Closes #73
[73] fix: validate dist directory exists before copying
Add explicit existence check for distDir before calling copyDistFiles.
Provides a clear error message if the plugin hasn't been built,
instead of a cryptic ENOENT from readdirSync.
Addresses review feedback from gemini-code-assist.
README.md: fix resolveConfigValue signature (positional params, not options object)
README.md: add installRecord param and plugins.installs to patchConfig description
README.md: clarify loadWorkspaceConfig return behaviour (no warning on missing file)
content/skill.md: correct workspace file monitoring threshold โ not configurable
via jeeves.config.json (heartbeatCycle calls checkWorkspaceFileHealth without
passing wsConfig values, so the 80% threshold is a fixed default)
Extract duplicated fetch+AbortController+timeout pattern from statusCommand.ts
and uninstallCommand.ts into shared fetchWithTimeout() in plugin/http.ts
Remove deprecated component/resolveWorkspacePath.ts re-export (scheduled for v0.3.0)
Move resolveWorkspacePath export to plugin barrel in src/index.ts (canonical location)
Fix skipped comment numbering (3-6) in refreshPlatformContent.ts
Fix 1: patchConfig now patches tools.alsoAllow instead of tools.allow.
Removed plugins.allow patching (not in OpenClaw spec). patchAllowList
creates the array when it doesn't exist on add mode.
Fix 2+3: refreshPlatformContent now writes the calling component's
version entry (with serviceVersion from probe) to the shared state
file, then reads ALL component versions to populate every service row.
Removed separate writeComponentVersion call from ComponentWriter.
Fix 4: component/resolveWorkspacePath.ts now re-exports from
plugin/resolve.ts instead of duplicating the implementation.
Test simplified to verify re-export identity.