Commit graph

164 commits

Author SHA1 Message Date
delibae
8e50b9dcd4 docs: add Korean README and link all language versions
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 15:49:37 +09:00
delibae
95b168804d docs: add feature screenshots from landing demo to README
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 14:57:08 +09:00
delibae
baab8525fa style: replace plain-text download links with shields.io badge buttons
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 14:36:08 +09:00
delibae
b5b7fa8d05 fix: correct download URLs in README to match actual release assets
- Add version prefix (1.0.0) to asset filenames
- Change Windows installer from .msi to .exe for general users

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 00:52:28 +09:00
delibae
03bec2ac2b fix: resolve Dependabot security alerts for undici, flatted, and hono
Add pnpm overrides to bump transitive dependencies to patched versions:
- undici >=7.24.0 (fixes CVEs for WebSocket, CRLF injection, request smuggling)
- flatted >=3.4.0 (fixes unbounded recursion DoS)
- hono >=4.12.7 (fixes prototype pollution via __proto__)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 00:07:07 +09:00
delibae
9778df2c3f feat: add Chinese localization for README and enhance content structure 2026-03-14 22:25:29 +09:00
delibae
533499ab8b docs: update README, add demo screenshot, remove outdated overview
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 21:40:58 +09:00
delibae
6cafe39baf fix: standardize default file name to main.tex across the application 2026-03-14 21:12:23 +09:00
delibae
1068869a45 feat: enhance editor CLI resolution on macOS and improve file creation logic 2026-03-14 18:36:13 +09:00
delibae
653c4994f9 fix: use pkg-config instead of vcpkg for tectonic dependencies on Linux
vcpkg root was not available, causing build failures for freetype2,
graphite2, and ICU. System pkg-config resolves these reliably.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 17:43:06 +09:00
delibae
7daeb97486 Remove TypeScript build info file and add Linux build script for ClaudePrism 2026-03-14 17:33:33 +09:00
delibae
f594addbe1 ci: Windows-only GitHub Actions, macOS/Linux built locally
- Simplify build-desktop.yml to Windows only (with vcpkg cache)
- Add scripts/build-macos.sh for local macOS builds with signing/notarization
- Remove Travis CI (macOS unsupported, Windows too slow)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 16:50:08 +09:00
delibae
c634fb38b1 fix: use GitHub API for auto-generated release notes
gh release edit doesn't support --generate-notes flag,
use repos/{owner}/{repo}/releases/generate-notes API instead.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-14 02:41:04 +09:00
delibae
95ae9b49a7 fix: update pnpm-lock.yaml after covector removal
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 02:07:27 +09:00
delibae
c8f7741d80 chore: remove covector, simplify release to manual tag-based flow
- Remove covector and .changes/ directory
- Remove covector workflow, keep only build-desktop.yml
- Replace custom changelog with GitHub auto-generated release notes
- Move Homebrew cask management to delibae/homebrew-claude-prism tap repo
- Remove in-repo homebrew/ directory
- Bump version to 1.0.0

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-14 02:00:38 +09:00
Hanjin Bae
0542bc1b53
Merge pull request #25 from delibae/fix/large-file-guard-copilot-review
fix: address Copilot review on PR #24 — update comments and add binary extension tests
2026-03-12 15:10:58 +09:00
delibae
792b6dc58f fix: address Copilot review — update comments and add binary extension tests
- Update IGNORED_EXTENSIONS comment from "LaTeX build artifacts" to reflect
  that it now includes general non-editable/binary files
- Update getFileType comment to match the broader scope of ignored extensions
- Add test coverage for representative binary extensions (.docx, .xlsx, .hwp,
  .accdb, .zip, .exe, .mp3, .mp4, .psd, .sqlite, .dll, .pptx)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 15:08:42 +09:00
GunwoongP
13f32a2437 fix: exclude binary file types from project file tree
Add 40+ binary extensions (.hwp, .docx, .xlsx, .accdb, .zip, .exe,
media files, etc.) to IGNORED_EXTENSIONS so they are filtered out
during directory scanning. These files cannot be meaningfully edited
in the text editor and would only cause unnecessary I/O and memory
usage when present in a project folder.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 14:45:46 +09:00
Hanjin Bae
ce30fcbede
Merge pull request #23 from vv137/fix/pdf-white-screen-and-compile-queue 2026-03-12 11:31:17 +09:00
Minsoo Kim
dc306eaebe fix: resolve merge conflicts, prevent recompile recursion, and improve test isolation
- Resolve git merge conflict markers in latex-editor.tsx compileRef
- Use setTimeout for pending recompile to prevent unbounded call stack recursion
- Add clearPdfBytesCache() in test beforeEach for proper test isolation
- Use existing `state` variable instead of redundant getState() calls
- Log when strip_nul actually strips nul bytes for diagnostics

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-12 11:14:06 +09:00
Minsoo Kim
2459067e77 fix: resolve PDF white-screen crash, nul-byte spawn error, and dropped recompiles
Three interconnected issues caused degraded UX:

