Commit graph

338 commits

Author SHA1 Message Date
delibae
1058c40733 fix: set PKG_CONFIG_PATH for macOS CI brew dependencies
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 13:33:32 +09:00
Hanjin Bae
47f95b67f2
Merge pull request #48 from delibae/fix/ci-signing-key
fix: CI signing key password and macOS tectonic backend
2026-03-16 13:28:02 +09:00
delibae
634af53ac2 fix: macOS use pkg-config for tectonic deps, set empty signing key password
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 13:27:38 +09:00
Hanjin Bae
12faf8f8c1
Merge pull request #47 from delibae/feat/auto-updater
feat: auto-updater and macOS black screen fix (v1.0.1)
2026-03-16 13:17:03 +09:00
delibae
08e54f263d feat: add auto-updater and fix macOS black screen on focus loss (v1.0.1)
- Add tauri-plugin-updater with signed update artifacts
- Add backgroundThrottling: disabled to prevent WKWebView black screen
- Add update check UI with toast notifications (sonner)
- Update build scripts to generate latest.json for GitHub Releases
- Add multi-platform CI workflow (macOS/Linux/Windows) with draft releases
- Bump version to 1.0.1

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 13:16:39 +09:00
Hanjin Bae
9fd32ffbc7
docs: correct privacy claims in READMEs (closes #43) (#46)
- Remove "your files stay on your machine" unqualified claim
- Intro: "local-first alternative" with explicit API transmission caveat
- Section "Your Research, Your Machine" → "Data & Privacy"
- Bold disclaimer: prompts + file contents sent to Anthropic API
- Remove (cloud)/(local CLI) from AI Model row
- Remove "private" from tagline
- Update landing submodule with matching fixes
- Sync all languages (en, ko, ja, zh-CN)

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 12:21:59 +09:00
Hanjin Bae
94cb8414a0
docs: correct privacy claims in READMEs (closes #43) (#44)
- Remove "Nothing leaves your machine" and "No such mechanism" claims
- Remove Data Privacy row from comparison table (covered in dedicated section)
- Simplify OpenAI Prism description (no FUD, just facts)
- Add note clarifying both tools send data to cloud APIs for inference
- Sync all language versions (en, ko, ja, zh-CN)

Closes #43

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 11:18:32 +09:00
Hanjin Bae
a3a2282dd6
fix: adjust titlebar height for Windows overlay mode (#42)
Reduce from 32px to 12px — 32px was too much padding, pushing content
too far from the top edge.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 03:46:40 +09:00
Hanjin Bae
32397bb611
fix: show folder name only in sidebar on Windows (#41)
projectRoot.split("/") didn't handle Windows backslash paths, causing
the full path (C:\Users\...\project) to display in the sidebar header.
Now splits on both / and \ so only the folder name is shown.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 03:37:19 +09:00
Hanjin Bae
d32c732c36
fix: Windows titlebar, installer fixes, and responsive PDF toolbar (#40)
Changes missed from PR #37 squash merge:
- Set --titlebar-height to 32px on Windows (was 0px, content hidden
  behind native overlay titlebar)
- Add ExecutionPolicy Bypass to PowerShell installers (uv + Claude Code)
- Add ~/.local/bin/uv.exe to Windows uv binary search paths
- PDF toolbar: Export/History as icon-only buttons, Capture & Ask text
  hidden on narrow panels via container query

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 03:16:02 +09:00
Hanjin Bae
0b6fd62d0a
fix: move macOS icon setup to RunEvent::Ready to prevent SIGBUS (#38) (#39)
Setting the dock icon in setup() caused SIGBUS on first launch from
signed release binaries due to Gatekeeper App Translocation interfering
with ImageIO plugin initialization.

Moved set_macos_app_icon() to RunEvent::Ready, which fires after the
app is fully initialized — matching Tauri's own approach for dev icons.

Closes #38

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 03:12:30 +09:00
Hanjin Bae
ebcb190d7a
fix: detect missing Git for Windows and guide users to install it (#37)
Windows users without Git for Windows see "Install Claude Code" loop
because Claude Code requires git-bash but the app never checks for it.
Now check_claude_status reports missing_git on Windows, and the setup UI
shows a dedicated "Git for Windows Required" screen with a download link
and re-check button.

Also adds Windows-essential env vars to uv installer and improves the
CI workflow to support manual release_tag input.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 00:27:15 +09:00
Hanjin Bae
3322f3c600
ci: preserve existing release assets when uploading Windows build (#36)
Replace tauri-action's built-in release management with gh CLI to
avoid overwriting macOS/Linux assets. The workflow now creates a
release only if one doesn't exist, and uploads Windows binaries
with --clobber to update only the Windows assets.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 22:15:28 +09:00
Hanjin Bae
458b966c36
Merge pull request #34 from delibae/fix/windows-process-spawn
fix: resolve Windows process spawn and CLI detection issues
2026-03-15 21:56:30 +09:00
Hanjin Bae
0404f3adc7
Merge pull request #33 from delibae/docs/improve-japanese-readme
docs: improve Japanese README translation quality
2026-03-15 21:55:52 +09:00
delibae
4f07dcfcec fix: resolve Windows process spawn and CLI detection issues
- Add CREATE_NO_WINDOW flag to all child process spawns on Windows to
  prevent blank console windows from flashing (claude.rs: 4 sites,
  uv.rs: 5 sites)
- Fix claude.exe detection: native installer path check now uses .exe
  extension on Windows (~/.local/bin/claude.exe)
- Fix PATH separator in install_claude_cli: use ";" on Windows instead
  of hardcoded ":"
- Add strip_ansi() to filter terminal escape sequences ([?2026h] etc.)
  from install/login output streamed to the frontend UI
- Fix slash_commands.rs path splitting to handle Windows backslashes

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 21:55:37 +09:00
Minsoo Kim
8156417370 docs: improve Japanese README translation quality and consistency
Refine wording throughout README.ja.md for more natural, idiomatic Japanese.
Standardize formatting conventions (fullwidth → halfwidth ampersands,
consistent punctuation, terminology alignment with English README).
2026-03-15 17:00:03 +09:00
Hanjin Bae
677923d4cd
Merge pull request #32 from delibae/docs/add-japanese-readme
docs: add Japanese README and update language link order
2026-03-15 16:15:11 +09:00
delibae
d625e74ee6 docs: add Japanese README and update language links order
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-15 16:13:49 +09:00
Hanjin Bae
492a124993
Merge pull request #31 from delibae/fix/readme-download-links
docs: improve README with download badges, screenshots, and Korean translation
2026-03-15 15:56:56 +09:00
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
Hanjin Bae
2638ead954
Merge pull request #30 from delibae/fix/readme-download-links
docs: improve README with download badges and feature screenshots
2026-03-15 15:00:48 +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
Hanjin Bae
c87dd53040
Merge pull request #29 from delibae/fix/readme-download-links
fix: improve README download links with badge buttons
2026-03-15 14:36:39 +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
Hanjin Bae
d39a12c7a1
Merge pull request #28 from delibae/fix/readme-download-links
fix: correct download URLs in README
2026-03-15 00:53:37 +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
Hanjin Bae
8cb23ec6b2
Merge pull request #27 from delibae/fix/dependabot-security-alerts
fix: resolve Dependabot security alerts
2026-03-15 00:09:15 +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