Commit Graph

78712 Commits

Author SHA1 Message Date
licheer-zte f24e164f69 fix(recovery): reclaim proven-stale reply-only ownership with zero queued backlog (#122265)
* fix(recovery): reclaim proven-stale reply-only ownership with zero queued backlog

Stuck-session recovery kept reply-only ownership forever when the queued
backlog was empty: isActiveRunProgressStale short-circuits to false at
queueDepth 0, so stale active_reply_work was never reclaimed even after
the durable session became killed. Evaluate staleness for reply-only
ownership without the queue gate (the gate stays for run-handle paths),
so proven-stale reply work expires through the existing abort-and-drain
owner path while global-lane and deferred-maintenance exemptions and
live reply work with recent progress are preserved.

Closes #122227

* fix(recovery): keep maintenance phases out of zero-backlog stale reclaim

The zero-backlog reclaim path (requireQueueBacklog: false) applied to
every reply-only operation, including preflight_compacting and
memory_flushing. Those phases are explicitly recognized as compaction
and may honor a configured timeout above the stale threshold, so a valid
long-running maintenance operation could be force-cleared early.

Restore the queue-backlog guard for the maintenance phases so an
unqueued compaction or memory flush is never reclaimed by this path;
ordinary reply-only ownership keeps the zero-backlog expiry. Adds
regressions for both maintenance phases.
2026-08-12 17:42:48 -07:00
Vincent Koc 8733dcd05f fix(ci): expose AI pack diagnostics (#122786) 2026-08-13 08:25:58 +08:00
Josh Lehman 41f4b5f673 fix(ui): archived sessions leave sidebar after navigation (#122876)
* oc-ad0.1: fix archived child session retention

* oc-37c: evict archived child on navigation
2026-08-13 00:25:38 +00:00
Peter Steinberger f3f203f31d refactor(agents): split subagent-control.ts into owner modules (#122875) 2026-08-12 17:23:39 -07:00
Peter Steinberger abe0cd691d refactor(media): remove orphan generation facades (#122874) 2026-08-12 17:19:22 -07:00
Josh Lehman 542ac9ac68 fix: make live updater checkout portable (oc-237) (#122873) 2026-08-12 17:17:18 -07:00
Josh Lehman a3207b574c fix(ui): show progress during new session startup (#122713)
* fix(ui): show progress during new session startup

Refs #122703

* oc-1fa: keep new-session progress through handoff

* fix(ui): keep new-session handoff live

* fix(ui): preserve navigation callback contract
2026-08-13 00:17:12 +00:00
Jacqueline Henriksen 800328f14e feat(cli): allow editing automation display names (#122702)
* feat(cli): allow editing automation display names

* feat(cli): allow clearing automation display names
2026-08-12 17:15:21 -07:00
Peter Steinberger 2abe2e29bb test(cron): focus runtime config composition (#122867)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-12 17:13:40 -07:00
Vyctor H. Brzezowski a5ff8f5c33 fix(ui): keep composer capability menus within the viewport (#122296)
* fix(ui): constrain composer capability menus

* fix(ui): cap composer capability menu height

* test(ui): cover long capability menu states

* test(ui): capture capability menu interaction states

* fix(ui): keep dark capability states legible
2026-08-12 17:10:57 -07:00
Peter Steinberger 08b134324f feat: continue web sessions in the terminal (#122870)
* feat: continue sessions in terminal

Add a credential-free Control UI continuation command and allow openclaw resume to reuse current-profile authentication only for byte-exact configured Gateway targets.

* fix(gateway): separate public origin TLS ownership

Allow exact public-origin resume targets to reuse local authentication without inheriting the direct local listener certificate fingerprint.

* fix(gateway): scope exact targets to gateway mode

Prevent remote profiles from reusing dormant local Gateway authentication for explicit loopback or public-origin targets.

* fix(cli): encode terminal resume handoffs

Replace shell-specific quoting with a strict credential-free base64url handoff, gate configured auth reuse to validated handoffs, and skip unused session discovery.

* fix(gateway): isolate handoff auth identity

Suppress ambient Gateway auth fallback for validated handoffs while preserving explicit credentials, configured SecretRefs, stored device auth, and exact-target TLS ownership.

* fix(cli): harden terminal resume handoffs

* fix(cli): parse terminal handoff outcomes

* fix(cli): bind handoffs to resolved agent

* test(ui): align terminal continuation proof

* docs(plan): track terminal continuation

* refactor(ui): keep terminal handoff result local
2026-08-12 17:07:48 -07:00
Peter Steinberger 52cda537a4 test(discord): move ready abort proof to lifecycle (#122869) 2026-08-12 16:54:20 -07:00
Peter Steinberger 7c7c7524ad feat: add paired-device worker provider foundation (#122769)
* feat(worker-provider): add core device lease foundation

* feat(gateway): dispatch sessions to paired devices

* test(gateway): cover node-ready lifecycle edge

* fix(gateway): defer device worker installation prep

* chore(plugin-sdk): refresh API baseline

* test(gateway): isolate worker turn state database

* docs(runners): refresh milestone table format

* test(gateway): track device dispatch temp state
2026-08-12 16:50:09 -07:00
Peter Steinberger 5c2e099374 fix(codex): restore promoted approval regression coverage (#122861)
* test(codex): align projector fixtures with verbose policy

* test(codex): supply admitted host context to hook relay fixtures
2026-08-12 16:30:30 -07:00
Peter Steinberger 8ffb97cdd2 test(ui): remove duplicate stale recovery case (#122860) 2026-08-12 16:26:36 -07:00
Peter Steinberger ae6f813e73 refactor(agents): split subagent announce delivery (#122853)
* refactor(agents): split subagent announce delivery

* fix(agents): defer announce runtime dependency reads
2026-08-12 16:23:34 -07:00
Peter Steinberger be600d0a24 fix: restore Telegram release isolation checks (#122843)
* fix(release): repair isolated Telegram QA runtime

sticky runner/SUT suite root permits config locks without config replacement; add PS1 after attested env verification for nested login shells.

* test(node-host): own desktop teardown resets
2026-08-12 16:21:45 -07:00
Josh Lehman bb5ef9872a fix: resume sessions interrupted by gateway restarts (#122644)
* fix: resume sessions interrupted by gateway restarts

* fix: make session recovery retry-safe

* refactor: isolate restart session recovery

* test: track recovery temp directories

* fix: inherit recovery state under lifecycle lock

* fix: surface rejected recovery continuation

* fix: fence recovery continuation authority

* chore: regenerate plugin sdk api baselines

* test(gateway): track sessions.recover release train
2026-08-12 16:18:58 -07:00
Peter Steinberger 01a5bcc5c0 test: avoid provider policy loading in media reply tests (#122857)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-12 16:07:23 -07:00
Peter Steinberger a8b05c66d7 test(macos): remove residual smoke probes (#122856) 2026-08-12 16:04:32 -07:00
Peter Steinberger 75332a2671 fix(tooling): fail deadcode report on scan errors (#122847) 2026-08-12 15:59:37 -07:00
Peter Steinberger adf8e254ab fix(ui): let read-only operators copy task results (#122841)
* fix(ui): let read-only operators copy task results

* refactor(ui): consolidate operator scope checks
2026-08-12 15:58:55 -07:00
Peter Steinberger 1ca60fbc3a refactor(agents): make multi-agent ownership explicit (H2-1 core) (#114388)
* refactor(agents): make roster ownership explicit

* feat(config): materialize legacy agent roles

* fix(cron): migrate legacy owners at startup

* feat(gateway): expose agent selection contracts

* fix(gateway): enforce agent-scoped authorization

* docs(config): document explicit agent ownership

* fix(config): pin retained owner workspace

* fix(gateway): target hook wakes at effective agent

* fix(sessions): preserve fixed-store ownership

* fix: preserve retained agent ownership

* fix: preserve legacy agent ownership across runtime surfaces

* fix: fail closed on ambiguous session ownership

* fix: preserve compatibility owners across dispatch and writes

* fix: preserve retained agent projections

* fix: preserve agent ownership compatibility

* fix: preserve per-agent heartbeat guidance

* fix: preserve compatibility owners in generic paths

* fix: enforce configured ownership in session paths

* fix: defer remote roster selection

* fix: preserve ownership across session and config writes

* fix: fail closed on ambiguous restored ownership

* fix: preserve explicit ACP and legacy ownership

* fix: honor durable fixed-store ownership

* fix: enforce fixed-store owner authority

* fix: preserve ownership evidence boundaries

* fix: honor resolved session ownership

* fix: align compatibility ownership paths

* fix: persist legacy main store ownership

* fix: close ownership fallback gaps

* fix(agents): close retained owner compatibility gaps

* fix(agents): enforce session owner resolution

* fix(agents): complete session owner resolution sweep

* fix(agents): preserve durable session ownership

* fix: complete persisted session owner routing

* fix: thread prepared session owners

* fix: preserve stable session ownership

* fix: enforce session ownership boundaries

* fix: close session ownership delta gaps

* fix: reconcile session ownership after rebase

* fix: reconcile ownership with current main

* fix: align session store path imports

* fix: align session store config path import

* fix: reconcile explicit ownership CI

* fix: reconcile ownership rebase checks

* fix: align ownership ci contracts

* fix: align ownership rebase checks

* fix: preserve compatibility owner during setup

* fix(doctor): migrate ownerless heartbeat monitors

* fix(gateway): preserve explicit session ownership

* test: align ownership fixtures after rebase

* test: complete plugin manifest fixture

* test: align runtime context mocks

* fix(gateway): preserve alias routing for existing sessions

* style: format agent routing update

* fix(gateway): preserve selected owner during alias routing

* style: normalize rebased ownership files

* fix(gateway): preserve owner through global alias routing

* fix(gateway): preserve explicit ownership at HTTP boundaries

* fix(gateway): validate compatibility model ownership

* fix(agents): reconcile strict session ownership

* fix(agents): contain media yield callback failures

* fix(agents): avoid eager bare-key owner resolution

* chore: refresh rebased ownership baselines

* chore: align hosted plugin SDK baseline

* chore: refresh ownership baselines after main sync

* chore: refresh ownership baselines after main sync

* test: align routed event owner fixtures

* chore: retrigger CI after runner startup failure

* chore: refresh ownership SDK budgets after main sync

* fix(tasks): require agent identity for bare owners

* chore: align Linux plugin SDK baseline

* chore: remove release-owned changelog entry
2026-08-12 15:55:16 -07:00
Peter Steinberger 9b9f2ab403 test(core): remove duplicate assertions (#122848) 2026-08-12 15:43:12 -07:00
Peter Steinberger ef0cb2ed95 test: avoid provider discovery in btw tests (#122835)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-12 15:38:45 -07:00
Peter Steinberger f8c0e1b832 ci: ignore OpenClaw metadata in dependency fingerprint (#122839)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-12 15:33:56 -07:00
Peter Steinberger d003e08756 refactor(plugin-sdk): remove final test-only facades (#122844) 2026-08-12 15:28:22 -07:00
Peter Steinberger 9ed96868eb refactor(worker): streamline live preview delivery (#122830)
* refactor(worker): streamline live preview delivery

* refactor(worker): internalize live response error type
2026-08-12 15:25:23 -07:00
Peter Steinberger 6b9bea84f0 feat(node-host): supervise durable worker launches (#122829)
* feat(node-host): add worker launch supervision

* fix(node-host): harden worker lifecycle ownership

* fix(node-host): harden worker execution boundary

* fix(node-host): preserve worker trust settings

* chore(plugin-sdk): refresh worker lifecycle baselines

* docs(plan): track runner implementation slices

* test(node-host): await runtime shutdown owner
2026-08-12 15:24:05 -07:00
Peter Steinberger 93f5e0f1f6 fix(build): restore exact cache output snapshots (#122837) 2026-08-12 15:20:11 -07:00
Peter Steinberger 87b503675a fix(ui): recover failed bundled plugin views (#122823)
* fix(ui): recover failed bundled plugin views

* fix(ui): guard automatic plugin chunk reloads
2026-08-12 15:10:21 -07:00
Peter Steinberger 5bcbbcf6fd test(gateway): move OpenAI usage fallback coverage (#122825) 2026-08-12 15:03:18 -07:00
Peter Steinberger 307021eca4 refactor(agents): split subagent-registry-run-manager.ts into owner modules (#122826) 2026-08-12 14:54:10 -07:00
Kimi Yu f9316c4697 fix(slack): stop repeated outage notices in active threads (#122782) 2026-08-12 14:41:41 -07:00
Peter Steinberger 431b8ec4a4 fix(cron): stop retrying permanent delivery rejection (#122821) 2026-08-12 14:32:11 -07:00
Peter Steinberger c58dbaff22 fix(slack): session card stuck on Working after concurrent mentions (#122816)
* fix(slack): terminalize a progress card detached by a concurrent mention

Rapid mentions in one Slack conversation fire the draft-message boundary
notifier, which calls forceNewMessage and clears the draft stream's message
identity so later output lands below the human message. The already-posted
Working card survives in Slack but becomes unreachable: finalize(), clear(),
and the drop-on-failed-finalize fallback all key on the stream's current
identity, so the card stays at Working forever.

Retain messages the draft stream abandons while un-finalized, expose
dropDetachedMessages(), and drain it from the card's finalize path so final
delivery, error closeout, and turn rotation all terminalize. Also implement
onQueuedFollowupSettled so a queued turn draining after its dispatch already
returned cannot leave a card in Working state. Both cleanups are gated on the
session-card mode: partial/append previews hold streamed assistant text the
human already replied to and must stay visible.

* fix(slack): drain detached cards appended during an in-flight delete

The detached-card drain snapshotted its queue, so a human message routed
synchronously through the conversation boundary during an awaited delete
appended a card the same drain would never remove. The silent-turn closeout
also dropped before its clear(), leaving that window unowned.

Drain until the queue is stable and make the drain the last act on the silent
exit path, so a card detached mid-cleanup still reaches removal.
2026-08-12 14:31:46 -07:00
Peter Steinberger 25121bdb45 perf(ci): tail-balance compact large shards (#122818)
Amp-Thread-ID: https://ampcode.com/threads/T-019ff3db-c467-70ad-8ed3-81f2ba94b0c0

Co-authored-by: Amp <amp@ampcode.com>
2026-08-12 14:25:14 -07:00
Peter Steinberger b6548e509a refactor(state): retire commitments schema (#122176)
* refactor(state): retire commitments schema

* fix(state): complete commitments retirement safeguards

* test(state): expect doctor retirement report

* test(state): prove doctor v7 markers atomically

* fix(state): align schema support metadata

* fix(state): report actual commitments retirement

* fix(state): validate retired commitments schema

* fix(state): preserve early commitments upgrades

* fix(state): require exact commitments index set

* fix(state): reject non-exact retired schemas

* fix(state): recognize supported retirement layouts

* fix(state): expose commitments retirement to doctor

* fix(voice-call): describe commitments retirement

* test(state): align v7 rebase proof

* fix(state): protect commitments retirement dependencies

* fix(state): accept partial commitments layouts

* chore(docs): refresh v7 api baselines
2026-08-12 14:21:34 -07:00
Peter Steinberger 2335332a5b refactor(ai): remove Azure provider testing export (#122819) 2026-08-12 14:16:26 -07:00
Peter Steinberger 27c6b97d6a test: parallelize web fetch CLI checks (#122811)
Co-authored-by: Amp <amp@ampcode.com>
2026-08-12 14:11:49 -07:00
Peter Steinberger 5fda9d09f0 feat(deploy): add experimental Cloudflare deployment template (#122768)
* feat(deploy): add experimental Cloudflare template

* fix(deploy): keep container SSH debug access opt-in

* fix(deploy): satisfy scripts tsgo lane and model wrangler entrypoint in knip

* fix(deploy): model wrangler-consumed exports and isolated dependency in knip

The Worker default export and Durable Object class are instantiated by
wrangler from wrangler.jsonc, and @cloudflare/containers lives in the
template's isolated package.json — modeled per the deadcode checks' own
guidance rather than root-manifest changes.

* docs(deploy): align SSH bootstrap flow with the disabled-by-default policy
2026-08-12 14:07:48 -07:00
sunlit-deng 120a75da51 fix(slack): surface unavailable forwarded images (#122108)
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-12 16:07:18 -05:00
Peter Steinberger 79380000e0 refactor(plugin-sdk): remove test-only facades (#122807) 2026-08-12 13:57:07 -07:00
Peter Steinberger 468dc55a39 fix(matrix): silence empty inbound dedupe migration receipt on fresh installs (#122808)
On a pristine profile, onboarding/doctor printed "Auto-migrated legacy
state: Recorded Matrix inbound dedupe migration completion (0 SQLite
roots, 0 JSON roots scanned)" even though nothing was migrated. Keep
the durable empty-scan receipt (it still prevents later historical
databases from being opened) but only emit the user-visible change line
when at least one SQLite/JSON root was scanned.
2026-08-12 13:56:04 -07:00
Peter Steinberger 391b8ae0a5 test(markdown): remove native profile self-checks (#122803) 2026-08-12 13:53:28 -07:00
Peter Steinberger be124de8fb test: slim gateway session creation coverage (#122789)
* test: slim gateway session creation coverage

* test: move incognito initialization to its owner

---------

Co-authored-by: Amp <amp@ampcode.com>
2026-08-12 13:43:47 -07:00
Peter Steinberger 99a9827077 fix(cron): retain deleted job history by agent (#122791) 2026-08-12 13:32:15 -07:00
Peter Steinberger 7595d6f432 test(tooling): remove helper replays (#122790)
* test(tooling): remove helper replays

* refactor(tooling): inline fixture json serialization
2026-08-12 13:31:23 -07:00
Kimi Yu e1b8150a06 fix(codex): let owners install plugins from discovered marketplaces (#122389)
* fix(codex): allow owner-approved marketplace plugins

* fix(codex): preserve marketplace validation and remove unused exports

* docs(codex): clarify already-installed plugin authorization
2026-08-12 20:29:40 +00:00
Josh Lehman 88d6b571b0 fix(ui): keep tool failure state on individual calls (#122681) 2026-08-12 13:20:58 -07:00