1. **White-screen crash**: Large PDF `Uint8Array` buffers (often 5-20MB) stored
   directly in Zustand state caused React to diff them on every render. This
   triggered excessive memory pressure and eventual WebView white-screen crashes,
   especially with multi-root projects keeping a `pdfCache` Map in state.

2. **"nul byte found in provided data" spawn error**: Clipboard artifacts or
   encoding issues could introduce interior nul bytes into Claude CLI arguments,
   causing `Command::spawn()` to fail on macOS/Linux (which use C strings
   internally).

3. **Silently dropped recompiles**: When a compile was requested while another
   was already running (`isCompiling === true`), the request was silently
   discarded. This meant edits made during compilation never triggered a
   follow-up compile.

- Replaced `pdfData: Uint8Array | null` and `pdfCache: Map<string, Uint8Array>`
  in Zustand with an external module-level `_pdfBytesCache` Map.
- Added a `pdfRevision` counter in state that increments whenever PDF bytes
  change, triggering React re-renders without diffing the actual buffer.
- Exposed `getPdfBytes()`, `getCurrentPdfBytes()`, `hasPdfData()`, and
  `clearPdfBytesCache()` as direct accessors for components.
- Added `migratePdfBytesKey()` helper to deduplicate cache re-keying logic
  used by `renameFile` and `moveFile`.
- Conditional `pdfRevision` bumping in `setActiveFile` — only bumps when the
  PDF root actually changes, avoiding unnecessary re-renders on tab switches
  within the same root.
- `setPdfData(null)` no longer copies `compileErrorCache`/`lastCompiledGenerations`
  Maps since it doesn't need to modify them.

- Added `strip_nul()` using `Cow<str>` for zero-allocation fast path when no
  nul bytes are present (the common case).
- Applied to program, args, cwd, and inherited PATH in `create_command()`.
- Added structured error logging on spawn failure with tab ID for debugging.

- Added `pendingRecompile` boolean to document store.
- When `isCompiling` is true and a compile is requested, sets
  `pendingRecompile = true` instead of silently returning.
- After compilation finishes (in `finally` block), checks `pendingRecompile`
  and triggers a follow-up compile if queued.
- Applied consistently in latex-editor, pdf-preview, and use-claude-events.

- Added `js_log` IPC command for frontend → stderr logging that survives
  white-screen crashes.
- Added PDF size logging in `compile_latex` for monitoring.

- Updated test state shape (`pdfRevision` instead of `pdfData`, added
  `pendingRecompile`).
- Fixed `setActiveFile` test: cursor position is preserved (editor manages
  per-file cursor cache), not reset to 0.
