Shakker
08eac200b3
fix: publish Buzz bot profile names
2026-07-26 14:09:23 +01:00
Shakker
0e0698b6bc
fix: correct Buzz room authorization guidance
2026-07-26 14:09:23 +01:00
Shakker
439de5577e
fix: synchronize Buzz verification with gateway config
2026-07-26 14:09:23 +01:00
Shakker
3cba004098
fix: wait for Buzz gateway reload after setup
2026-07-26 14:09:23 +01:00
Shakker
c6bee43a3a
fix: preserve Buzz identity during setup navigation
2026-07-26 14:09:23 +01:00
Shakker
abe73322a2
test: clean up Buzz lifecycle temp directories
2026-07-26 14:09:23 +01:00
Shakker
2746e35f69
fix: complete Buzz channel contracts
2026-07-26 14:09:23 +01:00
Shakker
40cb79edc9
fix: support standalone Buzz sends
2026-07-26 14:09:23 +01:00
Shakker
b6cb3b6d7d
fix: verify Buzz room access during setup
2026-07-26 14:09:23 +01:00
Shakker
089931d95d
fix: make paused channel setup resumable
2026-07-26 14:09:23 +01:00
Patrick Erichsen
aa0d3192d2
feat(channels): add Buzz channel plugin
2026-07-26 14:09:23 +01:00
Peter Steinberger
6a11e44497
fix(config): forward authorized roster removals ( #114099 )
2026-07-26 08:31:35 -04:00
Peter Steinberger
201e02f226
fix(ui): preserve concurrent background task progress ( #114085 )
...
* fix(ui): preserve concurrent background task progress
* fix(ui): retain concurrent task events across stale snapshots
* fix(ui): preserve chronological task snapshot progress
* fix(ui): type buffered task event replay
2026-07-26 08:03:18 -04:00
Peter Steinberger
43a695396d
test(memory): mock admitted search sync ( #114096 )
2026-07-26 07:33:24 -04:00
Peter Steinberger
19a98c873c
refactor(auth): finish SQLite-only auth profile cutover ( #114033 )
...
* refactor(auth): finish SQLite-only profile cutover
* test(auth): isolate SQLite shadow fixtures
* test(auth): satisfy OAuth refresh lint
* test(auth): infer legacy sidecar fixtures
* fix(auth): fail closed on unreadable stores
* fix(auth): recheck migration readiness on lookup
* fix(auth): preserve compatibility owner checks
* fix(auth): align SQLite cutover proof
* style(qa): format SQLite auth helpers
* fix(auth): recover interrupted SQLite migrations
* fix(auth): bind materialized SQLite refs
* style(auth): clarify receipt hash value
* fix(auth): preserve state-only OAuth routing
* fix(auth): snapshot receipted migration sources
* fix(auth): fail closed across recovery races
* fix(auth): close legacy recovery gaps
* fix(auth): serialize SQLite refresh recovery
2026-07-26 07:27:54 -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
cd5a5ecb4c
fix(ui,gateway): make catalog sidebar sections drag-reorderable ( #114074 )
...
* fix(ui,gateway): make catalog sidebar sections drag-reorderable
* test(ui): split sidebar section-reordering cases under max-lines
* perf(ui): keep catalog section rendering out of startup bundle
2026-07-26 05:31:33 -04:00
Peter Steinberger
fe847911c0
test(qa): wait for durable fanout completion ( #114080 )
2026-07-26 05:26:33 -04:00
Peter Steinberger
27293aa273
feat(ui): gateway subtitle in the sidebar footer identity card ( #114059 )
...
* feat(ui): show gateway subtitle in sidebar footer
* chore: keep CHANGELOG release-only
* test(ui): fix indexed-access type in sidebar gateway case
* perf(ui): trim footer subtitle startup bytes
* perf(ui): trim gateway footer strings
* perf(ui): re-record startup baseline for gateway footer
* perf(ui): re-record startup baseline from Linux build
2026-07-26 05:23:42 -04:00
Peter Steinberger
afb347c7f9
fix(agents): clear recovery residue on sessions without a recorded status ( #114078 )
2026-07-26 05:10:27 -04:00
ClawSweeper
bfd6f2efdc
feat: make working claw tricks rare surprises ( #114025 )
...
One deterministic special move on ~3% of runs, played once after a delay,
then back to the default loop; approval waits and reduced motion stay on
the default claw. Includes render-path test coverage for the wiring.
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-26 04:43:57 -04:00
ClawSweeper
203ef71ca3
fix(ui): center running-task preview over link ( #114069 )
...
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-26 01:39:30 -07:00
Peter Steinberger
27ede408df
fix(agents): clear orphaned restart-recovery residue on terminal sessions ( #114071 )
...
* fix(agents): clear orphaned restart-recovery residue on terminal sessions
* fix(agents): treat stale delivery ids as terminal recovery residue
* fix(agents): keep delivery claim ids out of recovery cleanup
2026-07-26 04:37:17 -04:00
Peter Steinberger
e66809fa35
ci: guard historical npm lock checks ( #114073 )
2026-07-26 04:27:20 -04:00
ClawSweeper
af26c7ed72
fix(ui): keep chat run status in one assistant turn ( #114039 )
...
* fix(ui): unify active chat status
* fix(ui): preserve chat recap ordering
* fix(ui): re-render turn rows when embedded run status changes owner
---------
Co-authored-by: Peter Steinberger <steipete@gmail.com >
2026-07-26 04:09:08 -04:00
Peter Steinberger
0c8f070c92
fix(gateway): anchor Control UI assets on deep routes ( #114061 )
2026-07-26 04:00:54 -04:00
Peter Steinberger
8684e7ce03
fix: restore beta runtime release gates ( #114064 )
...
* test(qa): fix release runtime recovery gates
* test(qa): typecheck restart execution assertions
2026-07-26 03:58:41 -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
Peter Steinberger
0951d0dd30
fix(agents): keep queued replies alive across lane waits and make stuck recovery truthful ( #114058 )
...
* fix(agents): keep queued replies alive across lane waits and make stuck recovery truthful
* fix(auto-reply): guard optional reply operation in lane-wait progress
* fix(auto-reply): limit dropped-reply feedback to pre-run stale expiries
* test(auto-reply): add staleExpiryReason to memory runner stub
* refactor(auto-reply): make staleExpiryReason optional on reply operations
2026-07-26 03:07:26 -04:00
Peter Steinberger
417bd3c88a
feat(agents): derive default run concurrency from CPU count ( #114047 )
...
* feat(agents): derive default run concurrency from CPU count
* test(agents): pin lane-resume concurrency in suspension persistence case
2026-07-26 03:02:34 -04:00
Peter Steinberger
8b5fa2baef
fix(config): refuse roster writes that silently drop agent entries ( #114054 )
...
* fix(config): refuse roster writes that silently drop agent entries
* test(gateway): widen writeConfigFile mock for roster removal options
2026-07-26 03:00:30 -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
042d344c57
fix(gateway): bound session observer digest attempts and stop unpersistable loops ( #114052 )
...
* fix(gateway): bound session observer digest attempts and stop unpersistable loops
* docs(gateway): clarify hasRunDigest vs attempt-counted digest budget
* fix(gateway): coerce unpersistable digest results in terminal synthesis
* test(gateway): split observer digest-budget cases under max-lines
2026-07-26 02:58:32 -04:00
Peter Steinberger
8eafae4af7
fix(ui): recover from unknown selected agents and surface session-catalog failures ( #114048 )
...
* fix(ui): recover from unknown selected agents and surface session-catalog failures
* test(ui): split catalog request-error cases under max-lines
2026-07-26 02:42:59 -04:00
Peter Steinberger
c4f148368a
fix(agents): retire completed session work lanes ( #114051 )
2026-07-26 02:27:42 -04:00
Peter Steinberger
f0b7542a22
feat(mac): gateway menu-bar surfaces and Gateways main menu ( #114038 )
...
* feat(mac): add gateway menu surfaces
* docs(mac): document gateway menu surfaces
* test(mac): make dashboard frame assertions display-independent
2026-07-26 02:13:13 -04:00
Peter Steinberger
9dfb2a1318
fix: show native history in adopted Pi and OpenCode sessions ( #114040 )
...
* fix(plugins): import adopted catalog history into the OpenClaw transcript
Import native Pi and OpenCode history when a catalog session is adopted so the OpenClaw transcript reflects the full conversation immediately.
Mark imported user rows with mirrorOrigin because they are transcript mirrors, not new external turns. This preserves watcher deduplication and prevents adopted history from being reported as fresh upstream input.
* refactor(plugins): split catalog history importer
Keep the session catalog contract module leaf-like by moving transcript mutation into a dedicated runtime module. This breaks the registry-to-transcript import cycle while preserving the Plugin SDK entrypoint and importer behavior.
2026-07-26 02:09:48 -04:00
Dallin Romney
59cb9233f8
fix(qa): bound Slack observer teardown ( #113605 )
2026-07-26 14:06:51 +08:00
Qiong
89cc2ccdb3
fix(auto-reply): match throttling transient errors in fallback-state regex ( #112702 )
...
`TRANSIENT_ERROR_DETAIL_HINT_RE` used `throttl\b` which never matches
real throttling error messages (throttle, throttled, throttling) because
`\b` requires a non-word character after `l`, but `l` is always
followed by a word character in all English inflections.
Fix: `throttl\b` → `throttl\w*` to match all throttling variants.
Add regression tests using real AWS Bedrock ThrottlingException fixtures.
2026-07-26 09:03:23 +03:00
Peter Steinberger
299f5a4941
refactor(copilot): split attempt runtime ( #114035 )
...
* refactor(copilot): split attempt runtime
* refactor(copilot): narrow attempt helper exports
* refactor(copilot): expose user input bridge type
* refactor(copilot): consume user input bridge type
2026-07-26 01:58:31 -04:00
Peter Steinberger
c31d15bd0f
test(tui): show terminal output when a PTY fixture RPC wait times out ( #114045 )
2026-07-26 01:50:48 -04:00
Peter Steinberger
2bf57bb2fb
fix(cli): write agent exec plain output to stdout ( #114043 )
2026-07-26 01:50:32 -04:00
Peter Steinberger
1677058cf5
fix(ui): keep first prompt across gateway reconnects ( #114042 )
2026-07-26 01:46:56 -04:00
Peter Steinberger
f6131a4fbf
build(deps): remove npm shrinkwrap; mirror pnpm lock into transient package locks ( #114006 )
...
* build(deps): remove npm shrinkwrap; mirror pnpm lock into transient package locks
npm 12 removed shrinkwrap (command + tarball/root loading). Delete all 82
committed npm-shrinkwrap.json files and stop publishing lockfiles; keep
pnpm-lock.yaml as the single reviewed dependency boundary. The generator
becomes scripts/generate-npm-package-lock.mjs and feeds plugin bundling via
a transient package-lock.json + npm ci (works on npm 11 and 12). Tarball
validation treats the published 2026.7.2 beta train as a shrinkwrap
transition; self-update npm detection now uses install topology instead of
the shipped shrinkwrap.
* fix(deps): repair lint, deadcode, and test-type lanes for the npm 12 migration
- sort integrity comparisons with an explicit comparator (oxlint)
- keep resolveBunGlobalNodeModules module-local (knip unused-export gate)
- model npm pack --json as npm<=11 array / npm 12 name-keyed object
- default calver destructuring in the tarball test fixture
2026-07-26 01:29:55 -04:00
Peter Steinberger
e935a008f8
docs(cli): cross-link agent exec from automation and policy pages ( #114034 )
2026-07-26 01:19:11 -04:00
Peter Steinberger
2de58d408a
Control UI: gateway-owned sidebar section order ( #113930 )
...
* feat(ui): gateway-owned sidebar section order with hover-only drag grips
* fix(ui): repair sidebar section order CI gates
* fix(protocol): keep sectionOrder optional for older gateways
Native Swift clients ship separately from gateways, so new clients must decode older gateway responses that omit sectionOrder.
* fix(ui): reconcile gateway section ordering with main
* fix(state): allow lazy tables in v5 maintenance
* refactor(ui): retire prefs session section order in favor of gateway-owned order
Supersedes #113948 by deleting the unreleased ui.prefs.sessionSectionOrder key and its browser plumbing. Gateway SQLite sidebar_sections remains the single canonical store.
2026-07-26 01:15:19 -04:00
Peter Steinberger
36404eaa3b
fix(ui): dashboard widgets leave a gap below content and hover chrome blocks widget buttons ( #114012 )
...
* fix(ui): hug auto widget cards to content and compact board chrome into a top-left pill
* test(gateway): retry temp-dir cleanup in chat abort persistence suite to absorb ENOTEMPTY race
* fix(ui): strip board pill to move and menu on narrow widgets so the action corner stays widget-owned
2026-07-26 01:14:40 -04:00
Peter Steinberger
5284408470
refactor(agents): split subagent-spawn and drop its max-lines baseline entry ( #114030 )
...
* refactor(agents): split subagent spawn helpers
* refactor(agents): keep spawn agent state caller-owned
* refactor(agents): keep relocated subagent-spawn symbols module-private
2026-07-26 01:12:07 -04:00
Peter Steinberger
29ca63221f
fix(ci): keep Telegram release scratch in isolated runtime ( #114026 )
...
* fix(ci): export Telegram candidate artifacts dir
* style(test): format Telegram QA assertion
2026-07-26 01:04:38 -04:00