fix(host,client): gate the picker affordance on the advertised kind; reject non-absolute browse paths
ds-review-bot round 2. The workspace UI never consulted the advertised directoryPicker kind: under a browse (or merge-added) backend it still rendered 'Open local folder…' and called pickDirectory(), which the host answers with directory-picker-unavailable. The create flow now reads directoryPickerKind() per menu open and renders the dialog affordance only under 'dialog' — browse (until its in-app browser UI lands) and unknown kinds hide the entry, realizing the seam's documented default; a keyless workspace-flow snapshot pins the hidden entry over the browse fixture. The browse backend also resolved wire paths, silently rebasing '' or relative parents under the host process cwd; both primitives now reject non-absolute explicit paths with their business codes, and the seam JSDoc carries the contract.
This commit is contained in:
@@ -60,7 +60,8 @@ export interface DirectoryPickerBrowseCapability {
|
||||
* List one directory level.
|
||||
* @param path - absolute directory to list; absent lists the home directory.
|
||||
* @returns the level's listing with ancestry.
|
||||
* @throws {DirectoryPickerError} `directory-unreadable` when the target cannot be listed.
|
||||
* @throws {DirectoryPickerError} `directory-unreadable` when the target is not absolute
|
||||
* (a wire value must never rebase under the host cwd) or cannot be listed.
|
||||
*/
|
||||
list(path?: string): Promise<DirectoryListing>
|
||||
/**
|
||||
@@ -68,7 +69,8 @@ export interface DirectoryPickerBrowseCapability {
|
||||
* @param path - absolute existing parent directory.
|
||||
* @param name - single non-blank path segment (no separators, not `.`/`..`).
|
||||
* @returns the created directory's absolute path.
|
||||
* @throws {DirectoryPickerError} `directory-exists` for an existing child, `directory-create-failed` otherwise.
|
||||
* @throws {DirectoryPickerError} `directory-exists` for an existing child,
|
||||
* `directory-create-failed` for a non-absolute parent or any other failure.
|
||||
*/
|
||||
createDirectory(path: string, name: string): Promise<string>
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user