- 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>
- 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>
- 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>
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>
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>
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>
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>
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>
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>
- 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>
Refine wording throughout README.ja.md for more natural, idiomatic Japanese.
Standardize formatting conventions (fullwidth → halfwidth ampersands,
consistent punctuation, terminology alignment with English README).
- 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>
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>
- 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>
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>
- 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>
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>
- 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>
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>
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>
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>