Skip to content

feat: file association UX (UTI + vync open .)#12

Merged
PresenceWith merged 3 commits intodevelopfrom
feat/file-association-ux
Mar 12, 2026
Merged

feat: file association UX (UTI + vync open .)#12
PresenceWith merged 3 commits intodevelopfrom
feat/file-association-ux

Conversation

@PresenceWith
Copy link
Copy Markdown
Owner

Summary

  • UTI 등록: com.vync.canvaselectron-builder.yml에 선언하여 macOS가 .vync를 알려진 파일 타입으로 인식 → DMG 설치 후 더블클릭 파일 연결 보장
  • vync open .: 인자 없이 또는 .으로 실행 시 CWD + CWD/.vync/ 에서 .vync 파일 자동 발견. 1개면 바로 열기, 여러 개면 번호 선택 or a로 전체 열기
  • P2/P3 로드맵: 앱 첫 실행 안내 다이얼로그(P2), 전용 파일 아이콘(P3)을 FUTURE.md에 기록

Test plan

  • 73개 테스트 전체 PASS (discover 6개 신규 포함)
  • vync open . 수동 테스트 — 파일 발견 + 선택 동작 확인
  • DMG 리패키징 후 Info.plist에 UTExportedTypeDeclarations 포함 확인
  • DMG 설치 후 .vync 파일 더블클릭 → Vync 앱 실행 확인

🤖 Generated with Claude Code

PresenceWith and others added 3 commits March 12, 2026 15:15
Add UTExportedTypeDeclarations (com.vync.canvas) to electron-builder
config so macOS properly recognizes .vync as a known file type. This
ensures double-click file association works reliably after DMG install.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
vync open without args or with "." now discovers .vync files in the
current directory (CWD + CWD/.vync/, 1 level deep, ignoring
node_modules/.git). Single file opens directly; multiple files show
a numbered selection prompt with "a" for all.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Document deferred items: first-run dialog for default app setup (P2)
and custom .vync file icon (P3).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@PresenceWith PresenceWith merged commit 19fa1f2 into develop Mar 12, 2026
1 check passed
@PresenceWith PresenceWith deleted the feat/file-association-ux branch March 12, 2026 06:39
PresenceWith added a commit that referenced this pull request Mar 12, 2026
* fix(ui): separate tab scroll container to prevent dropdown clipping

overflow-x: auto on .vync-tab-bar forced overflow-y: auto per CSS spec,
clipping the absolutely positioned dropdown. Split into .vync-tab-scroll
(overflow-x: auto) and keep .vync-tab-add outside the scroll container.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* test: add failing tests for GET /api/files/discover endpoint

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(server): add GET /api/files/discover endpoint

Scans allowedDirs and their .vync/ subdirectories for unregistered
.vync files. Returns up to 100 discovered file paths. Enables the
frontend '+' button to show files available for opening.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(ui): connect file discovery to tab bar dropdown

App fetches GET /api/files/discover on '+' click, passes results
to TabBar. Dropdown shows 'Reopen' (closed tabs) and 'Open'
(unregistered .vync files) sections. Uses handleAddFile with
server-validated path for reliable tab creation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: update architecture, decisions, and CLAUDE.md for discovery endpoint

- ARCHITECTURE.md: add GET /api/files/discover to API endpoint table
- DECISIONS.md: fix D-015/D-016 doc paths (plans/ → archive/)
- CLAUDE.md: update multi-tab UI description for two-section dropdown

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* chore: clean up archived docs, completed plans, and examples

Remove docs/archive/*, completed docs/plans/*, and examples/ that are
no longer needed. Add docs/archive/ to .gitignore.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(server): use named path parameter for Express 5 catch-all route

Change `app.get('*', ...)` to `app.get('*path', ...)` to fix
"Missing parameter name at index 1" error with path-to-regexp v8.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(electron): show hidden files in file open dialog

Add 'showHiddenFiles' property so .vync files in dot-prefixed
directories are visible when opening via the file chooser.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(ui): remove flex:1 from tab-scroll for left-aligned "+" button

Without flex:1, the scroll container only takes the width of its
tab contents, placing the "+" button immediately after the last tab.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* fix(plugin): use fully qualified vync:vync-translator subagent type

Update all subagent_type references from "vync-translator" to
"vync:vync-translator" to match marketplace naming convention.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: update project documentation for post-MVP status

- CLAUDE.md: add Electron bundle sync instructions
- ARCHITECTURE.md: add diff pipeline section, file discovery endpoint,
  EADDRINUSE recovery flow, code signing note
- PLAN.md: add post-MVP sections (diff pipeline, server lifecycle,
  code signing, tab bar fix)
- FUTURE.md: fix relative link path
- WRAP.md: add post-MVP phase naming convention
- Add tab-add-button fix plan document

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat: file association UX (UTI + vync open .) (#12)

* feat(desktop): register UTI for .vync file type

Add UTExportedTypeDeclarations (com.vync.canvas) to electron-builder
config so macOS properly recognizes .vync as a known file type. This
ensures double-click file association works reliably after DMG install.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* feat(cli): add vync open . for directory discovery

vync open without args or with "." now discovers .vync files in the
current directory (CWD + CWD/.vync/, 1 level deep, ignoring
node_modules/.git). Single file opens directly; multiple files show
a numbered selection prompt with "a" for all.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* docs: add file association UX roadmap (P2/P3) to FUTURE.md

Document deferred items: first-run dialog for default app setup (P2)
and custom .vync file icon (P3).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>

* docs: archive completed plans and add document package proposal

- Move completed plan docs to docs/archive/ (server-lifecycle, diff-pipeline)
- Add document package transition plan (docs/plans/2026-03-12)
- Update FUTURE.md with document package section (§6, 미결정)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant