The two rules that hide a row's body under a filled navigator started with
`:has(`, so the browser treated every element as a possible subject and
restyled the whole document after any DOM change. Both rows that host the
navigator now carry data-files-navigator-row, which the rules name.
refreshApplications now returns a Promise; the refresh lifecycle test starts refreshes without awaiting them, so it marks them with void for the type-aware no-floating-promises lint.
A file type without a recorded association answer now holds the file menu until the background query settles, 300 ms pass, or the menu closes, so the application row usually opens already named instead of changing after the menu appears. Later openings of the type still show the recorded answer at once and refresh in the background. Open menus track the answer they last applied per verification, so answers for other types never re-resolve them. README documents the wait and its first-opening delay.
- Reveal the selected file again when files arrive or reorder around it,
so a navigation that selects a file before the diff loads still scrolls
the wide pane; a changed filter shows its results from the top.
- Compare quote summaries in draft change detection, so restoring a draft
that only adds or changes a summary updates the snapshot and storage.
- Read the full path and range instead of the short label to assistive
technology; the Web snapshot now records src/<file>.
- Type the stored summary schema against QuoteSummary, test the stored
round trip, and document why revealRow does not use scrollIntoView.
The launcher ignores dsh.bundle.listedByDefault, so a non-boolean value now
goes to meta.error instead of error. error again means the layer was skipped,
which the plugin page relies on to mark a selected bundle as not running.
Card head geometry moves to custom properties shared with the reason line.
Add to input inserted the whole model-facing reference (header, source,
diff hunk) as the composer quote, which was unreadable. QuotePreview and the
composer's insertQuote now accept an optional QuoteSummary that replaces the
inline excerpt with a label and body and opens a title/detail/body popover;
drafts store it, and the sent message still carries the full text. The Forge
panel supplies the file name, side and lines, path, and comment.
A file menu now reuses its verified Host path only while its own association subscription re-resolves it synchronously, and the verification record is cleared when a stat starts instead of when the registry observes. Every opening therefore runs its own stat whatever order the context-menu registry observes and resolves in; a registry change can at most cost another stat or a flicker. An open menu re-resolves only when its own file type's answer changes. The answer comparison lists every application field and fails to compile when the type gains one. README documents the remaining cache limitations.
A newer file-menu opening cancels the unfinished background refresh and queries its own file, so a stuck native query cannot block later refreshes and quick openings no longer fan out concurrent queries. Answers published while a menu is still verifying its target no longer restart that verification. README wording now matches the refresh order and documents the remaining cache limitations.
The file context menu now names the application recorded for the file's type without waiting for the Host's native association query (osascript / PowerShell / gio), then re-queries in the background and updates the open menu in place when the answer changes. Before the first answer for a type, the row opens the file through its OS association.
A Gemini API route cannot authenticate without a key, so the create card
and the editor require one. Its models offer only minimal, low, medium,
and high, each sent under its own name, with no Off.
Co-authored-by: LegGasai <[email protected]>
Add pi-ai's google-generative-ai protocol to hand-declared routes, read
Gemini's native model listing during discovery, and offer it as "Gemini
API" in the Custom model API form.
Refs #7978
Co-authored-by: LegGasai <[email protected]>