Commit Graph

5267 Commits

Author SHA1 Message Date
Peter Steinberger 94eb34fa78 fix(skills): require re-review when proposals change (#126156)
* fix(skills): bind workshop decisions to reviewed revisions

* chore(i18n): refresh native source inventory

* test(skills): align revision proof with inspect projection

* test: align skill workshop regression fixtures

* fix(ui): align workshop revision admission proof

* fix(ui): keep revision errors out of startup
2026-08-19 01:52:11 -07:00
Peter Steinberger 67750753a2 fix: capture GitHub identity from authenticated sign-in (#126114)
* fix: capture GitHub identity from authenticated sign-in

Automatically persist verified GitHub identities from Cloudflare Access and Tailscale Serve while keeping public Git co-author credit as a separate opt-in.

* test: stabilize cleanup and activity capture

* fix(security): bind GitHub profiles by account id

* test: scope activity capture to route

* fix(security): gate profile requests on identity sync

* fix(security): close pending profile authorization gaps

* test(ui): stabilize terminal continuation menu

* test: stabilize startup recovery timing

* test: keep one Codex attempt tools owner

* fix(plugins): allow profile-independent gateway reads
2026-08-19 01:35:52 -07:00
Peter Steinberger 80934e5639 feat(ui): dispatch sessions to paired devices (#126187) 2026-08-19 01:11:49 -07:00
Peter Steinberger ca0935ae58 fix(ui): preserve active run ownership across steering (#126230) 2026-08-19 01:03:14 -07:00
Peter Steinberger 9b43f1c82e improve(ui): fix sidebar session row hierarchy and add a message-preview toggle
Pinned sessions inherited the nav zone's muted colour on the session *title*, so a
pinned row's preview line outshone its own name and the same session read dimmer
pinned than unpinned. A title is content in every zone; only glyphs, meta and the
hover fill follow the zone. The subtitle drops to plain --muted, already proven AA
against every surface by theme-contrast.test.ts.

Rows with no preview text reserved a fixed 18px second line anyway, leaving a dead
band or a lone spinner hanging below-right of the title. They now collapse to one
line via a --single-line class plus a CSS variant, so the endcap rides beside the
title. Rows also gained a little vertical air and reclaimed the right-hand gutter
inside the row, leaving the deliberate scrollbar clearance from #124879 intact.

Adds a localStorage-backed "Show message preview" toggle to the session sort menu
(default on). Operator-actionable state is exempt: attention, the queued
concurrency-slot explanation, and critical observer headlines (stuck /
waiting-on-user) always show, because hiding them behind a display preference is
the silent-failure class.

Also registers extensions/codex/src/app-server/run-attempt-tools.test.ts, which
arrived in #126189 with no shard claim and left main red.
2026-08-19 00:08:07 -07:00
Peter Steinberger 57a65def4f fix(ui): restore sidebar session hovercards (#126222)
* fix(ui): restore sidebar session hovercards

* test(codex): include run-attempt tools in full suite
2026-08-19 00:07:05 -07:00
Peter Steinberger 7f60af7f8b fix(ui): tear down hidden Desktop presenters (#126203)
Scope embedded Desktop refresh and connection ownership to the active presented sidebar slot. Hidden retained panels now invalidate pending work and disconnect RFB, while reactivation returns to a freshly loaded picker without silently reconnecting.
2026-08-18 23:20:44 -07:00
Peter Steinberger 0d14434d0e feat(secrets): add explicit protected and agent-readable access (#126088)
* feat(secrets): add explicit agent access modes

Distinguish protected write-only secrets from agent-readable Gateway environment values, expose policy-bound Gateway exec aliases to Codex, and activate Node environment proxy support for destination-bound egress.\n\nCloses #125975

* fix(gateway): bind lifecycle dispatch to owning instance

* test(ui): preserve mock gateway recovery state

* fix(codex): avoid unavailable gateway process guidance

* fix(harness): keep run correlation host-owned

* fix(gateway): bind restart delivery to instance

* test(codex): construct tools through test host capability
2026-08-18 22:51:15 -07:00
Peter Steinberger 49231ff781 fix(ui): load workspace icons after dashboard bootstrap (#126200)
Paired Control UI device credentials now share the canonical same-origin read authorizer, while session-derived routes retain read+owner policy. Fresh dashboard handoffs and reloads can therefore render workspace, channel, and plugin icons without exposing or persisting the shared Gateway secret.

Remove the old shared-secret-first UI workaround.
2026-08-18 22:50:55 -07:00
Peter Steinberger 5a0a96f327 fix(ui): keep workshop revisions retryable until admitted (#126166)
* fix(ui): preserve workshop revisions until admission

Skill Workshop revision instructions now remain retryable until the Gateway admits the request, including navigation and overlapping admission failures.

* fix(ui): materialize workshop revision binding

Manifest-only Skill Workshop proposals now resolve their revision hash inside the durable admission owner, and retries reuse the same binding and idempotency key.

* chore(ui): keep revision types internal
2026-08-18 22:25:57 -07:00
Peter Steinberger e38a06439e refactor: trim locale and QA fixture debt (#126139)
* refactor: trim locale and QA fixture debt

* fix(qa): preserve shared flow portability

* chore(qa): document shared flow branch

* fix(docs): align plugin SDK subpath catalog

* fix(ci): align shared docs and flow contracts
2026-08-18 22:17:19 -07:00
Peter Steinberger 41ed3c3460 fix(ui): buttons use the default cursor instead of the link hand (#126153)
* fix(ui): reserve pointer cursors for links

* test: align cursor and docs contracts
2026-08-18 21:40:52 -07:00
Peter Steinberger a89c568068 fix(ui): center dashboard widget controls on hover (#126076)
* fix(ui): center dashboard widget hover controls

* fix(ui): gate resize handle with centered hover

* fix(ui): preserve iframe clicks with centered controls

* fix(ui): preserve corner actions when centering controls

* fix(ui): compact centered controls at intermediate widths

* test(plugins): align SDK subpath docs contract wording
2026-08-18 21:32:37 -07:00
ClawSweeper 7e69b1d5ab fix(ui): make Guardian review activity subtle (#125395)
* fix(ui): make guardian reviews subtle

* fix(ui): correlate Guardian warning cleanup

* fix(ui): retain ambiguous Guardian warnings

* fix(codex): preserve Guardian review state

Keep command-owned review state durable across reconnect and persisted history, with conservative bounded outcomes and producer-owned routine warning correlation. Verify native user-home app-server auth instead of injecting stored profiles.

* refactor(ui): split workspace conflict rendering

---------

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Peter Steinberger <steipete@gmail.com>
2026-08-18 20:28:23 -07:00
Peter Steinberger 57e5ab7a87 fix(apps): show native gateway and notification failures (#125909)
* fix(apps): surface native action failures

Make iOS gateway reconnect attempts return visible closed outcomes, route macOS gateway deep links through primary setup confirmation, and expose pending/sent/error notification test results across native and Dashboard settings.

* chore(apps): refresh native i18n inventory

* test(macos): isolate gateway cancel state

* fix(ui): accept permission-only notification status

* test(gateway): drain accepted agent run before fixture reset

* fix(ui): notify clients after service worker claim

* test(gateway): wait for accepted root work to drain

* test(ui): isolate widget theme observer window

* test(ui): await durable attachment draft before teardown

* test(agents): use race-safe MCP process cleanup

* test(ui): await cloud startup runtime before error probe

* test(ui): align startup and teardown probes with current owners
2026-08-18 20:15:52 -07:00
Peter Steinberger 7097ccc7bd perf(test): gate Skill Workshop proof capture (#126051) 2026-08-18 20:13:50 -07:00
ClawSweeper bf420e92c6 fix(ui): keep mobile session actions reachable (#126124)
* fix(ui): keep mobile session actions reachable

Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com>

* test(ui): use placement startup capability

Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com>

---------

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Takhoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-18 19:46:34 -07:00
Vyctor H. Brzezowski 2a469c1cb2 fix(ui): dismiss completed progress cards (#126102)
* test(ui): cover completed progress card dismissal

* test(ui): capture both completed card themes

* fix(ui): dismiss completed progress cards

* style: format progress card dismissal

* test(ui): assert visible dismissal lifecycle

* test(ui): wait for reloaded composer proof

* refactor(ui): reuse progress card action styles

* chore(protocol): refresh Swift progress card params

* style(ui): format progress card test

* fix(ui): hide progress dismissal from viewers

* test(ui): use Vitest viewer assertion
2026-08-18 23:39:31 -03:00
Peter Steinberger 64776a0489 fix(sessions): preserve committed results across reconnects (#125904)
* fix(sessions): preserve committed operation results

Report post-commit create failures through the existing runError response and retain confirmed same-client Control UI mutations across reconnects while fencing replacement clients.

* test(ui): await new-session ownership state

* test(ui): clarify draft teardown durability

* fix(ui): preserve reconnect refresh failures

* test(ui): poll absent text targets safely

* test(sms): await ingress spool ownership

* test(ui): await cloud startup failure state

* test(ui): await canonical place selection

* test(ui): scope activity feed to route owner

* test(ui): stabilize route-owned activity states
2026-08-18 19:13:58 -07:00
Peter Steinberger 15fb00eb6b fix: surface paired-device runtime requirements (#126067)
* fix: surface paired-device runtime requirements

* test: cover session runtime placement metadata

* test(gateway): stabilize runtime catalog fixtures

* fix(gateway): reject incompatible device moves
2026-08-18 19:10:41 -07:00
Peter Steinberger d1f327a4e4 fix(ui): refresh Browser when sidebar tab activates (#126058) 2026-08-18 19:05:20 -07:00
Peter Steinberger a8bc60a119 refactor(ui): generalize session placement startup (#126118) 2026-08-18 18:59:50 -07:00
ClawSweeper 22665ae71f fix(ui): fill expanded mobile side panel (#126111)
Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Tak Hoffman <781889+Takhoffman@users.noreply.github.com>
2026-08-18 18:55:09 -07:00
Peter Steinberger 948a444d63 fix(ui): require exact active run ownership (#126116) 2026-08-18 18:54:58 -07:00
ClawSweeper 05817086cc fix(ui): keep memory header stable across tabs (#125568)
* fix(ui): keep memory hub header stable across tabs

* test(ui): tolerate subpixel layout rounding

* fix(ui): keep memory header padding stable

* test(ui): scope memory layout assertion

* test(ui): satisfy promise executor lint

---------

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
Co-authored-by: Colin Johnson <colin@solvely.net>
2026-08-18 18:45:36 -07:00
Josh Avant 784676537c feat(ui): enable link favicons by default (#126109) 2026-08-18 18:41:54 -07:00
Peter Steinberger fea2198319 fix(ui): keep New Session folder picker usable while menus close (#126032)
* fix(ui): track overlapping place popover hides

* test(ui): stabilize activity grouping across timezones
2026-08-18 18:29:49 -07:00
Vyctor H. Brzezowski 421104253b feat(ui): proxy opt-in link favicons through gateway (#121906)
Co-authored-by: joshavant <830519+joshavant@users.noreply.github.com>
2026-08-18 17:44:57 -07:00
Vyctor H. Brzezowski 1110cd09bd improve(ui): make online sidebar section collapsible (#125963)
* improve(ui): make online sidebar section collapsible

* improve(ui): show online avatars in compact state

* improve(ui): align online section heading

* fix(ui): satisfy sidebar CI gates

* fix(ui): keep online expanded on first visit
2026-08-18 20:28:38 -03:00
Josh Lehman a91f1202d9 fix(ui): keep Plugins hub navigation stable (#126061)
* fix(ui): keep Plugins hub navigation stable

* chore: format release validation skill
2026-08-18 16:08:41 -07:00
ClawSweeper d39a24c687 fix(ui): identify current user in owner filters (#126052)
Pin the authenticated profile first and label it as Name (You) in the shared session owner menus.

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
2026-08-18 15:49:33 -07:00
Peter Steinberger 1d9cda833f feat(ui): show machine CPU and RAM in the cloud picker (#125696)
The cloud machine picker described each class in prose ("Cheap smoke checks
and small repos"), which was the widest thing in the row, got ellipsized, and
did not say what the operator actually picks on. Machine options now carry the
class shape and the picker renders "32 vCPU · 64 GB" instead.

Crabbox reports per-provider class shapes from `providers --json`; the plugin
reads that catalog once per lifecycle and attaches cpu/memoryGb to each option.
A missing binary, failed command, unparseable output, absent classes, or an
unmatched provider all degrade to label-only rows, so an older Crabbox keeps
working.

`description` was never released, so it is removed rather than deprecated, and
listMachineOptions becomes async for the catalog read. Deletes the duplicate
machine-option projector in the environments server method.
2026-08-18 15:38:15 -07:00
Peter Steinberger f7db0a4c51 fix: show named CLI sessions in the sidebar (#126043)
* fix(gateway): preserve explicit session names

* test(ui): keep session visibility fixture isolated
2026-08-18 15:33:43 -07:00
Peter Steinberger e8312171c1 fix: direct Gateway stops wait for active work (#126024)
* fix(gateway): drain active work on direct stop

* test(ui): isolate widget fetch retry mock
2026-08-18 15:29:52 -07:00
Patrick Erichsen f6f426c8e8 feat(ui): add copy session id action (#124059) 2026-08-18 22:29:20 +00:00
Peter Steinberger efff6964e0 fix(ui): make assign-to-me update session owner (#126031)
Make the self shortcut use the same canonical owner payload as the Assign to submenu so Control UI ownership updates reliably.

Refs #126026
2026-08-18 15:11:50 -07:00
ClawSweeper cd0cdfd521 fix(ui): keep the empty side panel closed (#126047)
Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
2026-08-18 15:11:24 -07:00
ClawSweeper 20b6a04036 fix(ui): vertically center session row actions (#126041)
Center sidebar session pin and menu actions across the full two-line row while reserving text width on hover and touch. Add browser geometry regression coverage.

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
2026-08-18 15:10:22 -07:00
ClawSweeper 20c09b8088 improve(ui): label new session picker menus (#126045)
Show Agents, Environments, Projects, and Branches headings when the four New Session pickers open.

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
2026-08-18 15:10:04 -07:00
ClawSweeper 670f61200b improve(ui): slow new session spinner (#126044)
Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
2026-08-18 15:06:55 -07:00
Jacqueline Henriksen 14d43ad93c fix(ui): reflect inherited agent skill allowlists (#124429)
* fix(ui): honor inherited agent skill filters

* test(ui): cover inherited agent skill allowlists

* test(ui): publish real gateway skill proof

* chore(proof): remove generated UI evidence

* fix(ui): show inherited skills in agent context

* fix(ui): show inherited skills in agent context

* docs(proof): record rebased gateway UI verification

* docs(proof): capture current-head agent skills UI

* docs(proof): bind agent skills capture to final head

* chore(ui): remove PR-only proof artifacts

* fix(ui): preserve list-form agent skill overrides

* fix(ui): preserve list-form agent mutations

* fix(ui): use canonical list skill replace path

* docs(ui): attach inherited skills gateway proof

* chore(proof): keep visual evidence out of source tree

* fix(ui): remove misleading enable-all action

* test(ui): reflect removed enable-all action

* fix(ui): describe skill reset as inherited defaults

* fix(ui): keep skill reset on canonical roster

* fix(ui): reset list-roster skill overrides

* fix(ui): satisfy inherited skills proof checks

* fix(ui): keep agent skill reset on canonical entries

* test(ui): focus inherited skill regression proof

---------

Co-authored-by: RoboClaw <309084314+roboclaw-bot@users.noreply.github.com>
2026-08-18 15:06:28 -07:00
Peter Steinberger 491dc7f8b1 fix(codex): report native project docs truthfully (#126010) 2026-08-18 14:42:56 -07:00
Peter Steinberger 8032e6c75e fix(ui): restore session link hovercards (#125968)
* fix(ui): restore session link hovercards

* chore: defer session hovercard release note
2026-08-18 13:51:35 -07:00
Peter Steinberger 549e6349f8 fix(workboard): prevent orphaned runs and overwritten cards (#125951)
* fix(workboard): make ownership updates atomic

Persist launch intent before worker acceptance, reconcile accepted identities,
fence cross-host card mutations, and deduplicate session capture in SQLite.

Closes #125932

* test(workboard): keep race fixtures plugin-local

Use a plugin-local synchronization helper and update the sessions-page capture
expectation for the new store-owned RPC.

* fix(workboard): fence lifecycle and restore races

Apply terminal lifecycle state only while the matched association is current,
and converge concurrent archived session restores on the active winner.
2026-08-18 13:50:17 -07:00
Peter Steinberger 347a0eaf8c feat(ui): activity feed automation grouping, live status, deep-link inspector (#125981)
* feat(ui): collapse automation sessions in activity feed

* feat(ui): show live run status on activity feed rows

* feat(ui): make run inspector deep-link only

* fix(ui): only link inspect run to a current active run

Addresses ClawSweeper P1: a stale observer digest could deep-link a live
row to an ended run's audit record; trust digest runId only when it is
still in activeRunIds.
2026-08-18 13:49:25 -07:00
Peter Steinberger a57d9b5060 fix(ui): never restore a stored draft over typed new-session composer text (#125884)
* fix(ui): never restore a stored draft over typed new-session composer text

After a reload the new-session composer renders before the gateway
recovery scope arrives; selectRoute then zeroes the draft revision, so
text typed in that window lost to the stored draft's higher revision and
the async restore overwrote (or, interleaved with input, appended to)
what the user had typed. Seen on PR #125690 CI (checks-ui-e2e 5/12, run
32122284238) as a doubled composer value.

NewSessionDraftPersistence now records a pristine baseline at each
programmatic content replacement (page reset, navigation handoff,
restore apply) and restores only when no user mutation happened past it;
otherwise the typed text wins and persists above the stored revision,
including minting a revision for text typed before route activation so
that draft still lands. The chat composer sibling is unaffected: its
revision lineage persists synchronously to localStorage.

* test(ui): run draft-persistence regression in the isolated ui lane

The regression test mocks the statically imported
durable-composer-persistence helper (the store runtime is only
dynamically imported, so under the shared isolate:false module graph its
mock alone is packing-dependent). Isolating the file makes the mocks
deterministic and keeps the shared-lane file set unchanged so sibling
packing does not shift.
2026-08-18 13:23:31 -07:00
Peter Steinberger 3116923ff7 test(ui): stabilize widget hover proof (#125959) 2026-08-18 12:21:47 -07:00
Peter Steinberger c1527822ce feat: add dashboard fullscreen modes (#125806)
* feat(ui): add dashboard fullscreen modes

* docs(ui): document dashboard fullscreen modes

* fix(ui): scope dashboard fullscreen lifecycles

* test(ui): align dashboard e2e grant fixture

* fix(ui): surface dashboard document load failures
2026-08-18 12:09:07 -07:00
Peter Steinberger 872230be91 fix(ui): retry CLI agent catalog discovery (#125943)
* fix(ui): retry new-session CLI catalog discovery

* fix(ui): distinguish CLI agent catalog errors
2026-08-18 11:59:12 -07:00
Peter Steinberger e15d5329fa fix(memory): scope Dream Diary requests to agents (#125936) 2026-08-18 11:54:58 -07:00