Commit Graph

78555 Commits

Author SHA1 Message Date
Peter Steinberger 27be810311 fix(sessions): resolve legacy surfaces from selected plugins (#121082)
* fix(sessions): resolve legacy surfaces from selected plugins

* fix(sessions): keep sidecar collection internal

* fix(sessions): isolate legacy sidecar loading

* style(sessions): format legacy surface imports

* fix(sessions): preserve all enabled legacy owners

* test(sessions): assert prepared surface propagation

* test(sessions): safely inspect prepared surfaces
2026-08-09 12:28:12 -07:00
Peter Steinberger d3c84674e8 feat(gateway): task-suggestion acceptance modes with compact split-button card (#121173)
* feat(gateway): task-suggestion acceptance modes with compact split-button card

- taskSuggestions.accept gains additive mode (worktree default | local | cloud | session) + cloudProfileId; operator.admin unchanged; worktree requests stay {taskId}-only for older gateways
- local reuses the plain-cwd create; cloud mirrors the Control UI create-empty -> sessions.dispatch -> send sequence with pre-claim profile validation and full rollback; session delivers the prompt into the source session (steer single active run, plain turn when idle, ambiguous refused) and can only cancel the chip on failure, never touch the source session
- Control UI card redesigned per owner reference: repo-basename eyebrow, clamped summary, instructions expander, split button with per-profile cloud items or a disabled "No cloud environment configured" hint
- TUI gains the same modes as selector rows with capability gating and double-Enter arming

Release-note context: operators now choose where an accepted follow-up runs — isolated worktree (default), the project checkout, a configured cloud worker, or as the next instruction in the current session — from a compact suggestion card.

* fix(gateway): negotiate task-suggestion acceptance modes and enforce steerable-run invariant

- Gate non-worktree task-suggestion actions on the negotiated Gateway capability.
- Require exactly one steerable run ID before delivering into an active source session.
2026-08-09 12:21:21 -07:00
Vincent Koc 141304a02e test(gateway): verify receiver group before reset (#121206)
Punchcard-Session: amber-workshop-workshop-36
2026-08-10 03:16:51 +08:00
Sarah Fortune 96798953b2 fix: enable Slack native approvals for Enterprise Grid installs (#120874)
* fix(slack): scope Grid native approvals by team

* fix(slack): type action middleware context

* fix(slack): secure Grid native approvals

Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>

---------

Co-authored-by: Sarah Fortune <sarah.fortune@gmail.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-09 12:09:59 -07:00
Vincent Koc 05dc2f8ee1 fix(qa): scope Slack capture evidence by channel (#121053)
Punchcard-Session: amber-workshop-workshop-36

Co-authored-by: Dallin Romney <6581799+RomneyDa@users.noreply.github.com>
2026-08-10 03:09:39 +08:00
Vincent Koc 126b5a08e7 fix(qa): resolve live model pairs after auth selection (#121065)
Centralize QA model-pair construction after resolving the actual primary,
preserve explicit and manual single-model selections, and keep omitted
live-frontier alternates on the provider-owned OpenAI Sol/Luna policy.

Punchcard-Session: amber-workshop-workshop-36

Co-authored-by: Dallin Romney <6581799+RomneyDa@users.noreply.github.com>
2026-08-10 02:59:12 +08:00
Peter Steinberger 26e74d8d18 feat(memory): expand conversational recall queries (#121196)
Supplement thin strict FTS candidate pools with bounded keyword probes while keeping embedding calls unchanged.
2026-08-09 11:55:57 -07:00
Peter Steinberger 05cd389cac fix(cloud-workers): make Crabbox provisioning idempotent (#121019)
* fix(cloud-workers): make Crabbox provisioning idempotent

* fix(crabbox): preserve desktop fixed-id warmups
2026-08-09 11:51:34 -07:00
Peter Steinberger cdc5dd24b9 refactor(gateway): narrow agent turn response sink (#121189)
* refactor(gateway): narrow agent turn response sink

* fix(gateway): keep turn frame aliases internal
2026-08-09 11:48:46 -07:00
Peter Steinberger 40dbc7a65a test(plugin-sdk): remove repo-local test helper fossils (#121190) 2026-08-09 11:44:18 -07:00
Peter Steinberger 65dc1d0220 fix(telegram): validate command menu language codes (#121098)
* fix(telegram): validate command menu language codes

* fix(telegram): enforce exhaustive menu languages

* fix(telegram): harden command menu locale state
2026-08-09 11:43:48 -07:00
Peter Steinberger e86512f93b fix(cron): honor permanent provider classifications (#114113) 2026-08-09 11:40:24 -07:00
Peter Steinberger f68f68bc43 refactor(agents): unify prepared reply dispatch publication (#121089)
* refactor(agents): unify prepared reply dispatch publication

* fix(agents): scope prepared reply runtime at dispatch

* fix(agents): keep reply context runner private

* test(agents): read prepared config from dispatch scope
2026-08-09 11:40:07 -07:00
Vincent Koc de13b4b1b8 fix(ui): preserve new-session drafts during route loading (#121182)
Punchcard-Session: amber-workshop-workshop-36
2026-08-10 02:29:08 +08:00
Peter Steinberger af4ffb2e8e fix: exact dated models work after gateway ready (#121119)
* fix(agents): publish exact configured model facts

* fix(agents): keep prepared model completion internal

* fix(agents): scope prepared model plugin lookup

* refactor(agents): split prepared model configured facts

* fix(agents): keep configured catalog types acyclic
2026-08-09 11:23:32 -07:00
Peter Steinberger dd5b4d0d30 test(macos): remove assertion-free coverage exercisers (#121139) 2026-08-09 11:17:57 -07:00
Peter Steinberger 1f4740e95f fix(opencode): migrate retired free model refs (#121125)
* fix(opencode): migrate retired free model refs

Repair the shipped beta upgrade path through the provider-owned Doctor contract. Activate the migration from the canonical configured-model selector inventory so every supported selector is covered consistently.

Co-authored-by: samson1357924 <samson1357924@gmail.com>

* fix(opencode): migrate media model preferences

---------

Co-authored-by: samson1357924 <samson1357924@gmail.com>
2026-08-09 11:16:59 -07:00
Peter Steinberger 9809375fda refactor(plugins)!: remove the plugin state lease API (#121140)
* refactor(plugins)!: remove plugin state lease API

* docs(plugins): document state lease removal
2026-08-09 11:16:07 -07:00
Peter Steinberger a828bfe04e fix(release): bootstrap typed Docker planner (#121088)
* fix(release): bootstrap typed Docker planner

* test(release): handle optional workflow steps

* fix(release): isolate trusted planner dependencies

Punchcard-Session: amber-workshop-workshop-36

* test(release): update trusted harness contract

Punchcard-Session: amber-workshop-workshop-36

* fix(release): bootstrap every trusted Docker planner

Punchcard-Session: amber-workshop-workshop-36

* fix(release): centralize trusted harness bootstrap

---------

Co-authored-by: Vincent Koc <vincentkoc@ieee.org>
2026-08-09 11:14:23 -07:00
Peter Steinberger b0a1a2ab5c feat(ui): start CLI agent sessions in the terminal from the new-session page (#121126)
* feat(ui): start CLI agent sessions in the terminal from the new-session page

* test(ui): select labs rows by feature id
2026-08-09 11:08:42 -07:00
Peter Steinberger ec78d36506 refactor(gateway): carve agent turn types (#121160) 2026-08-09 10:55:15 -07:00
Peter Steinberger b0b82291ca fix(ui): show concrete new-session defaults (#121133) 2026-08-09 10:47:29 -07:00
Peter Steinberger 72283e440e fix: steering misses the next tool boundary after ACK (#120964)
* fix(steering): wait for queue acceptance before ack

* fix(steering): preserve session steer call contract

* fix(steering): close runtime ownership gaps

* fix(ci): refresh plugin SDK API baseline
2026-08-09 10:46:09 -07:00
Peter Steinberger 34b8a6515d test(gateway): boot a minimal test gateway in the gateway lane (#121134)
* test(gateway): boot a minimal test gateway in the gateway lane

A gateway startup stall (#120926, awaited chat-metadata refresh in minimal
mode) shipped with green CI and first surfaced by hanging every checks-ui-e2e
suite that boots a minimal test gateway: no gateway-lane test booted one with
bundled plugins enabled (gateway.test.ts disables them, which masked the
stall), and the changed-scope classifier only selects the ui-e2e lane for
ui-touching diffs.

Add a minimal-gateway boot smoke in src/gateway that mirrors the ui-e2e boot
environment (bundled plugins enabled, minimal skips, strict time budget).
Selection is automatic: the smoke imports the gateway server, so the changed
node test plan picks it up through the import graph for any diff that can
affect startup, and full-suite plans run it in the
agentic-control-plane-startup-core shard. Reintroducing the #120926 hunk makes
the smoke fail (watchdog kill) in the gateway lane; healthy code boots in ~10s.

A planner regression test keeps the smoke classified as a gateway-server test
file and import-graph-reachable from gateway startup sources, so a rename or
graph-invisible import shape cannot silently drop the coverage again.

* test(ui): resolve labs rows by registry id, not positional index

Unblocks landing onto red main: 8fdf7570a1 (#120727) added the Cloud Worker
Desktop labs entry with a hardcoded row index that collides with Message audit
metadata, so enabling it toggled the neighboring row and the full-suite lane
failed deterministically (labs-page.test.ts, exposed only on PRs that run the
compact full suite). Derive each table case's row index from LAB_FEATURES by
feature id — the idiom the rest of the suite already uses — so a new labs
entry can no longer silently retarget an existing case.
2026-08-09 10:32:35 -07:00
Peter Steinberger ad1a2cd7e7 perf(gateway): per-transcript broadcast lanes (#121104)
* perf(gateway): per-transcript broadcast lanes

Transcript-update broadcasts were serialized behind one global promise queue,
so one session's pending async seq read head-of-line blocked every other
session's session.message and sessions.changed delivery. Ordering is a
per-transcript contract, so key the queue by transcript identity and drop
drained lanes.

Per-message transcript usage stays derived: session.message payloads carry
live totalTokens/estimatedCostUsd as a dashboard API contract (#50101).

* fix(ui): target the Cloud Worker Desktop labs row in its toggle test

The row added in #120727 reused index 6, which belongs to Message audit
metadata, so the case toggled the audit row and asserted its patch. Labs
features render in registry order, and workerDesktop is the eighth entry.
2026-08-09 10:17:30 -07:00
Vincent Koc af73dbcc83 fix(release): prefer SQLite upgrade survivor state (#120983) 2026-08-10 01:08:15 +08:00
Peter Steinberger 92e522cade fix(openai): bound streamed tool arguments (#117055) 2026-08-09 10:02:23 -07:00
Peter Steinberger 4af090365c fix(openai): preserve failed Responses terminal usage (#115175)
* fix(openai): preserve failed Responses usage

* test(ci): include failed SSE prefix sibling
2026-08-09 09:59:21 -07:00
Vincent Koc 106cdd18a9 fix(ci): shard release merge-tree lint (#120421)
* fix(ci): shard release merge-tree lint

Punchcard-Session: amber-workshop-workshop-36

* fix(ci): resolve branch-creation push base

Punchcard-Session: amber-workshop-workshop-36

* fix(ci): follow Oxlint shard runner rename

Punchcard-Session: amber-workshop-workshop-36
2026-08-10 00:48:44 +08:00
Peter Steinberger 5ec12b1330 fix(ui): clear sidebar hover controls after pointer leaves (#121118)
* fix(ui): clear sidebar hover controls after pointer leaves

* test(ui): avoid shadowing catalog toggle
2026-08-09 09:46:30 -07:00
Peter Steinberger 5b6c19d947 test: remove stale MiniMax core mirrors (#121120) 2026-08-09 09:41:18 -07:00
Peter Steinberger c216223740 refactor(tests): consolidate CLI command fixtures (#114427) 2026-08-09 09:40:46 -07:00
Peter Steinberger 01cf584d2a fix(telegram): preserve DM topic authorization (#121117)
Carry canonical direct_messages_topic identity through authorization and config selection so channel DM topics use the same scope as delivery. Keep that identity distinct from message_thread_id.
2026-08-09 09:39:47 -07:00
Peter Steinberger 8fdf7570a1 feat(gateway): live Desktop observer for cloud workers (Labs) (#120727)
* feat(gateway): live desktop observer for cloud workers

Adds live observation for cloud worker desktops through the gateway and Crabbox plugin, including desktop provisioning, persisted desktop metadata, tunneled WebSocket proxying, and the worker.desktop.observe protocol method.

The gateway, Crabbox plugin, and gateway protocol surfaces remain off by default behind the cloudWorkers.desktop Labs flag.

* feat(ui): Desktop panel for cloud worker observation

* docs(gateway): document cloud worker desktop lab

* fix(ci): regenerate contract baselines after rebase

* fix(protocol): regenerate Android gateway methods

* fix(ci): align rebased SDK and lint baselines

* fix(gateway): enforce view-only RFB boundary and fence desktop teardown

* fix(gateway): tighten RFB filter surface

* fix(state): keep pre-desktop databases readable and harden view-only RFB

* fix(gateway): fence desktop observer upgrades behind work admission

* fix(gateway): bind desktop observer tokens to their owner epoch

* fix(ci): regenerate config and SDK baselines after rebase

* fix(ci): regenerate native protocol and SDK baselines

* fix(ci): regenerate contracts after main rebase

* fix(state): register desktop metadata as lazy additive

* fix(ci): regenerate SDK baseline after final direct-merge rebase
2026-08-09 09:37:01 -07:00
Peter Steinberger 2f8c950701 fix(browser): recover Copilot storage writes (#116882) 2026-08-09 09:34:58 -07:00
Peter Steinberger 08c3c776f9 fix(update): keep managed gateway updates in the correct profile (#113901)
* fix(update): keep managed gateway state in its profile

* refactor(update): scope managed profile finalization

* chore(update): remove stale env import

* test(update): narrow completion call lookup
2026-08-09 09:32:57 -07:00
Peter Steinberger f8057eecce refactor(tests): consolidate inbound reply fixtures (#114430) 2026-08-09 09:30:16 -07:00
Peter Steinberger df725434f3 fix(gateway): redact audio history payloads (#121109)
Strip raw audio data and host-local references at the shared chat display projection used by WebSocket and HTTP/SSE history, while preserving remote and managed media references.
2026-08-09 09:26:51 -07:00
Ayaan Zaidi be6f4c3d6a fix(telegram): make expired Codex automation alerts actionable (#121067)
* fix(cron): make Codex auth alerts actionable
* fix(telegram): authorize Codex login callbacks centrally
* fix(telegram): make callback outcomes explicit
* fix(telegram): use typed callback result
* test(cron): assert typed delivery payloads
* test(cron): require captured reply payload
* test(cron): require captured reply text
* fix(telegram): authorize login callbacks as commands
* chore(plugin-sdk): refresh API baseline

---------

Co-authored-by: Ayaan Zaidi <hi@obviy.us>
2026-08-09 21:52:23 +05:30
Peter Steinberger 9bbbeb0489 fix(openai): preserve Chat response hook lifecycle (#117056) 2026-08-09 09:18:16 -07:00
Peter Steinberger a39c24463e docs: add OpenClaw test-audit skill (#121110) 2026-08-09 09:07:23 -07:00
Peter Steinberger 46c712fd7e fix(gateway): align prepared model auth readiness (#121090) 2026-08-09 09:05:38 -07:00
Peter Steinberger efb02a0671 fix(cron): prevent jobs disappearing during paginated refreshes (#121084)
* fix(cron): keep paged consumers on one snapshot

* test(cron): type malformed UI fixture

* test(cron): update canonical list fixtures
2026-08-09 09:05:30 -07:00
Peter Steinberger b4104e29b5 fix(sessions): stop active runs before archiving (#120892)
* fix(sessions): stop active runs before archiving

Archive now fences the exact session, stops and drains active work before commit, preserves main/global-main/unknown protections and Delete behavior, and keeps patchMany per-target ordering.

* test(gateway): provide archive lifecycle context

* test(ui): expect active sessions to remain archivable

* refactor(gateway): keep archive drains internal

* fix(gateway): keep abort lifecycle contract acyclic

* fix(sessions): fence sharing across archive drains

* test(gateway): type archive lifecycle responses

* fix(sessions): reclaim cloud workers before archive

* fix(sessions): align archive request integration

* test(gateway): omit default deferred type

* docs(sessions): clarify cloud archive retries
2026-08-09 09:03:20 -07:00
Peter Steinberger 8ed072ee16 fix: bound GPT-Live buffers and preserve workspace lock ownership (#120911)
* perf(openai): bound realtime audio buffering without repeated copies

* fix(openai): publish media timer before first tick

* fix(gateway): preserve workspace receiver lock ownership

* perf(openai): transfer pending audio ownership

* test(gateway): remove duplicate receiver wait
2026-08-09 09:01:54 -07:00
Peter Steinberger 4b85d834ed fix(ci): sparse-checkout the renamed local-heavy-check-runtime.mts on the frozen shard lane (#121097) 2026-08-09 08:59:30 -07:00
Peter Steinberger 3b37d15ed4 fix(maintainers): prevent false PR closeout failures (#121101) 2026-08-09 08:58:54 -07:00
Peter Steinberger 92bacda206 refactor(telegram): reuse outbound topic preparation (#121095)
Follows #120916 by removing duplicate outbound preparation and transport harness code while preserving channel Direct Messages, forum, and bot-private routing.
2026-08-09 08:57:37 -07:00
Peter Steinberger eec454489a test(sandbox): preserve exclusive-create collision outcomes (#117026) 2026-08-09 08:53:36 -07:00
Peter Steinberger 75a454469d fix(browser): coalesce volatile tab cleanup (#114507) 2026-08-09 08:50:33 -07:00