* feat(client): share sidebar scrolling and dock workspace header * fix(client): keep shared sidebar scrolling vertical * fix(client): match sticky workspace header to sidebar fill * fix(client): stabilize transparent sticky sidebar and compact row layout * refactor(ui-primitives): keep sticky section observer internal * fix(ui-primitives): limit row animations to visible scrollports * feat(ui-workspace): drive sticky clipping with scroll timelines * refactor(ui-primitives): bound row animations by the window * feat(client): hand off sidebar wheel scrolling to the workspace list The workspace list scrolls inside its own one-viewport section below the toolbar instead of sliding under a clipped sticky toolbar. The sidebar viewport scrolls the navigation away first; ui-sidebar's scroll hand-off splits each wheel event between the viewport and the section scroller, which the occupant binds through the slot-level useSectionScroller hook supplied by hookContext. * test(client): cover the sidebar scroll hand-off and align the list scrollbar Test-owned sidebar roles declare the slot-level scroller inject and pass its hookContext. Unit tests cover the hand-off split, wheel filtering, and listener rebinding; the e2e scenario checks one wheel event crossing from the navigation into the list and back. The list area reaches 2px from the sidebar edge for its scrollbar while rows keep the 8px inset. The unused clip module, its tests, and the sticky clearance variable are removed; READMEs and the slot catalog describe the nested scrolling. * refactor(ui-primitives): restore MenuGroup sticky observation The section observer was extracted for a sticky workspace toolbar that nested scrolling no longer has, so MenuGroup is its only consumer again. MenuGroup and its tests return to the master implementation. * fix(client): keep native sidebar scrolling away from the hand-off boundary The hand-off splits a wheel gesture in JavaScript only when its first event must move the sidebar viewport or starts outside the section scroller, and then keeps that gesture, including momentum, until wheel events pause for 100ms. Gestures the section scroller can take alone stay native, an uncancelable native gesture that reaches the section top passes the rest to the viewport, and events another listener canceled are left alone. The section is at most one viewport tall, and exactly that tall while search is expanded, so a short list leaves the navigation in place. Stale absence assertions and unused viewport declarations are removed; the READMEs document portals and the data-sidebar markers. --------- Co-authored-by: Yif <[email protected]> Co-authored-by: imccyu <[email protected]>
description, kind
| description | kind |
|---|---|
| Runtime API inspection, process-local runners, and historical Cordis cards. | package-group |
packages/extensions
English | 中文
Summary
The extensions group provides read-only runtime API discovery for agents, process-local runners for programmatic and browser consumers, and historical generated-plugin cards. Standard and Creator modes install persistent plugins through Plugin Manager. Choose a child package for inspection, Host execution, Client execution, or browser controls.
Table of Contents
Packages
| Package | Role | ctx key |
|---|---|---|
tool-cordis |
Two read-only tools for runtime API discovery | registers on ctx.tools |
cordis-host-runner |
Host half: definition registry, sandboxed host-half lifecycle, and the inspect registry that answers browser queries | provides ctx.dynamicCordisRunner and ctx.cordisInspect |
cordis-client-runner |
Browser half: evaluates a browser-half source into a live plugin and answers run requests | client face; provides browser ctx.dynamicCordisRunner |
ui-cordis |
Browser panel and historical lifecycle tool cards | client face; registers slots |
Related documentation
- Extensions subsystem — the generated
ctx.cordisInspectandctx.dynamicCordisRunnerservice API. - Generated tool catalog — the two read-only tool schemas.
- Generated configuration catalog — the runner's accepted config fields.
- Self-referential Cordis toolset reference — design home for sandbox semantics, lifecycle, and composition.
- Client shells and dynamic packages Agent Note — package placement and build faces for the client halves.
Dev Note
Working context for maintainers — click to expand
The two browser-half packages live in this group rather than under packages/client/ because they are halves of this subsystem's dual-half packages; the client face compiles them through the client program, while the host program references only the host runner.