AGENTS.md@packages/client/src/components/DirectorySettings · git:20260706.2e8fcf2 · 2026-07-06 · sha256 21a2506b3f0f9463
AGENTS.md@packages/client/src/components/DirectorySettings git:20260706.2e8fcf2A
Immutable. This exact content is served forever at /api/v1/blob/21a2506b3f0f9463.
# DOX — packages/client/src/components/DirectorySettings
Files in this directory. One row per source file.
| File | Purpose |
|------|---------|
| `DirectorySettings.tsx` | Directory-scoped settings page. Mirrors SettingsPanel left-nav, mobile hierarchy. Props `{cwd,page,onBack,onViewFile}`. Pages instructions/packages/resources; default packages. Route `/folder/:cwd/settings/:page?`. `directory-settings-content` wrapper = `flex flex-col min-h-0 overflow-y-auto` (parity with global `settings-content`; height for Instructions split, scroll for Packages/Resources). See change: directory-settings-page-and-scoped-md-editing; directory-settings-tree-and-resize. |
| `FilePicker.tsx` | Scope-bounded `.md`/`.mdx` candidate picker. Fetches `GET /api/file/md-candidates` (omit cwd = global). Scope chip + substring filter. Folds candidates into a collapsible folder tree (`buildTree`): `DirRow` chevron + `depth*16px` indent, `FileRow` basename-only. Collapsed `Set` defaults expanded, persists to `localStorage:dashboard:dirset-collapsed` (only collapsed paths). Filter force-expands matching branches. `width` prop = desktop px (undefined = mobile full width); rows ≥44px below `md`. See change: directory-settings-page-and-scoped-md-editing; directory-settings-tree-and-resize. |
| `file-tree.ts` | Pure folder-tree builder for FilePicker. `buildTree(candidates)` splits `relPath` on `/`, nests dirs (sorted), collects basename leaves; plain tree (single-child dirs NOT merged). `subtreeMatches(node,q)` = descendant/dir-name match for filter force-expand. Exports `buildTree`, `subtreeMatches`, `TreeNode`, `FileLeaf`. See change: directory-settings-tree-and-resize. |
| `InstructionsEditorPane.tsx` | Presentational editor pane for Instructions page. Renders file tab, conflict banner, lazy Monaco `MarkdownEditor`, dirty-gated Save Bar. Optional `onBack` renders a mobile back arrow (`instructions-mobile-back`) in the file tab. Exports `InstructionsEditorPane`. Split from `InstructionsPage` (container holds state machine, pane holds view). See change: directory-settings-tree-and-resize. |
| `InstructionsPage.tsx` | Edits markdown. FilePicker + resize gutter + lazy Monaco MarkdownEditor + dirty-gated Save Bar. Reads `GET /api/file/md-read`, writes `POST /api/file/write`. 409 conflict banner (Reload/Overwrite). beforeunload + Confirm on dirty file-switch. Props `{cwd?}`; cwd present = directory scope, absent = global (~/.pi/agent). `useIsDesktop` (`md`) gates layout: desktop = resizable split (`useTreeColumnWidth` + `tree-gutter`); mobile = master/detail keyed off `?file=` (`resolveSelection` viewport-gates default selection; `backToTree` clears `?file=`). See change: directory-settings-page-and-scoped-md-editing; directory-settings-tree-and-resize. |
| `PackagesPage.tsx` | Reuses PackageBrowser scope="local" install/update/uninstall. See change: directory-settings-page-and-scoped-md-editing. |
| `ResourcesPage.tsx` | `usePiResources` tree via MergedScopeSection. Click leaf → onViewFile. Wires `useResourceActivation` → per-row enable/disable toggle + `ResourceReloadBanner` for both Local/Global scopes (change: folder-resource-activation-toggle). See change: directory-settings-page-and-scoped-md-editing. |