feat(studio): full IDE-like file management#147
Merged
miguel-heygen merged 9 commits intomainfrom Mar 31, 2026
Merged
Conversation
bff4940 to
5510cfd
Compare
92a6767 to
26529c8
Compare
Collaborator
Author
This stack of pull requests is managed by Graphite. Learn more about stacking. |
This was referenced Mar 31, 2026
9ecd4e6 to
3093cc4
Compare
26529c8 to
4c5d39c
Compare
jrusso1020
reviewed
Mar 31, 2026
jrusso1020
approved these changes
Mar 31, 2026
4c5d39c to
25e2d4d
Compare
3093cc4 to
a1f2631
Compare
25e2d4d to
450da64
Compare
c757f91 to
5e8927f
Compare
450da64 to
942b7aa
Compare
5e8927f to
dac304e
Compare
942b7aa to
7bdc924
Compare
7bdc924 to
7d8fdcd
Compare
7d8fdcd to
bdee705
Compare
…ate, drag-and-drop) API: Add POST (create), DELETE, PATCH (rename/move), and duplicate-file endpoints to the studio files route, with path safety checks and conflict detection. UI: Rewrite FileTree with right-click context menu (New File, New Folder, Rename, Duplicate, Delete), inline rename/create inputs, drag-and-drop file moves between folders, delete confirmation prompt, and a FILES header bar with quick-action buttons. Wire all operations through App.tsx handlers that call the new API endpoints and refresh the file tree. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix InlineInput double-fire on Enter+blur with committed ref guard - Add null byte sanitization via extractFilePath helper in API routes - Fix stale editingFile closure — use editingPathRef instead - Add client-side filename validation (reject / \ ..) - Prevent drag-and-drop folder-into-own-subtree - Remove trivial handleMoveFile wrapper Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Restore useMountEffect for the project hash resolution — functionally identical to useEffect(fn, []) but consistent with codebase conventions. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
InlineInput was always showing a generic File icon. Now uses FileIcon with the current input value so the icon updates live as you type. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Extract shared resolveProjectFile() helper to eliminate repeated project/path/safety boilerplate. Extract ensureDir() and generateCopyPath() helpers. Add section headers and spacing. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
bdee705 to
a1a91bc
Compare
Avoids eslint-disable for no-explicit-any by defining a narrow interface with just the req/json methods the helper actually uses. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
10 tasks
When a file is renamed, scan all HTML/CSS/JS/JSON files in the project and replace references to the old path with the new one — similar to VSCode's Rename Symbol. Updates both full paths (assets/music.mp3) and bare filenames (music.mp3). Preview also refreshes after rename. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Assets tab now has a right-click context menu with Copy path, Rename, and Delete options. Rename shows an inline input and updates references across the project via the existing rename endpoint. Delete removes the file. Both reuse the existing file management handlers from App.tsx. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- [Critical] updateReferences: remove bare-filename replacement that could corrupt unrelated files (only replace full paths now) - [Security] Add null-byte checks on PATCH newPath and duplicate path - [Types] Add onCommit/onCancel to InlineInputState, remove 6 casts - [UX] Add delete confirmation dialog in Assets tab - [UX] Add error logging on failed file operations - [Perf] Memoize sortChildren in TreeFolder Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
Stacks on top of
feat/studio-code-quality.Test plan
../foo,a/b) → rejected client-side