description: "Web Session-header \"Open In...\" split button: launches the remembered application on the session workspace directory and lists every application the host probed as installed."
English | 中文
This package provides the browser surface of the open-in-app feature: a Session-header split button whose main button opens the current session's workspace directory (the summary's cwd) in the remembered application, and whose chevron lists every catalog application the host probed as installed. Availability, icons, and launches come from the host routes of dsh-host-open-in-app; mount the two packages together. A session without a workspace directory, or a host where nothing nameable is installed, renders no button at all.
Mount this plugin in the Web composition beside dsh-host-open-in-app; the pair composes the whole feature in two cordis.yml rows and this row takes no config. The Session header grows an "Open In..." split button whenever the host probed at least one installed catalog application and the session has a known workspace directory.
The main button shows the remembered application's icon — the real application icon wherever the host extracts one (macOS bundle icons, Windows executable icons, Linux theme icons), a generic glyph where it serves none — and a design-system tooltip ("Open locally"); clicking launches immediately. The chevron opens a dense menu of the installed applications with the remembered one marked by a filled row. Availability is read once per page from the host; the last chosen application persists in the browser (dsh.open-in-app.choice), and a choice that is no longer installed falls back to the first available entry. A launch that finishes quickly leaves the button untouched — the dimmed busy treatment appears only after 250 ms in flight — and a failed launch shows the error tooltip and a red outline for two seconds. All copy lives in the bilingual open-in-app locale namespace; an application id the dictionaries cannot name is not offered.
None, as the split button is browser chrome; nothing here reaches a model request.
None; this package neither assembles nor sends a provider request.
app.<id> entry in both dictionaries stays invisible instead of showing a raw id; extending the catalog means extending dsh-host-open-in-app and this package's locales together.Runtime invariant: No companion is published. The plugin registers one dictionary effect and one header-slot entry whose disposal the HMR-safety spec proves; availability and choice live in the controller's snapshot stores with no second copy to diverge.