Commit graph

3 commits

Author SHA1 Message Date
Yichen Jiang
8349cc6c73 fix(agent-presets): live-mount-first inventory, per-runtime mounts, localized shipped preset names
Review round on #3316: the composition inventory answers from a standing
mount before the broken verdict (a file corrupted after mounting no longer
hides the running composition), livePresetMounts filters by the caller's
root fiber so a second Cordis runtime in one process never answers for it,
compositions carry trust and the plugin list resolves shipped preset names
through the shared dsh-agent-presets/display fold over ui-agent-preset's
dictionaries (INLINE_SAFE inline import; no cross-plugin runtime import),
the condition detail label reads Disabled when/禁用条件, and the stale
four-surfaces comment says three.
2026-08-29 20:41:01 +08:00
Yichen Jiang
5eb7195f9d refactor(plugin-inventory): menu-pill preset switcher, collapsible groups, inline preset-provided rows
Review-driven refinements to the scope-grouped plugin list:

- The preset switcher becomes the General-settings selector pill over the
  shared Menu primitive instead of a native select, and the preset group
  is collapsible like the global one (search still forces both open).
- The session-plugins drawer is removed: rows the presets took over sit
  inline in the global list with the preset-provided tag and per-preset
  details, since the preset group above already shows those compositions.
- The status dot renders only for a live root fiber, so file-state rows
  of an unmounted preset carry their enablement tag alone instead of a
  column of grey dots.
- PresetTree reclaims the owning entry's subtree slot: EntryTree's
  constructor filed the standing mount under the roster's own Loader row,
  so after the first session composed a preset the whole composition
  leaked into root loader.entries() as host rows (each preset overwriting
  the last). A regression test holds the root entry list identical across
  a mount.
2026-08-29 17:13:45 +08:00
Yichen Jiang
e5f36cc70f feat(plugin-inventory): carry every agent preset's composition and group the settings plugin list by scope
The settings plugin list projected ctx.loader.entries() alone, hiding the
plugins sessions actually run and rendering the web overlay's deliberate
disabled tombstones (tool-bash, tool-fs, ...) as two dozen plainly disabled
rows while the same modules ran in every standard-preset session.

- dsh-agent-presets: compositionInventory() answers flattened rows per
  preset — newest live standing generation when mounted, composition file
  otherwise with !!js disabled gates evaluated against the Loader context;
  reading never mounts (regression-tested), refusal stays 'conditional',
  raced files report broken with the reason.
- dsh-host-plugin-inventory: list() gains an optional agentPresets block,
  resolving the roster as an optional peer and mapping fiber states to the
  public phase vocabulary.
- ui-settings-plugin-inventory: preset group first behind a display-only
  switcher opening on the default preset; global group collapsed with
  failures floated; host-disabled modules enabled by >=1 preset fold into a
  session-plugins drawer naming providers; search spans scopes and points
  at matches in unselected presets.
- ui-agent-preset: the General-settings default-preset row is deleted — the
  roster section's make-default and the new-session chip keep the field —
  and the settings store slims to the display roster the header label reads.

Docs, catalogs, module graph, settings-chrome goldens, and the bilingual
Agent Note ride along.
2026-08-29 17:13:45 +08:00