- Updated `setPdfData` test to use `getCurrentPdfBytes()` accessor.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 02:53:24 +09:00
Hanjin Bae
8776dff4b9
Merge pull request #22 from delibae/fix/missing-tex-file-error-handling
Fix/missing tex file error handling
2026-03-11 01:42:10 +09:00
delibae
4b07d7443b fix: address Copilot review — optimize stat calls and support large image preview
Only call stat() for image/other file types during project scan to avoid
unnecessary I/O overhead on tex/bib/style/pdf files. Use convertFileSrc
(asset URL) as fallback in ImagePreview when dataUrl is not available,
so large images are viewable without loading them entirely into memory.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 01:31:46 +09:00
Hanjin Bae
4a95160984
Update apps/desktop/src/components/workspace/editor/latex-editor.tsx
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-03-11 01:20:41 +09:00
Hanjin Bae
e37afc5a2a
Update apps/desktop/src/lib/latex-compiler.ts
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
2026-03-11 01:20:10 +09:00
GunwoongP
c0c7b23ebc fix: resolve Windows Claude CLI .cmd wrapper to node for reliable spawning
On Windows, claude.cmd is an npm wrapper that breaks when arguments
contain special characters (quotes, &, |, etc.) because cmd.exe
interprets them. Instead, resolve the .cmd to the underlying
node_modules/@anthropic-ai/claude-code/cli.js and invoke node directly.
This fixes "batch file arguments are invalid" errors on Windows.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 00:54:54 +09:00
GunwoongP
8340d9e29d feat: lazy-load large files to prevent editor slowdown
Skip auto-loading files > 1 MB during project open. Large non-essential
files (e.g., .jsonl training data) show a VS Code-style "Open Anyway"
prompt instead of being read into memory immediately.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-11 00:54:54 +09:00
Gunwoong Park
7f16944725
Merge branch 'delibae:main' into fix/missing-tex-file-error-handling 2026-03-10 23:47:44 +09:00
GunwoongP
dcb20b779e fix: handle missing .tex file gracefully instead of hardcoded fallback
resolveCompileTarget now returns null when no .tex file exists in the
project, instead of falling back to a hardcoded "document.tex" path.
All 4 call sites (editor, pdf-preview, claude-events) check for null
and show a descriptive error. Rust backend also validates file existence
before attempting Tectonic compilation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 23:12:22 +09:00
delibae
56c0cec531 chore: bump version to 0.5.4 and enhance error handling across multiple modules 2026-03-10 23:11:19 +09:00
Hanjin Bae
a5e102040e
Merge pull request #20 from vv137/feat/pdf-page-nav-and-sidebar-improvements
feat: PDF page navigation, folder deletion, and dirty file indicator
2026-03-10 22:24:05 +09:00
Minsoo Kim
0d59255edb feat: add PDF page navigation, folder deletion, and dirty file indicator
- Add Page Up/Down buttons and editable page indicator to PDF preview toolbar
- Track current visible page via scroll with rAF throttling
- Implement proper recursive folder deletion in sidebar and document store
- Replace text asterisk with blue dot indicator for modified files in sidebar
- Extract shared scrollToPage helper to deduplicate scroll math in pdf-viewer

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 22:08:58 +09:00
delibae
4803561aa2 feat: embed Zotero credentials at compile time and bump to v0.5.4
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 22:05:46 +09:00
Hanjin Bae
6782ec5fa1
Merge pull request #19 from delibae/covector/version-bump
chore: version bump
2026-03-10 22:00:06 +09:00
delibae
5111dff588 feat: enhance Zotero credential handling with dotenvy support 2026-03-10 21:59:51 +09:00
delibae
bb80c99271 fix: trigger build workflow via workflow_dispatch after covector publish
GITHUB_TOKEN tag pushes don't trigger other workflows (GitHub limitation).
Use gh workflow run to explicitly trigger Build Desktop after creating the
unified v* tag.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:36:56 +09:00
delibae
fb3914585e feat: create unified v* tag after covector publish to trigger build workflow
Covector creates per-package tags (e.g. claude-prism-desktop-v0.5.3) which
don't match the build workflow's v* trigger pattern. This adds a step to
create a unified vX.Y.Z tag after publish, bridging covector and the build.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:34:31 +09:00
delibae
24636e8eab chore: version bump 2026-03-10 12:28:58 +00:00
Hanjin Bae
6de68b869e
Merge pull request #18 from delibae/covector/version-bump
chore: version bump
2026-03-10 21:28:40 +09:00
Hanjin Bae
98e53208b3
Merge pull request #17 from vv137/chore/gitignore-lockfile
chore: add package-lock.json to .gitignore
2026-03-10 21:28:24 +09:00
delibae
e033c36678 chore: version bump 2026-03-10 12:27:44 +00:00
delibae
da6214cc7d fix: enable covector publish with no-op commands for tag/release creation 2026-03-10 21:27:10 +09:00
Minsoo Kim
e181958276 chore: add package-lock.json to .gitignore
Project uses pnpm, so npm's lock file is a stray artifact.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:26:41 +09:00
Hanjin Bae
2cc4e2b3f9
Merge pull request #14 from delibae/covector/version-bump
chore: version bump
2026-03-10 21:24:43 +09:00
Hanjin Bae
cbecd38570
Merge pull request #15 from vv137/feat/pdf-loading-perf
feat: optimize PDF loading and file switch UX
2026-03-10 21:24:33 +09:00
delibae
9a9fffc25a chore: version bump 2026-03-10 12:22:43 +00:00
delibae
1be93229da fix: fix postversion script newline and repair tauri.conf.json 2026-03-10 21:22:13 +09:00
Minsoo Kim
3cea905569 refactor: replace custom ErrorBoundary with react-error-boundary
Remove duplicated error-boundary.tsx in favor of upstream's
react-error-boundary library already in package.json.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:21:51 +09:00
Minsoo Kim
2e083a3a19 feat: keep-alive PDF viewers and per-file state preservation on switch
Keep PdfViewer instances mounted (visibility:hidden) instead of
unmounting on file switch, so canvas/scroll state is preserved
instantly. Also cache editor cursor+scroll and PDF zoom per file.

- Keep-alive up to 5 PdfViewer instances with LRU eviction
- Save/restore scrollTop via isActive prop on visibility toggle
- Per-file editor cursor + scroll cache (editorStateCache)
- Per-root PDF zoom + fitMode cache (zoomCache)
- Gate IntersectionObserver on isActive to avoid work for hidden viewers
- Extract scrollToPageEl helper to deduplicate scroll-retry logic
- Deduplicate getOrOpenDocument to reuse getCachedDocument
- Clear all caches on project close

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:20:19 +09:00
Minsoo Kim
2a315f5bf7 fix: address review findings and fix structured clone error
- Fix non-reactive getState() in render path → use activeFile?.id
- Replace linear cache scan with cache.get() O(1) lookup
- Remove redundant fingerprint field from CachedDoc
- Parallelize clearDocCache() with Promise.all
- Revert buffer.slice() optimization — always copy to avoid structured
  clone errors from non-transferable Tauri buffers and prevent pdfCache
  corruption from ArrayBuffer detachment
- Add clearScrollPositionCache() on project close to prevent memory leak

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-10 21:20:19 +09:00