* feat: edit plugin settings in author-defined groups
Punchcard-Session: crisp-summit-lantern-qk
* fix: keep empty plugin collections compact
Punchcard-Session: crisp-summit-lantern-qk
* fix: preserve whole-value plugin schema controls
Punchcard-Session: crisp-summit-lantern-qk
* test: await acknowledged schema edits before reload
Punchcard-Session: crisp-summit-lantern-qk
* fix: let plugin settings menus own Escape dismissal
Punchcard-Session: crisp-summit-lantern-qk
* test: carry direct-route coverage into grouped settings
Punchcard-Session: crisp-summit-lantern-qk
* refactor: call the catalog icon owner directly
Punchcard-Session: crisp-summit-lantern-qk
* fix: commit plugin settings before Escape dismissal
Punchcard-Session: crisp-summit-lantern-qk
* refactor(ui): own plugin editor contract in settings model
Derive view inputs from the editor model instead of making the editor depend on its renderer. Preserve the existing field and callback types while removing the import cycle.
Punchcard-Session: crisp-summit-lantern-qk
* test(ui): use grouped native discovery controls
Punchcard-Session: crisp-summit-lantern-qk
* test(ui): follow the grouped plugin settings heading
Punchcard-Session: crisp-summit-lantern-qk
* fix(ui): step from staged plugin setting numbers
Punchcard-Session: crisp-summit-lantern-qk
* refactor(plugins): separate manifest record construction
Keep metadata normalization and contained source/artwork resolution in the record owner; leave discovery, install trust, and duplicate resolution in the registry. Remove its retired max-lines suppression.
Align the existing provider-source cache regression with native and JavaScript resolution and verify reuse across registry builds.
Punchcard-Session: crisp-summit-lantern-qk
* test(ui): keep saved mock config projections authoritative
* fix(ui): retain plugin settings during inspection refresh
* test(ui): consolidate mock config parsing and uninstall fixtures
Reuse the serialized mock Gateway parser for config reads and write
acknowledgements, preserving caller-specific fallback values and saved
configuration projections without growing the grandfathered helper.
Build post-uninstall inventory from the imported fixture so the moved
Calendar fixture remains encapsulated and existing lifecycle assertions run.
Punchcard-Session: crisp-summit-lantern-qk
* test(ui): return valid plugin inspection during config mutations
Retain Gateway readiness probes, stage timing, and sanitized log tails in desktop proof receipts and failure output. Record successful readiness timing and preserve the initial failure when cleanup also fails, without changing startup budgets or desktop assertions.
* feat(ui): control task progress with drag and scroll gestures
Replace timed progress disclosure with a single gesture-owned pixel extent. Hold partial openings across pauses, reversals, streamed output and finals; preserve accessible full toggles and native content scrolling. Reader takeover retires pending transcript follow without deriving intent from layout.
Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
Co-authored-by: vyctorbrzezowski <51521767+vyctorbrzezowski@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
* refactor(ui): keep the disclosure choice type internal
The choice alias has no external consumers. Removing its unused export satisfies the dependency gate without changing runtime behavior; all three unused-export scans and UI types pass.
Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
Co-authored-by: vyctorbrzezowski <51521767+vyctorbrzezowski@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
---------
Co-authored-by: steipete <58493+steipete@users.noreply.github.com>
Co-authored-by: vyctorbrzezowski <51521767+vyctorbrzezowski@users.noreply.github.com>
Co-authored-by: vincentkoc <25068+vincentkoc@users.noreply.github.com>
* fix(usage): count repeated tool calls in session totals
Preserve each recorded tool-call occurrence while keeping the legacy top-level
name as one mirror. Rebuild cached usage rollups so existing histories report
correct whole-session, daily, and per-tool totals.
* fix(usage): count loaded messages in selected intervals
Count timestamped user and assistant rows from the loaded conversation instead
of inferring message roles from token samples. Keep unavailable interval counts
unknown, preserve retained counts during refresh, and restore authoritative
session totals when the interval is cleared.
* fix(usage): reuse canonical tool-call classification
Use the existing chat classifier for Usage aggregation and log rendering,
preserving trimmed type inputs, raw tool names, block order, and repeated
call accounting. Cover padded and legacy toolUse spellings without a second
classification policy or duplicate export.
* refactor(usage): share range filtering and consolidate tests
Use one log-range predicate for the detail summary and conversation while
retaining undated rows and the full tool-filter options. Remove the unreachable
axis-label branch and redundant SVG assertion, then record the reduced assertion
count. Consolidate pricing, cache-upgrade, and invalid-limit fixtures without
removing their cases or changing the ordered no-append/append proof.
* fix(ui): make settings search reach typography controls
Index the translated Typography font controls and link their rendered section. Schedule Settings target scrolling after the navigation render so normal-motion jumps also reach existing lower sections, and cancel pending scrolling when navigation changes or the page disconnects.
* fix(ui): complete Settings search checks and scroll ownership
* fix(ui): keep automation history with its selected query
* refactor(ui): isolate automation run history ownership
* refactor(ui): separate automation state type contracts
Finish the existing finite footer animation before checking the settled keyboard-focus reveal. Preserve every opacity, focus, pointer-event, and tooltip assertion without increasing wait budgets. Related: #149826.
* fix: preserve Windows credential reads with fs-safe 0.12.0
* test: preserve compiled fs-safe configuration checks on Windows
* test: drain workspace page routes before closing fixtures
* ci: move heavy main checks to 16-vCPU runners
* perf(cli): avoid eager protocol schemas in cron registration
* test: align prerelease workflow expectation with main CI
* test: resume pending MCP Code Mode fixture calls
* test(agents): cover cloned admitted normalizers
Extend the canonical assembly-array fixture from #149662 with an admitted provider that returns cloned tools. Preserve its metadata, catalog, successful execution, abort-wrapper and post-disposal assertions. The production Array.from owner remains unchanged on main.
* ci: spread Control UI checks across twelve shards
* docs(ci): align runner guidance with current placement
* ci: route trusted hybrid preflight to Blacksmith
* test: align hybrid preflight runner table
* ci: retain real-Gateway failure diagnostics
Keep captured browser JSON and screenshots in an attempt-specific artifact when the real-Gateway CI job fails. Reuse the ordinary Control UI upload policy with seven-day retention and ignore absent captures, while preserving test commands and sanitized proof uploads.
Extend the existing workflow guard and document that diagnostic artifacts are not sanitized public proof. The new guard fails before the fix; all 18 focused alias, workflow, and command cases pass afterward. Workflow lint, selected changed-file checks, and independent review pass.
* fix(ui): preserve agent panel intent while route data loads
A reused Agents page retained its initialized flag after its route data became pending. Roster initialization could then navigate through the default Overview panel, replacing an intended Files route. Require current route data before navigation and panel work, and clear initialization when the pending update applies.
Keep explicit Settings selection revisions authoritative when the loader completes. Four focused regression cases fail before the repair with the reproduced Overview URL; 136 adjacent cases, targeted lint, formatting and independent review pass afterward.
* ci: publish allowlisted UI failure summaries
Keep raw browser reports and screenshots out of automatic CI artifacts. Write an explicit public projection from the existing failure owner and select only its fixed filename in ordinary and real-Gateway jobs. Raw captures remain local, and fixed private filenames keep sensitive labels out of logged paths. Older frozen targets without the summary produce no matching artifact.
Preserve original failures and manual sanitized proof capture. Sensitive-sentinel regressions cover nested state, route parameters, labels, errors, models and content, including evaluation, screenshot and storage failures. All 10 helper cases, six workflow/command cases, workflow validation, plain Node import and selected changed-file checks pass; independent review found no actionable issues.
* fix: align FileTransfer with fs-safe 0.12.0
Upgrade the FileTransfer dependency introduced by #148881 to the same exact version used by core, OpenShell and 1Password. Regenerate the importer with pnpm 12.3.4 and retain all other lock entries.
Strengthen the existing orphan-WAL collision regression with equal-length, different-content bytes so recovery exercises the shared hash path and preserves the existing quarantine. Frozen installation, the 16-case sidecar suite, 18 tool-policy cases and 23 UI/diagnostic cases pass on the integrated source; independent review found no actionable issues.
* test(ui): retain safe Canvas failure diagnostics
* test(gateway): model live child execution in stop proof
* test(ui): inspect HTML sandbox after render readiness
* test(cron): cover event schedules after API state updates
* ci: count hosted rows after hybrid preflight routing
Describe the existing combined failure, timeout, and cancellation count as failed or stopped. Keep authoritative totals and protocol unchanged, cover active and terminal summaries, and clarify the combined count in the Swarm docs.
Port the self-contained handoff readiness wait from #143817. Wait for the former controller canvas to detach and for its replacement to render before starting the resize matrix on both transports.