deepseek-harness/packages/host/directory-picker-native
creatixchu f56b9149e6 refactor(client): deferGroupRegistration owns the multi-hole flow semantics
The construction-rollback + late-conflict-rollback + loud-rethrow block was
about to be a verbatim clone across the two flow packages; ui-slots now owns
it as deferGroupRegistration (one occupant, several holes, as a unit), with
direct specs for all three arms, and the native flow consumes it.
2026-07-29 03:17:01 +08:00
..
src refactor(client): deferGroupRegistration owns the multi-hole flow semantics 2026-07-29 03:17:01 +08:00
tests test(host): cover the non-Error late-conflict wrap 2026-07-29 03:08:40 +08:00
package.json feat(host,client): compose directory picking through slots — dual-face -native, no wire advertisement 2026-07-28 21:51:01 +08:00
README.i18n.yaml feat(host,client): compose directory picking through slots — dual-face -native, no wire advertisement 2026-07-28 21:51:01 +08:00
README.md feat(host,client): compose directory picking through slots — dual-face -native, no wire advertisement 2026-07-28 21:51:01 +08:00
README.zh.md feat(host,client): compose directory picking through slots — dual-face -native, no wire advertisement 2026-07-28 21:51:01 +08:00
tsconfig.json feat(host,client): compose directory picking through slots — dual-face -native, no wire advertisement 2026-07-28 21:51:01 +08:00
tsdown.config.ts feat(host,client): compose directory picking through slots — dual-face -native, no wire advertisement 2026-07-28 21:51:01 +08:00

@deepseek-ai/dsh-host-directory-picker-native

English | 中文

The native-OS-chooser backend of the directory-picker seam: NativeDirectoryPicker registers ctx.directoryPicker with the native capability, whose pick(signal) opens one native chooser per call and resolves the chosen absolute path (null on cancel). Platform tools run without a shell: osascript on macOS, an STA PowerShell FolderBrowserDialog on Windows, and Zenity with a KDialog fallback on Linux; the caller's abort terminates the native process. Only viable when the operator sits at the host's display — remote deployments compose -browse instead. The command boundary (DirectoryPickerRunner) and platform facts are injectable for deterministic tests. The shared no-shell subprocess runner lives in dsh-native-command.

Dual-face package: the browser half (./client) registers a renderless flow occupant into ui-workspace's two directory-flow holes — each open request drives host.pickDirectory and reports the one outcome (picked path / cancel / failure) through the hole's owner conversation. One cordis.yml row therefore composes both sides of the native interaction; the client carries no capability-kind branching, and mounting a second flow package fails at load (the holes are single kind).

Model Experience

None, as the backend serves the GUI host's directory selection; nothing here reaches a model request.

KV Cache effect

None; this package neither assembles nor sends a provider request.

Known Limitations and Deferred Work

  • Linux requires desktop tooling — with neither Zenity nor KDialog installed, pick rejects with an actionable error; it does not fall back to a typed-path prompt (the browse backend is that fallback at the composition level).