Commit graph

275 commits

Author SHA1 Message Date
Hanjin Bae
7e5e395e30
Merge pull request #107 from delibae/fix/multi-file-pdf-preview
fix: resolve PDF preview to correct root file in multi-file LaTeX projects
2026-03-30 12:09:23 +09:00
delibae
f69de4ef12 chore: bump version to 1.1.2
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 12:09:01 +09:00
delibae
cc4ad9d668 fix: resolve PDF preview to correct root file in multi-file LaTeX projects
resolveTexRoot now detects \documentclass to find the actual root file
instead of treating the active sub-file as the compilation target.
This fixes incorrect PDF preview when editing non-main .tex files.

Closes #106

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-30 12:08:46 +09:00
Hanjin Bae
69bcb494f4
Merge pull request #104 from L-N1988/feat/zoom-inout 2026-03-27 22:45:50 +09:00
L-N1988
593a7e2301 feat: enable zooom in/out via ctrl +/-. 2026-03-27 19:29:17 +08:00
Hanjin Bae
7c874a7139
Merge pull request #103 from delibae/chore/bump-v1.1.1
chore: bump version to 1.1.1
2026-03-27 15:54:32 +09:00
delibae
baea3e32a9 chore: bump version to 1.1.1
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 15:53:17 +09:00
Hanjin Bae
0f9755d7e1
Merge pull request #102 from delibae/fix/windows-project-creation-and-linux-segfault
fix: resolve Windows project creation failure (#101) and Linux segfault (#100)
2026-03-27 15:50:44 +09:00
delibae
37957aacb8 fix: resolve Windows project creation failure and Linux segfault
Windows (#101): Add explicit FS scopes to each permission in
default.json so Tauri's scope validator accepts Windows paths.
Remove silent .catch(() => {}) on mkdir/writeTextFile so errors
surface via toast instead of failing silently. Replace all
.split("/").pop() with .split(/[/\\]/).pop() (14 occurrences)
for correct path parsing on Windows.

Linux (#100): Add ELF linker version script (symbols.map) that
hides statically linked ICU/HarfBuzz/FreeType/Fontconfig/Graphite2
symbols from the dynamic symbol table. This prevents symbol
collisions with WebKit2GTK's own dynamic copies of these libraries,
which caused a segfault at startup. The static linking introduced
in v1.0.10 to fix #91 is preserved—ICU remains embedded in the
binary so it works across distros.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 15:50:11 +09:00
Hanjin Bae
a790fa8f30
Merge pull request #99 from cityuaaronzhu/contrib-latex-errors
Improve LaTeX error context and sync speed
2026-03-27 12:02:32 +09:00
Hanjin Bae
fd6725347b
Merge pull request #98 from Landon-Molt/feature/texlive-backend
feat: add local TeXLive as alternative LaTeX compilation backend
2026-03-27 12:02:21 +09:00
aaronzhu
5d61977df6 Improve LaTeX error context and sync speed 2026-03-27 09:51:29 +08:00
Peter-Bot
51b6d6abec feat: add local TeXLive as alternative LaTeX compilation backend
Tectonic's limited package support makes it unusable for academic work
with custom .sty/.cls files. This adds opt-in support for shelling out
to a locally installed TeXLive distribution.

Backend (latex.rs):
- compile_with_texlive(): multi-pass compilation (2-3 engine passes +
  optional bibtex/biber), with xdvipdfmx fallback for .xdv → .pdf
- find_texlive_binary(): resolves binaries via PATH, standard install
  locations, and macOS login-shell fallback for GUI apps
- detect_bib_tool(): scans .tex for biblatex/bibliography to choose
  biber vs bibtex
- texlive_env_path(): injects TeXLive bin dir into subprocess PATH so
  xelatex can find xdvipdfmx internally
- detect_texlive Tauri command: reports available engines and version
- compile_latex gains use_texlive parameter; error messages show which
  backend ran (e.g. "Compilation failed (TeXLive/xelatex)")
- All paths passed to TeX are relative to avoid tilde expansion in
  iCloud paths (com~apple~CloudDocs)

Frontend:
- New settings-store.ts with persisted compilerBackend preference
- Backend selector dropdown in PDF preview toolbar
- All compile call sites pass the setting through to the backend
- detectTexlive() and TexliveStatus for engine availability checks

Tectonic remains the default. TeXLive is opt-in via the toolbar
dropdown. All existing tests pass (152/152).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-27 00:02:38 +01:00
Hanjin Bae
0301f904bf
Merge pull request #97 from delibae/chore/bump-v1.1.0
chore: bump version to 1.1.0
2026-03-26 20:01:47 +09:00
delibae
a6ace1a8d2 chore: bump version to 1.1.0
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 20:00:50 +09:00
Hanjin Bae
3bce19d6a0
Merge pull request #96 from delibae/fix/macos12-window-not-showing
fix: resolve macOS 12 window not showing (WebKit TLA bug)
2026-03-26 19:59:18 +09:00
delibae
bdc57978ba fix: resolve macOS 12 window not showing due to WebKit top-level-await bug
On macOS 12 (Monterey), the app launches but no main window appears.
The root cause is WebKit bug #242740: Safari 15's WKWebView has a race
condition with top-level await in ES modules, causing silent JS failure
that prevents `getCurrentWindow().show()` from ever being called.

Three complementary fixes:

1. Change Vite build target from `esnext` to `safari14` (Tauri recommended)
   and add `vite-plugin-top-level-await` to transform TLA into compatible
   Promise chains, avoiding the WebKit bug entirely.

2. Replace top-level `await import("./App")` in main.tsx with a `.then()`
   chain, removing TLA dependency at the source level.

3. Add a Rust-side 8-second timeout safety net in `setup()` that
   force-shows the main window if the frontend JS fails to do so,
   preventing permanently hidden windows regardless of the failure cause.

Closes #95

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 19:57:52 +09:00
Hanjin Bae
5d0be68695
Merge pull request #93 from delibae/chore/bump-v1.0.10
chore: bump version to 1.0.10
2026-03-25 22:14:28 +09:00
delibae
2e623c217f chore: bump version to 1.0.10
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 22:14:05 +09:00
Hanjin Bae
ad9e718c31
Merge pull request #92 from delibae/fix/env-path-and-static-icu
fix: static-link ICU on Linux and augment PATH for GUI-launched processes
2026-03-25 22:12:55 +09:00
delibae
12a79b0981 fix: static-link ICU on Linux and augment PATH for GUI-launched child processes
Three related environment issues are addressed:

1. Linux ICU version mismatch (#91):
   The Linux build used pkg-config to dynamically link against the host's
   ICU (libicuuc.so.70 on Ubuntu 22.04). Users on newer distros (e.g.
   Ubuntu 25.10 with ICU 76) get "cannot open shared object" errors.
   Switch to vcpkg static linking, mirroring the macOS fix (commit 9566956).

2. MCP servers fail on macOS GUI app (#87):
   macOS GUI apps inherit a minimal PATH (/usr/bin:/bin) that lacks
   /opt/homebrew/bin, so MCP server commands like `uv` silently fail.
   Prepend common tool directories (~/.local/bin, ~/.cargo/bin,
   /opt/homebrew/bin, NVM paths, etc.) to the child process PATH in
   create_command().

3. Existing NVM-installed Claude Code ignored (#90):
   find_claude_binary() relied on `which` which fails in GUI apps without
   NVM in PATH. Add NVM_BIN env var check and login shell fallback
   (`$SHELL -l -c "which claude"`) to discover claude through the user's
   actual shell configuration.

Closes #87, closes #90, closes #91

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 22:10:19 +09:00
Hanjin Bae
b1dee623b6
Merge pull request #89 from GunwoongP/fix/windows-cli-install
fix: pass Windows environment variables during CLI install and login
2026-03-25 19:07:06 +09:00
GunwoongP
71a4035a31 fix: pass Windows environment variables during CLI install and login
- Extract shared is_essential_env_var() with case-insensitive matching
- Replace duplicated inline env var lists in install_claude_cli, login_claude, and install_uv
- Add 16 Windows-essential env vars (USERPROFILE, APPDATA, SYSTEMROOT, etc.)
- Use eq_ignore_ascii_case for PATH checks

Without these variables, PowerShell/npm cannot function correctly,
causing the "Installing CLI" step to fail on Windows.

Closes #88

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-25 15:10:55 +09:00
Hanjin Bae
ac26fc9524
Merge pull request #82 from delibae/fix/vcpkg-build-tools
fix: install autotools before vcpkg on macOS CI
2026-03-17 17:47:08 +09:00
delibae
03fcd08d34 fix: install autotools build deps before vcpkg on macOS
vcpkg ports (gperf, fontconfig) need autoconf/automake/libtool to
build from source. These are compile-time tools only — they don't
create runtime dylib dependencies.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 17:46:50 +09:00
Hanjin Bae
f9ff9bbf3f
Merge pull request #81 from delibae/fix/v1.0.9-static-macos
chore: bump version to v1.0.9
2026-03-17 17:42:02 +09:00
delibae
a772b5833c chore: bump version to 1.0.9
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 17:41:48 +09:00
Hanjin Bae
f900319d86
Merge pull request #80 from delibae/fix/static-link-macos-vcpkg
fix: static link macOS builds via vcpkg (closes #77)
2026-03-17 17:40:57 +09:00
Hanjin Bae
a477605af1
Merge pull request #78 from delibae/fix/remove-cargo-config
fix: remove .cargo/config.toml from git tracking
2026-03-17 17:40:54 +09:00
delibae
956695665f fix: switch macOS builds from Homebrew (dynamic) to vcpkg (static)
Replace `brew install icu4c harfbuzz ...` + pkg-config with vcpkg
for both Apple Silicon (arm64-osx) and Intel (x64-osx) macOS builds.

vcpkg's macOS triplets default to static linking, so the resulting
binary no longer depends on /opt/homebrew dylibs. This fixes the
crash reported in #77 where users without Homebrew get:
  Library not loaded: /opt/homebrew/*/libicuuc.78.dylib

The Windows build already used vcpkg — this makes all platforms
consistent.

Refs:
- https://tectonic-typesetting.github.io/book/latest/howto/build-tectonic/
- https://learn.microsoft.com/en-us/vcpkg/users/triplets
- https://github.com/orgs/Homebrew/discussions/4672

Closes #77

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 17:39:11 +09:00
delibae
37ca06db35 fix: remove .cargo/config.toml from git and add to .gitignore
This file hardcodes /opt/homebrew paths (Apple Silicon only) for local
development. It should not be tracked — each developer sets up their
own local paths. Added to .gitignore to prevent re-committing.

Relates to #77 (crash on start due to dynamically linked ICU).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 17:31:20 +09:00
Hanjin Bae
29d9935812
Merge pull request #76 from delibae/feat/landing-intel-mac
chore: remove landing submodule reference from parent repo
2026-03-17 04:03:22 +09:00
delibae
492ac17124 chore: remove landing submodule reference from parent repo
The apps/landing gitlink (160000) was tracked in the index without
a .gitmodules entry. Remove it so the parent repo no longer references
the landing page as a submodule.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 04:02:53 +09:00
Hanjin Bae
0eb69850e5
Merge pull request #75 from delibae/docs/readme-intel-mac
docs: add Intel Mac download link to READMEs
2026-03-17 03:51:32 +09:00
delibae
a1e01f19da docs: add Intel Mac download link to all READMEs
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 03:51:06 +09:00
Hanjin Bae
151cc1889b
Merge pull request #74 from delibae/feat/v1.0.8-intel-mac
feat: add Intel Mac build workflow, bump to v1.0.8
2026-03-17 03:19:44 +09:00
delibae
b5ced3a7fa feat: add Intel Mac build workflow, bump version to 1.0.8
Add build-macos-intel job using macos-15-intel runner with
x86_64-apple-darwin target. Includes code signing, notarization,
and updater support (darwin-x86_64 platform key in latest.json).

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 03:19:05 +09:00
Hanjin Bae
54eddc1f11
Merge pull request #73 from delibae/fix/lint-format
style: fix biome formatting
2026-03-17 02:42:14 +09:00
delibae
4bd5bf3bc8 style: fix biome formatting
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 02:42:03 +09:00
Hanjin Bae
c1e780948a
Merge pull request #72 from delibae/feat/v1.0.7-improvements
feat: v1.0.7 — subprocess tectonic, editor shortcuts, UX fixes
2026-03-17 02:40:36 +09:00
delibae
da2f76c51a chore: fix lint warnings, bump version to 1.0.7
- Remove unused imports (hasPdfData, contentGeneration, lastCompiledGenerations)
- Bump version 1.0.6 → 1.0.7

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 02:39:49 +09:00
delibae
63483a2d2c feat: subprocess tectonic, editor shortcuts, and UX improvements
- Isolate tectonic compilation in subprocess to prevent font cache
  assertion crash on retry (fixes #67)
- Fix unreachable pattern warning in lib.rs by merging duplicate
  WindowEvent::Focused match arms
- Add editor shortcuts: Cmd+B (bold), Cmd+I (italic), Cmd+/ (comment)
- Add Tab/Shift-Tab indent support in CodeMirror editor
- Fix WebKit rendering artifacts with translateZ(0) on .cm-scroller
- Force recompile on button click and Cmd+Enter (skip generation check)
- Add minimum 500ms compile spinner for visual feedback

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 02:38:56 +09:00
Hanjin Bae
11a75e0b3c
Merge pull request #71 from delibae/fix/quickstart-url
fix: update quickstart URL to include locale path
2026-03-17 01:53:26 +09:00
delibae
16d636592a fix: update quickstart URL to include locale path
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 01:53:04 +09:00
Hanjin Bae
e147711501
Merge pull request #70 from delibae/release/v1.0.6
chore: bump version to v1.0.6
2026-03-17 01:13:33 +09:00
delibae
90d351bca9 chore: bump version to 1.0.6
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 01:13:07 +09:00
Hanjin Bae
8f86109caf
Merge pull request #69 from delibae/fix/linux-appimage-compat
fix: improve Linux AppImage compatibility and login reliability
2026-03-17 01:11:35 +09:00
delibae
a10afacd6c fix: improve Linux AppImage compatibility and login reliability
- Add sanitize_appimage_env() to restore original LD_LIBRARY_PATH/PATH
  when spawning child processes from AppImage (fixes xdg-open, curl)
- Pass DISPLAY, WAYLAND_DISPLAY, XDG_*, DBUS_SESSION_BUS_ADDRESS to
  child processes for Linux desktop integration
- Add stdin(Stdio::null()) to install_claude_cli to prevent interactive
  prompt hangs
- Add 120s timeout to login_claude to prevent indefinite hang when
  browser fails to open
- Show "Setup Guide" link to code.claude.com/docs/quickstart on login
  failure
- Keep releases as draft in CI workflow for manual publish

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-17 01:11:02 +09:00
Hanjin Bae
f368a62859
Merge pull request #68 from delibae/fix/linux-download-appimage
fix: change Linux download link from .deb to .AppImage
2026-03-16 23:22:20 +09:00
delibae
8063fac03f fix: change Linux download link from .deb to .AppImage
AppImage is distribution-agnostic and works across most Linux distros,
making it a better default download option than .deb.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-16 23:21:54 +09:00