licheer-zte
97d3d60b51
fix(markdown): unify reasoning tag parsing ( #113205 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-27 07:48:57 -04:00
Peter Steinberger
c6b2ec28c8
refactor: mechanical dedup batch (protocol types, update-cli bridge, talk fallback) ( #114432 )
...
* refactor(onboarding): remove search setup barrel
* refactor(plugins): reuse detected package manifest
* test(update): replace global helper bridges
* refactor(talk): remove dead legacy response fallback
* refactor(protocol): derive root types from schema
The maintainer approved broadening the additive schema-backed type surface without a protocol version bump.
* fix(plugins): drop stale package path import
* test(protocol): type dynamic registry lookups
* docs(talk): explain canonical response boundary
* refactor(talk): enforce canonical response input
* fix(protocol): keep root type exports registry-free
* refactor(update): expose helpers through test facades
* fix(protocol): keep result types on leaf schema modules
2026-07-27 06:55:07 -04:00
Peter Steinberger
dd472deab4
fix(plugins): preserve settings for compatibility IDs ( #114521 )
...
Honor canonical plugin identity across allowlists, denylists, and plugin mutations. Preserve and deterministically deep-merge alias configuration, and explicitly persist canonical entries in CLI enable and disable commands.
Closes #114320
Co-authored-by: kevin2966n <147227108+kevin2966n@users.noreply.github.com >
2026-07-27 06:54:14 -04:00
Peter Steinberger
c1dab6a5e0
test: speed up measured CI hotspots ( #114367 )
...
* test: remove redundant followup goal integration
* test: cover CLI help table in process
* test: inject usage cost settle timing
* test: reuse rendered plugin SDK baseline
* test: reuse bundled provider registrations
* test: isolate startup quarantine mapping
* test: inject session patch auth metadata
* test: avoid CLI help catch shadowing
* test(cli): keep gateway dependencies internal
* test(auto-reply): stabilize cold followup setup
2026-07-27 06:25:56 -04:00
Peter Steinberger
d16c2dedd2
fix(cli): prevent blocked plugin enable side effects ( #114490 )
2026-07-27 05:58:33 -04:00
Peter Steinberger
269bc5c89e
fix(cli): preserve machine-readable stdout ( #113654 )
...
Co-authored-by: 1052326311 <65798732+1052326311@users.noreply.github.com >
2026-07-27 05:44:16 -04:00
Peter Steinberger
fd6e042d87
fix(gateway): keep configured local auth authoritative ( #114462 )
...
* fix(gateway): align configured local credentials
* test(gateway): align local credential coverage
* chore(gateway): leave release note to release process
2026-07-27 05:43:31 -04:00
WilShi
dafecc756a
fix(cli): surface deviceId in devices list table ( #114370 )
...
* fix(cli): surface deviceId in devices list table
* docs(changelog): add devices list deviceId fix (#114279 )
* fix(cli): keep paired device IDs copyable
Co-authored-by: WilShi <1638083992@qq.com >
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-27 05:24:34 -04:00
Peter Steinberger
914bd1946a
fix(cli): isolate explicit profiles from inherited service state ( #114446 )
2026-07-27 04:59:20 -04:00
Dallin Romney
ec391edea7
fix: clarify unstored exec approval defaults ( #114417 )
2026-07-27 16:07:11 +08:00
Peter Steinberger
669db2968f
refactor(agents): retire TOOLS.md into an AGENTS.md section with a doctor migration ( #113966 )
...
* fix(agents): stop retired attestation hashes from faking a vanished workspace
* feat(agents): migrate TOOLS.md content into the AGENTS.md tools section
* refactor(agents): drop TOOLS.md from the workspace bootstrap set
* refactor(policy): read tool policy entries from AGENTS.md
* docs: describe local tool notes as an AGENTS.md section
* test(codex): drop TOOLS.md developer-instruction coverage with the removed path
* test(agents): cover the TOOLS.md doctor migration behaviors
* refactor(doctor): satisfy TOOLS.md migration lint
* test(agents): split workspace attestation survival coverage
* refactor(codex): simplify workspace context basenames
* refactor(doctor): keep TOOLS.md migration helpers module-local
* docs: regenerate docs map
* fix(doctor): keep migration claims fresh
* fix(doctor): preserve nested tool notes
* refactor(doctor): split tools migration helpers
* refactor(doctor): limit TOOLS.md migration to workspace root
* style(doctor): keep migration under line limit
* fix(doctor): recover interrupted AGENTS publish
* docs(hooks): describe root-only TOOLS.md migration accurately
* fix(doctor): preserve migrated tool guidance visibility
* test(agents): regenerate prompt snapshots after rebase
* fix(policy): block evaluation while TOOLS.md is unmigrated
* fix(doctor): check merged bootstrap budget per agent
* fix(doctor): keep budget helper internal
* refactor(doctor): keep migration budget helpers to their consumers
2026-07-27 03:56:30 -04:00
Peter Steinberger
e9990b818a
feat(cli): add models auth logout ( #114407 )
2026-07-27 03:48:27 -04:00
Peter Steinberger
007ed6d8af
refactor(cli): consolidate capability and command regression suites ( #114349 )
2026-07-27 01:51:16 -04:00
Peter Steinberger
6e2d4cbee0
refactor(cli): consolidate regression test fixtures ( #114334 )
2026-07-27 01:45:02 -04:00
Peter Steinberger
e9ef30e739
refactor(config): split write preparation primitives ( #114228 )
2026-07-26 22:00:29 -04:00
Peter Steinberger
53e3f296b1
fix: release ClawHub lifecycle state on CLI exit ( #114090 )
2026-07-26 06:39:45 -04:00
Peter Steinberger
9eae43bd37
refactor(infra): move exec approvals into the shared SQLite state DB ( #114063 )
...
* refactor(infra): move exec approvals into the shared SQLite state DB
Delete the file-runtime exec-approvals store (exec-approvals.json + .lock
sidecar machinery) on both runtimes and make the reserved
exec_approvals_config singleton row canonical. Doctor owns the one-time
import with claim/verify/receipt discipline; runtime fails closed with a
doctor instruction while un-migrated legacy state exists. The wire CAS
contract, socket semantics, and gateway auth-token derivations are
unchanged. Kills the #113929 lock-contention bug class structurally and
nets around -2.9k lines.
* fix(infra): green CI gates and retire file-era exec approvals tests
Break the migration-type import cycle with a leaf contract, regenerate the
plugin-SDK API and native i18n baselines for the intentional surface change,
drop unused exports, and replace the macOS file-era approvals test suite with
SQLite-backed behavior coverage per the obsolete-internals test policy.
* chore: green max-lines ratchet, native i18n baseline, and unused-export scan
2026-07-26 06:39:23 -04:00
Peter Steinberger
5347285d6b
improve(models): source pricing from hosted catalog ( #114060 )
...
* feat(model-catalog): serve hosted fallback pricing
* refactor(config): retire client pricing bootstrap settings
* refactor(gateway): delete client pricing refresh runtime
* docs(models): explain hosted catalog pricing
* fix(model-catalog): preserve pricing privacy and aliases
* fix(model-catalog): fingerprint pricing eligibility
* fix(model-catalog): harden pricing endpoint checks
* fix(model-catalog): materialize source-safe pricing aliases
* fix(model-catalog): keep unknown pricing fallbacks safe
* fix(model-catalog): reject zero-only hosted prices
* fix(model-catalog): fail closed without pricing policy metadata
* refactor(utils): extract usage pricing normalization
* fix(model-catalog): rebuild policy-owned pricing namespaces
* test(model-catalog): type publisher cost fixtures
* chore(config): regenerate schema baselines
* fix(utils): keep raw pricing tiers private
2026-07-26 03:48:25 -04:00
yt2102
6bd8e0387c
fix(memory): close previous embedding provider before replacement ( #113471 )
...
* fix(memory): close previous embedding provider before replacement
* fix(memory): increase embedding worker close grace period for slow hosts
* fix(memory): clear this.provider after close in resetProviderInitializationForRetry
Co-authored-by: Sanjay Santhanam <notifications@github.com >
* fix(memory): serialize embedding provider replacement
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): unify provider transition lifecycle
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): join worker shutdown lifecycle
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): block worker restart during close
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): retain failed provider retirements
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): drain retirements on manager close
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): make worker close joinable
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): preserve sync before provider retirement
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): separate worker exit from disposal errors
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): avoid shutdown admission gap
Co-authored-by: yt2102 <yt2102@qq.com >
* style(memory): format provider lifecycle fix
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): bound embedding worker termination
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): fail closed on fallback initialization errors
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): retry primary after fallback creation failure
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): retain disconnected embedding workers until exit
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): isolate shared fallback transition failures
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): serialize scoped manager retirement
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): retain failed global manager closes
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): serialize manager admission with teardown
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): serialize outer manager lifecycle
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(gateway): close request-scoped embedding providers
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): retire qmd managers before replacement
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(gateway): support synchronous embedding cleanup
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): isolate manager lifecycle scopes
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(cli): close request-scoped embedding providers
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): canonicalize manager lifecycle ownership
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): retry primary after null fallback result
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(gateway): retain failed embedding provider closes
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(gateway): lease closable embedding providers
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(gateway): drain retained embedding providers
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): join lazy fallback teardown
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(gateway): drain embedding providers after HTTP close
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): retain failed qmd candidate cleanup
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): aggregate retained qmd teardown failures
Co-authored-by: yt2102 <yt2102@qq.com >
* refactor(memory): keep qmd lifecycle policy unchanged
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): retain failed worker construction clients
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(gateway): scope local embedding retirement by provider
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): drain provider generations before retirement
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): drain admitted operations before teardown
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): preserve provider identity through vector search
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): lease provider generation through embedding
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): lease provider through index publication
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): keep sync harness hooks optional
Co-authored-by: yt2102 <yt2102@qq.com >
* refactor(memory): own generations in sync lifecycle
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): preserve query runtime across retirement
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): pin FTS-only sync generations
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): retry failed worker construction cleanup
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): drain admitted searches before closing
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): close manager and gateway admission races
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): serialize qmd wrapper replacement
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): serialize failed qmd retirement
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): satisfy qmd lifecycle type and deadcode gates
Co-authored-by: yt2102 <yt2102@qq.com >
* test(memory): type qmd lifecycle doubles
Co-authored-by: yt2102 <yt2102@qq.com >
* style(gateway): clarify created embedding provider
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): drain availability probes before close
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): preserve cleanup ownership without blocking fallback
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): retire lancedb embedding providers
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): preserve generic provider cleanup receiver
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): close lancedb CLI embeddings
Co-authored-by: yt2102 <yt2102@qq.com >
* test(memory): normalize abort rejection reason
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): retain lancedb provider retirements
Co-authored-by: yt2102 <yt2102@qq.com >
* fix(memory): drain lancedb embedding uses
Co-authored-by: yt2102 <yt2102@qq.com >
---------
Co-authored-by: Sanjay Santhanam <notifications@github.com >
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-26 03:00:22 -04:00
Peter Steinberger
99d8d90572
refactor(memory-core): split CLI runtime ( #114013 )
...
* refactor(memory-core): split CLI runtime
* refactor(memory-core): narrow CLI helper exports
* test(memory-core): follow secret resolver split
2026-07-25 21:37:59 -07:00
Peter Steinberger
69399b1cc3
feat(cli): add openclaw agent exec headless one-shot runner ( #113988 )
...
* feat(cli): add agent exec headless runner
* test(cli): align agent parent startup paths
* fix(cli): scope agent exec environment explicitly
2026-07-25 20:59:20 -07:00
Peter Steinberger
54df949aaa
fix: list every cron job from one consistent Gateway snapshot ( #113805 )
...
* fix: list cron jobs from one complete Gateway snapshot
* fix: keep cron inventory result internal
---------
Co-authored-by: Peter Steinberger <steipete@golden-gate.local >
2026-07-25 12:52:37 -07:00
Peter Steinberger
fa1222d393
fix(cli): complete short option aliases in Bash ( #113811 )
...
Co-authored-by: Peter Steinberger <steipete@golden-gate.local >
2026-07-25 12:34:23 -07:00
Peter Steinberger
bde7033ac4
feat(models): dynamic model catalogs via hosted refresh overlay ( #113660 )
...
* feat(models): add remote catalog core
* feat(config): add model catalog refresh settings
* feat(models): wire remote catalog refresh
* ci(models): publish hosted catalog
* docs(models): document catalog refresh
* test(models): allow catalog count growth
* refactor(models): preserve safe catalog merge
* ci(models): publish catalog through GitHub
* docs(models): link public catalog history
* fix(model-catalog): enforce Kysely store access
* fix(model-catalog): trim unused catalog exports
* docs(models): refresh generated docs map
2026-07-25 12:15:05 -07:00
Peter Steinberger
a1cc41acbc
fix: recognize Bash completion installed in login profiles ( #113790 )
...
* fix(cli): recognize Bash completion in login profiles
* test: track Bash completion profile fixtures
---------
Co-authored-by: Peter Steinberger <steipete@golden-gate.local >
2026-07-25 11:08:59 -07:00
Peter Steinberger
89984a5082
fix: preserve child process signal exit codes ( #113685 )
...
Co-authored-by: Peter Steinberger <steipete@golden-gate.local >
2026-07-25 06:51:49 -07:00
Peter Steinberger
4aeb426d2d
fix: route skill verification through the managed proxy ( #113683 )
...
Co-authored-by: Peter Steinberger <steipete@golden-gate.local >
2026-07-25 06:39:57 -07:00
Patrick Erichsen
559bc2adc8
feat(skills): support external skills.sh references ( #112751 )
2026-07-25 08:24:34 -05:00
Peter Steinberger
446816f751
test: table-drive followup scenarios, centralize sanitizer wiring, remove obsolete negatives ( #113583 )
...
* test(auto-reply): table-drive followup runner scenarios
* test(channels): centralize sanitizer wiring coverage
* test: remove obsolete negative coverage
2026-07-25 02:14:44 -07:00
Peter Steinberger
e069b9dbdd
fix(ui): repair settings titles, scope form-unsafe banner, consolidate advanced settings ( #113160 )
...
* feat(ui): repair settings titles, scope form-unsafe banner, consolidate advanced tier
- Advanced/Notifications settings headers rendered raw i18n keys
(tabs.advanced/tabs.notifications); configPageTitle now resolves through
the nav registry titleForRoute, deleting the drifting key map.
- Form-unsafe banner is value-aware (only when the user's config has a value
at a form-unsupported path in the active scope), names the paths, offers an
Open Raw editor action, and sits in the content column instead of full-bleed.
- Advanced tier collapses to one synced toggle: hidden advanced fields render
a ghost row that enables the toggle; the Advanced page always reveals and
hides the toggle; per-section details state and the controlled-open dance
are deleted; toggle visibility mirrors the renderer's tier split.
- schema.tags no longer tags facet-less paths as "advanced" (common fields
like update.channel wore a lying chip); the chip is no longer rendered in
form rows while tag:advanced search keeps working.
* fix(config): dev bootstrap writes canonical agents.entries; finish stale agents.list sweep
- openclaw gateway run --dev failed on a fresh state dir: the bootstrap wrote
the retired agents.list array and validation rejected its own config
(Unrecognized key: list). It now writes the keyed agents.entries record;
new dev.test.ts validates the written shape against the zod schema.
- Revive the dead gateway hot-reload rule: prefix agents.list never matched
canonical config diffs, so per-agent heartbeat edits fell through to the
agents:none tail rule; the rule now matches agents.entries.
- config set replacement protection moves from the dead agents.list array
to the agents.entries map (joins plugins.entries/auth.profiles family).
- Sweep remaining stale agents.list config-path strings in hints, fix-it
messages, elevated gates, doctor hints, audit text, and type docs to
agents.entries.*; RPC ids, the internal list projection, and doctor
legacy-migration references intentionally keep the old name.
* test(ui): derive nav i18n audit from route registry; fix stale bootstrap hint assertion
- Knip flagged navigationCopyEntries (test-only export); the audit now walks
ALL_ROUTES through prod titleForRoute/subtitleForRoute and rejects raw
dotted-key output, so no export exists solely for the test.
- commands-context-report expected the retired agents.list[] hint wording.
* fix(config): align rebase resolution with main's roster-aware diagnostic
- tool-policy-diagnostic: keep main's test expectations (dotted
agents.entries.<id> paths from the roster-aware implementation); our
pre-rebase bracket-style assertions no longer match any code.
- Reapply the placeholder sweep the conflict resolution dropped:
generic agents.list[] fallbacks in tool-policy-diagnostic and the audit
sandbox-mode hint now say agents.entries.*.
2026-07-25 00:51:57 -07:00
Peter Steinberger
3018e8b78a
refactor: deduplicate micro helpers onto canonical homes ( #113534 )
...
* refactor: deduplicate micro helpers
* fix(ai): keep hash prefix helper internal
2026-07-25 00:41:01 -07:00
Peter Steinberger
82d1a03f25
refactor(agents): move implicit-main fallback into load-time roster injection ( #112678 )
...
* refactor(agents): require explicit roster defaults
* feat(onboard): create named first roster agent
* refactor(agents): remove runtime main fallbacks
* style(agents): apply roster refactor formatting
* refactor(agents): finish roster-only runtime sweep
* fix(doctor): migrate legacy main session sqlite
* fix(doctor): harden roster session migrations
* fix(onboard): commit first agent atomically
* fix(config): support empty-roster analysis
* fix(agents): preserve legacy main state during creation
* fix(setup): materialize baseline agent roster
* fix(agents): harden legacy default transfer recovery
* fix(agents): simplify roster-only legacy compatibility
* fix(agents): preserve staged first-agent entries
* fix(config): migrate persisted implicit-main rosters
* fix(config): preserve staged empty rosters
* fix(agents): finalize roster-only upgrade paths
* fix(sessions): close legacy main migration outcomes
* fix(config): migrate legacy roster markers at load
* fix(sessions): preserve roster upgrade history
* refactor(sessions): restore lean legacy main compatibility
* fix(setup): prepare first-agent credentials before publish
* fix(config): stabilize roster snapshot migration
* refactor(sessions): shrink legacy main compatibility
* fix(agents): restore roster compatibility fidelity
* fix(sessions): preserve divergent legacy history
* refactor(agents): narrow roster-only scope
* fix(config): isolate roster migration
* test(agents): align roster-only fixtures
* fix(agents): keep main agent undeletable
* fix(agents): harden roster migration invariants
* fix(agents): close setup and audit scope gaps
* fix(cron): scope session reaper throttles by agent
* fix(agents): preserve scoped owner precedence
* fix(config): preserve authored config ownership
* fix(setup): keep default workspace and roster in sync
* fix(setup): preserve default entry workspace on bare runs
* fix(agents): adapt roster rebase to keyed entries
* fix(agents): honor both roster representations
* fix(agents): route roster reads through shared helpers
* fix(config): preserve canonical roster writes
* fix(cron): resolve dynamic default for session reaper
* fix(agents): close dynamic default migration gaps
* fix(agents): align scoped session ownership
* fix(sessions): preserve legacy main directory casing
* fix(agents): align cron and legacy auth ownership
* fix(setup): provision the committed default workspace
* fix(cron): align scoped ownership and reaping
* fix(cron): treat blank agent ids as absent
* fix(cron): retain configured session-store owners
* fix(agents): repair roster-aware CI boundaries
* fix(cron): preserve scoped ownership resolution
* fix(agents): preserve rosterless maintenance paths
* fix(agents): propagate roster ownership through runtime boundaries
* fix(agents): preserve roster ownership across runtime paths
* fix(agents): harden roster diagnostics and legacy routing
* fix(agents): remove redundant diagnostic import
* test(agents): type CLI policy fixture explicitly
* fix(config): preserve canonical roster mutation identity
* fix(doctor): read canonical agent rosters consistently
* fix(config): resolve compound roster unsets safely
* fix(config): finalize main-session reconciliation
* fix(doctor): read canonical session state safely
* fix(sessions): preserve current visibility alias
* fix(config): track roster include provenance
* test(config): type roster provenance cases
* fix(config): refine roster include ownership
* fix(agents): preserve staged roster invariants
* test(config): align fixtures with explicit roster ownership
* test(node-host): preserve optional plan typing
* fix(config): preserve authored roster projections
* test(config): keep raw roster fixtures explicit
* test(config): normalize rosters at runtime fixtures
* fix(config): protect authored roster ownership
* fix(agents): require explicit session ownership
* fix(agents): enforce scoped roster ownership
* fix(sessions): merge fixed-store agent partitions
* fix(agents): harden roster ownership boundaries
* fix(config): reject ambiguous roster projections
* fix(sessions): preserve persisted store ownership
* fix(sessions): keep collision diagnostics additive
* fix(security): scan malformed roster workspaces
* test(config): align snapshot fixtures after rebase
* test(agents): use explicit roster fixtures
* fix(config): harden roster diagnostic boundaries
* fix(sessions): isolate fixed-store agent databases
* test(agents): type malformed default markers
* refactor(sessions): extract store collision resolution
* test(system-agent): split oversized setup coverage
* style(system-agent): format split setup suite
* fix(sessions): preserve promoted store ownership
* fix(sessions): derive scoped owner before target
* fix(sessions): preserve explicit sqlite ownership
* fix(agents): restore roster compatibility across CI
* fix(agents): enforce roster-owned runtime boundaries
* fix(agents): satisfy default lookup lint
* test(sessions): split known-owner coverage
* fix(state): satisfy path identity lint
* fix(agents): preserve malformed roster safety boundaries
* fix(agents): restore roster compatibility at runtime boundaries
* fix(config): satisfy roster boundary type checks
* fix(agents): preserve roster ownership across runtime probes
Setup inference probes now execute as the configured roster owner. Malformed agent-prefixed session rows are intentionally omitted by the fail-closed visibility contract rather than normalized by tests.
* fix(agents): satisfy session list owner lint
* fix(agents): preserve roster-owned runtime boundaries
Restore shared logical rows for exact SQLite session locators while keeping their physical database owner separate. The ownership regression test now constructs an explicit sole-owner database directly instead of relying on first-touch capture, matching the intentional shared-store contract.
* fix(sessions): preserve multiply owned exact stores
* fix(sessions): restore runtime owner boundaries
Keep incognito sentinels agent-owned, fold default-agent approvals into the global snapshot, and preserve the configless legacy-main CLI policy fallback. Also repair the existing CLI watchdog test lifecycle so the compact shard observes its timeout without an unawaited assertion or async timer stall; product behavior is unchanged by that test-only fix.
* test(ci): align owner-scoped fixtures
These assertions are unchanged. The fixtures now declare the intended non-default runner, expose the session-key constant imported by production status code, and select the main approvals bucket explicitly on Windows.
* fix(agents): close final roster ownership gaps
2026-07-24 22:38:09 -07:00
Vincent Koc
ec7f8e9dd1
fix(sqlite): keep read-only state journal-aware ( #113404 )
...
* fix(sqlite): keep read-only state journal-aware
* fix(sqlite): snapshot read-only state safely
* fix(sqlite): retry read snapshot replacement races
* fix(sqlite): isolate private staging directory setup
2026-07-25 08:33:46 +08:00
Gio Della-Libera
e9b3252ae8
feat(claws): separate portable and OpenClaw profiles ( #112773 )
...
* feat(claws): add portable agent policy settings
* fix(claws): align portable agent policy
* fix(claws): preserve host policy boundaries
* feat(claws): separate portable and OpenClaw profiles
* test(claws): align profile fixtures with portable schema
* fix(claws): align portable profile boundaries
2026-07-24 12:06:02 -07:00
Vincent Koc
8029b3bbb8
fix(update): repair plugin config during upgrade finalization ( #113324 )
...
* fix(update): repair configured plugins during finalization
* fix(update): allow legacy config through migration
2026-07-25 00:18:59 +08:00
Vincent Koc
218c2fe3a5
fix(update): preserve JSON output during resume ( #113298 )
2026-07-24 18:56:20 +08:00
Vincent Koc
741ed2d6a8
fix(update): migrate config before plugin convergence ( #113280 )
2026-07-24 16:55:38 +08:00
Peter Steinberger
eac10a01d5
refactor(cli): split config command implementation ( #113248 )
...
* refactor(cli): split config command implementation
* refactor(cli): keep split helpers private
* style(cli): format private unset result
2026-07-24 00:27:00 -07:00
Peter Steinberger
73d279c232
fix(plugins): preserve shipped SDK and lifecycle state ( #113101 )
...
* fix(plugins): restore shipped channel compatibility
* docs(plugins): record shipped channel compatibility
* test(plugin-sdk): budget shipped channel compatibility
* docs(plugin-sdk): track shipped channel compat window
* test(plugins): align shipped compat guardrails
2026-07-23 12:30:54 -07:00
Patrick Erichsen
e567a5ffa0
fix: ClawHub plugin installs do not count as installs ( #113133 )
2026-07-23 12:30:15 -07:00
Peter Steinberger
4bd01bd4e1
fix(cli): restore macOS system CA trust ( #113112 )
...
* fix(cli): preserve macOS system CA trust
* test(cli): satisfy one-shot exit lint
* test(cli): cover finalizer through public lifecycle
2026-07-23 11:28:54 -07:00
Peter Steinberger
3e2b3ea4d5
feat(cron): database-backed heartbeat monitor scratch replaces HEARTBEAT.md ( #112967 )
...
* feat(cron): move heartbeat context into database-backed per-job cron scratch
- new additive cron_job_scratch SQLite table (revision tombstones keep
compare-and-swap monotonic across unset/recreate; 256KiB cap)
- heartbeat runner reads monitor scratch instead of workspace HEARTBEAT.md;
heartbeat_respond gains a private scratch replacement parameter
- openclaw doctor --fix migrates HEARTBEAT.md into scratch (hash-verified,
archived under state backups, idempotent, symlink-contained)
- gateway cron.scratch.get/set admin RPCs + openclaw cron scratch CLI
- workspace bootstrap no longer seeds HEARTBEAT.md; Codex heartbeat file
guidance removed; docs and prompt snapshots updated
* fix(cron): review round 2 — shared-workspace heartbeat migration and non-default agent monitors
- doctor migration groups agents by heartbeat source file and imports into
every monitor before archiving/removing the shared file once
- exempt heartbeat payloads from the main-session default-agent restriction:
monitors only poke the wake bus, so non-default agents converge again
- document why disabled monitors retain their last cadence (config default
already resolves before the fallback)
* fix(cron): honor configured cron store, legacy heartbeat fallback, and safer doctor claim
* fix(cron): claim HEARTBEAT.md before committing scratch and restore without clobbering
* fix(cron): pin migration CAS to precondition revision, re-verify claim on release, archive first, report scratch as pending
* docs(heartbeat): remove retired config options
* fix(cron): crash-recoverable migration claims, partial-import rollback, latest-response scratch pairing
* test(heartbeat): keep latest scratch proposal paired
* fix(cron): roll back committed scratch on changed-claim release and restore no-row state
* fix(cron): revision-guarded rollback delete and recreated-file detection on claim release
* fix(cron): treat every failed claim re-verification as a migration conflict
* test(heartbeat): rename ack test after ackMaxChars retirement
* fix(heartbeat): keep monitor scratch out of bypass-scope runs
* fix(cron): resolve claimed symlinks on release and gate legacy fallback on proven scratch state
* fix(cron): strict claim-name recovery and per-entry migration grouping
* fix(ci): heartbeat scratch gate repairs — lint causes, dead exports, since-train, inventory path, prompt snapshot, regenerated docs map, SDK baseline, protocol bindings
* fix(cron): live-owner claim guard and canonical entry-key migration grouping
* fix(cron): archive claimed inode on release and flag orphan claims beside recreated files
* docs(cron): document process-global state-db invariant for scratch service ops
* chore(i18n): refresh native inventory line numbers after protocol binding regen
2026-07-23 11:10:49 -07:00
Peter Steinberger
a2be4efb63
refactor(transcripts): store meeting captures in SQLite ( #112910 )
...
* refactor(transcripts): move meeting transcripts to sqlite
* perf(transcripts): batch legacy utterance staging
* fix(transcripts): report recovery moves on migration failure
* fix(transcripts): refresh archive membership after recovery
* fix(transcripts): omit failed summary export paths
* fix(transcripts): type restore metadata tuple
* fix(transcripts): align migration contract gates
* fix(transcripts): verify case-aliased export ownership
* fix(transcripts): allowlist doctor verifier sqlite query
* fix(transcripts): preflight partial artifact recovery
* fix(transcripts): stabilize exports and legacy path checks
* fix(transcripts): resolve case-renamed doctor ownership
* fix(transcripts): harden canonical export recovery
* fix(transcripts): preserve pending import boundaries
* refactor(transcripts): split migration insert transaction
* perf(transcripts): query selected summary existence
2026-07-23 07:18:55 -04:00
Peter Steinberger
3b5226fde6
test(cli): consolidate update command fixtures ( #113003 )
...
* test(cli): consolidate update command fixtures
* test(cli): preserve stale resume fixture shape
2026-07-23 06:19:39 -04:00
Peter Steinberger
a12e0f26ee
fix(plugins): serialize lifecycle mutations and preserve setup-required installs ( #112763 )
...
* fix(plugins): harden concurrent lifecycle mutations
* fix(update): preserve post-core restart snapshot
* fix(update): retain authoritative plugin records on resume
* fix(update): reconcile plugin records after handoff
2026-07-22 23:25:48 -04:00
Jason (Json)
dcaed5999d
fix(plugins): keep source-checkout npm installs registry-backed ( #112829 )
2026-07-22 19:36:31 -06:00
Gio Della-Libera
7d159fdc77
Apply consented grouped Claw updates ( #102982 )
...
* Apply consented grouped Claw updates
* test(claws): cover update application
* docs(claws): document consented updates
* fix(claws): preserve uncertain update state
* fix(claws): preserve inherited lifecycle guards
* fix(claws): derive update package contracts
* fix(claws): type update package lookup
* test(claws): complete update capability fixtures
* refactor(claws): share cron payload builder for updates
* refactor(claws): extract update plan summary
* fix(claws): activate cron after update dependencies
* fix(claws): preserve state after uncertain cron update
* fix(claws): persist partial update provenance
* fix(claws): preserve update ownership metadata
* test(claws): track update apply temp dirs
* test(claws): align update cron mock result
* fix(claws): update apply writes agent entries
---------
Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com >
2026-07-22 17:42:42 -07:00
Jesse Merhi
4a2a600809
feat(channels): add channel-owned setup contracts ( #112176 )
...
* feat(channels): add channel-owned setup contracts
* test(channels): align legacy setup fixtures
* chore(channels): regenerate config and SDK baselines after rebase
* fix(update): run fresh doctor after current-process core changes
* fix(channels): align add pre-scan with execution precedence
* style(cli): format channels-cli test additions
* fix(channels): restore option-before-positional channel resolution via metadata arity scan
* fix(channels): keep help flags out of metadata arity escalation
* test(update): mock fresh post-update doctor in current-process suites
* style: format review fixes and correct entrypoint mock type
* fix(channels): register only modern contract options for dual-publishing plugins
* test(update): align downgrade suites with fresh-doctor child invocation
* docs(channels): record empty-contract and input-forwarding invariants
* fix(line): keep the shipped --token switch as a channel access token alias
* fix(signal): stop treating exact cross-family loopback endpoints as bind-aligned
* chore(config): regenerate docs config baselines after second rebase
* style: format rebased channels add tests
* fix(channels): enforce field-key and flag-name agreement in setup contracts
* fix(signal): detect container endpoints for bare --http-url setup
* fix(signal): ignore unconfigured accounts in transport collision checks
* fix(channels): validate negated setup flags in contract and normalizer
* fix(signal): preserve existing transport kind when setup detection is unreachable
* style(signal): use direct boolean check in collision guard
* style(signal): type test config literals
* docs(update): record two-read design of fresh-doctor validation gate
* fix(channels): satisfy post-rebase architecture gates
* docs: refresh channel setup map
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-22 19:57:42 -04:00
Peter Steinberger
9b1e9a5e66
test: trim update CLI boilerplate ( #112793 )
2026-07-22 19:10:02 -04:00
Gio Della-Libera
f004d76a0e
Plan grouped Claw agent updates ( #102959 )
...
* Plan grouped Claw agent updates
* test(claws): cover update planning
* docs(claws): document update preview
* fix(claws): bind update capability effects
* fix(claws): redact update capability effects
* fix(claws): bind capability previews to exact changes
---------
Co-authored-by: Patrick Erichsen <patrick.a.erichsen@gmail.com >
2026-07-22 13:44:09 -07:00