feat(FN-1493): add directory browsing UX to plugin install flow

- Add DirectoryPicker component for browsing filesystem to select plugin source
- Add dist-folder and package-root install-source resolution in backend
- Wire frontend installPlugin to mode-discriminated endpoint (/plugins/install-local)
- Add comprehensive regression tests for browse-driven plugin install workflow
- Update PluginManager UI with directory picker integration and CSS styles
This commit is contained in:
gsxdsm
2026-04-12 18:10:39 -07:00
parent 9d2f61501b
commit 717124fc9e
10 changed files with 1318 additions and 119 deletions

View File

@@ -6,6 +6,8 @@ export interface DirectoryPickerProps {
value: string;
onChange: (path: string) => void;
placeholder?: string;
/** Optional keydown handler forwarded to the text input (e.g. Enter-to-submit). */
onInputKeyDown?: (e: React.KeyboardEvent<HTMLInputElement>) => void;
}
interface BrowserState {
@@ -18,7 +20,7 @@ interface BrowserState {
showHidden: boolean;
}
export function DirectoryPicker({ value, onChange, placeholder }: DirectoryPickerProps) {
export function DirectoryPicker({ value, onChange, placeholder, onInputKeyDown }: DirectoryPickerProps) {
const [browser, setBrowser] = useState<BrowserState>({
isOpen: false,
loading: false,
@@ -105,6 +107,7 @@ export function DirectoryPicker({ value, onChange, placeholder }: DirectoryPicke
className="directory-picker-input"
value={value}
onChange={(e) => onChange(e.target.value)}
onKeyDown={onInputKeyDown}
placeholder={placeholder || "/path/to/your/project"}
/>
<button