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
Peter Steinberger
0c824f09d5
feat(gateway): observe paired node desktops ( #122724 )
...
* feat(gateway): stream paired node desktops
* chore(protocol): refresh desktop observe model
* fix(gateway): preserve desktop stream boundaries
* fix(gateway): keep desktop streams lifetime-bound
* fix(gateway): harden node desktop stream lifecycle
* fix(gateway): stabilize node desktop lifecycle setup
* chore(plugin-sdk): refresh API baselines
2026-08-12 13:17:45 -07:00
Josh Lehman
c631b1a45e
fix: archived chat composer returns after session navigation ( #122641 )
...
* fix(ui): preserve archive state across stale refreshes
* fix(ui): retain archive state across navigation
* fix(ui): ignore stale archive events
* fix(ui): scope archive state to session identity
* fix(ui): require session identity for presentation metadata
* fix(ui): require exact archive identity
2026-08-12 13:10:30 -07:00
Peter Steinberger
8c957b9c85
refactor(ui): remove session parser wrapper ( #122788 )
2026-08-12 13:07:29 -07:00
Peter Steinberger
9013ab80a8
fix(whatsapp): keep distinct-id repeated messages ( #122785 )
2026-08-12 13:07:22 -07:00
Peter Steinberger
3edc9c2be5
perf(ci): route compact queue tails to 8-vCPU runners ( #122666 )
...
Amp-Thread-ID: https://ampcode.com/threads/T-019ff3db-c467-70ad-8ed3-81f2ba94b0c0
Co-authored-by: Amp <amp@ampcode.com >
2026-08-12 12:57:29 -07:00
Peter Steinberger
b4ffa3106f
refactor(extensions): remove orphan test exports ( #122784 )
2026-08-12 12:45:33 -07:00
Peter Steinberger
dceb2c343c
refactor: retire due compat-ledger surfaces (context-engine host params, deactivate alias, logging internals) ( #121845 )
...
* refactor(plugins): retire deactivate hook alias
* refactor(plugin-sdk): prune retired facade exports
* test(logging): isolate logger test controls
* refactor(logging): internalize file transport controls
* test(plugin-sdk): preserve retired facade coverage
* test(auto-reply): remove stale diagnostic imports
* refactor(logging): delete dead config-read guard
shouldSkipMutatingLoggingConfigRead had no production caller even on main;
it survived the dead-export scan only via logger's testApi re-export. The
test-isolation commit removed that mask, exposing the fossil. Delete the
guard, its test-only re-export, its mock entry, and its dedicated test file.
* refactor(plugin-sdk): retire due compatibility subpaths
* test(plugin-sdk): type group policy predicates
* refactor(plugin-sdk): split removed subpath records
* refactor(secrets): remove retired collector barrel
* test(plugin-sdk): tighten wildcard surface pin
* refactor(plugin-sdk): retire matrix facade metadata
* style(plugin-sdk): format facade metadata
* fix(ci): load channel setup contracts from source
Repair the main-owned regression from 99d662473c (Peter Steinberger): the new env-contract test could consume stale ignored dist metadata instead of the checked-in plugin declaration.
* test(plugin-sdk): refresh API baseline after rebase
2026-08-12 12:41:27 -07:00
Peter Steinberger
49092ebab3
fix(tlon): report unavailable inbound images ( #122783 )
2026-08-12 12:40:03 -07:00