Commit Graph

72210 Commits

Author SHA1 Message Date
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