- Implemented image cropping feature in ImagePreview component with interactive selection and resizing handles.
- Added crop mode toggle in EditorToolbar for image files.
- Enhanced PDF rendering by fetching all page sizes in one call instead of individually.
- Optimized image rendering using createImageBitmap to improve performance.
- Introduced content generation tracking in document store to prevent unnecessary recompiles.
- Updated various components to support new cropping functionality and improved user experience.
${{ env.VCPKG_INSTALLATION_ROOT }} may not resolve in 'with' context.
Set path explicitly via GITHUB_ENV in a shell step first.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add covector config and CI workflow for automated versioning
- Bump all package versions to 0.4.0
- Add .changes/ directory with README for change management
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Implemented UvSetupDialog component for managing Python virtual environments.
- Added state management for uv installation status using zustand.
- Integrated event listeners for installation completion and status checking.
- Enhanced ImagePreview component with pinch-to-zoom and keyboard shortcuts for scaling.
- Updated LatexEditor to reset image scale when switching files.
- Created EnvironmentSection in Sidebar for displaying Python and skills status.
- Added scientific report template to template registry.
- Refactored PDF loading to improve performance and user experience.
- Added ChatTabBar component for managing multiple chat tabs.
- Integrated tab switching functionality with keyboard shortcuts (Ctrl+Tab, Ctrl+T, Ctrl+W).
- Enhanced ChatComposer to save and restore drafts based on active tab.
- Updated ClaudeChatDrawer to include ChatTabBar and manage streaming state across tabs.
- Refactored useClaudeEvents to handle events per tab, allowing concurrent streaming.
- Modified ClaudeChatStore to support tab-specific state management, including creating, closing, and switching tabs.
The previous key was based on hashFiles('build-desktop.yml'), which
invalidated the cache on every workflow change. Use a static key with
package names and a version suffix (bump v1→v2 when deps change).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Set CXXFLAGS=/std:c++17 on Windows CI (ICU 78+ requires C++17 features
like nested-namespace-definition and auto in non-type template params)
- Add Vitest tests validating tauri.conf.json CSP configuration to prevent
regressions (dangerousDisableAssetCspModification, style-src, connect-src,
font-src directives)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Use external-harfbuzz globally (vendored harfbuzz build.rs has a
header copy bug on Windows)
- Install harfbuzz[graphite2] via vcpkg on Windows instead of
standalone graphite2
- Clear CXXFLAGS/CFLAGS on Windows to prevent macOS-specific
.cargo/config.toml values from leaking
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Set up Vitest with jsdom environment and Tauri mocks for frontend testing.
Add 44 frontend tests covering Zustand stores (claude-chat, project, proposed-changes,
template) and lib utilities (template-registry, file type classification).
Add 48 Rust unit tests across zotero (OAuth helpers), slash_commands (markdown parsing),
latex (error extraction, SyncTeX parsing), and claude (session dir encoding, message
title cleaning). Update README with test commands.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add vcpkg setup for Windows to provide graphite2, freetype, ICU,
fontconfig (tectonic_bridge_graphite2 has no vendoring support)
- Use --no-sign flag on macOS when Apple certificate is not available
(Tauri's var_os treats empty string as Some, triggering codesign)
- Cache vcpkg packages for faster subsequent builds
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use platform-specific tectonic features so Windows CI builds with
bundled HarfBuzz/Graphite2 instead of requiring pkg-config.
Rewrite README with updated feature list and install instructions.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
GitHub Actions no longer supports macos-13 Intel runners.
macOS Intel users can run the arm64 build via Rosetta 2.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
macos-14 is Apple Silicon and cannot cross-compile x86_64 with
pkg-config. Use macos-13 which is an Intel runner.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Signing step now uses continue-on-error so invalid or missing
certificates produce a warning instead of failing the build.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Skip Apple code signing with warning when secrets are not set
- Categorize changelog by feat/fix/chore
- Add download table with per-OS install instructions
- Add contributor avatars to release notes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
fix: enhance slash command picker with loading state and tab filtering
fix: improve PDF preview button styling and functionality
fix: update PDF viewer layout for better responsiveness
fix: handle user cancellation in Claude event processing
chore: add cancelledByUser state to Claude chat store
docs: update README with installation instructions for macOS
- Added Tectonic as a dependency for LaTeX compilation in Cargo.toml.
- Created Entitlements.plist for macOS app sandboxing and security permissions.
- Refactored latex.rs to utilize Tectonic for PDF generation, removing legacy compilation logic.
- Updated compile_latex function to handle Tectonic's processing and error handling.
- Enhanced synctex editing functionality to read and parse synctex data correctly.
- Modified project-wizard and template-preview components to improve project creation prompts.
- Adjusted tauri.conf.json to include entitlements for macOS and set minimum system version.
- Cleaned up unused code and improved overall code readability and maintainability.
Enables "Open Anyway" in System Settings instead of "damaged" error.
Uses APPLE_SIGNING_IDENTITY="-" for ad-hoc signing (no Apple Developer account needed).
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add bundle.active=true (defaults to false, causing no artifacts)
- Revert tauri-action to @v0 as recommended by official Tauri docs
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Remove OpenSSL dependency by disabling git2 default features (only local ops needed)
- Remove non-existent hidden_title() call from WebviewWindowBuilder
- Upgrade tauri-action v0 → v1 for artifact detection fixes
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Removed onSelectTemplate prop from TemplateGallery, simplifying its interface.
- Updated TemplatePreview to handle template selection and project creation internally.
- Enhanced TemplatePreview with a new details step for project creation, including purpose input and file attachments.
- Implemented drag-and-drop functionality for adding reference files.
- Added project folder selection and dynamic project name generation.
- Improved modal layout and responsiveness based on the current step.
- Implement slash command system with Rust backend (YAML frontmatter parsing)
and React picker UI for project/user-scoped commands
- Add model selector (Sonnet/Opus/Haiku/OpusPlan) and effort level control
(Low/Medium/High) to chat composer
- Extract common Claude CLI args and add configurable effort level support
- Add per-project compilation locks to prevent concurrent LaTeX builds
- Fix empty document compilation with \AtEndDocument{\null} injection
- Improve chat UX with smooth auto-scroll and updated placeholder
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Simplified environment variable handling in `create_command` to prevent nested session detection.
- Improved logging in `spawn_claude_process` for better debugging of stdout and stderr streams.
- Updated `execute_claude_code`, `continue_claude_code`, and `resume_claude_code` to accept optional model parameters.
- Introduced a new `ThinkingWidget` to display thinking status in chat messages.
- Enhanced `ChatMessages` component to manage auto-scrolling behavior and display streaming indicators.
- Updated `useClaudeEvents` to maintain session-specific state and improve message handling.
- Added keyboard shortcut for toggling capture mode (Cmd+X / Ctrl+X).
- Modified `ContentBlock` interface to include new "thinking" message type.
- Improved error handling and logging throughout the Claude chat store.
Refactor the project wizard's inline template grid into a full-featured
template gallery system with search, category filtering, and rich previews.
Template data architecture (template-registry.ts):
- Define TemplateDefinition schema with categories, subcategories, tags,
packages, accent colors, and bibliography flag
- Expand from 8 to 12 templates: add IEEE, ACM, Technical Report, Newsletter
- Provide registry API: getAllTemplates, getTemplateById, searchTemplates,
getTemplatesByCategory
Template gallery UI (components/template-gallery/):
- template-gallery.tsx: main layout with search bar (Cmd+K), category
sidebar, responsive grid, grouped-by-category default view, empty state
- template-card.tsx: cards with 9 CSS-based document thumbnail layouts
(paper, slides, poster, CV, letter, book, report, newsletter, blank)
and hover preview button
- category-sidebar.tsx: category navigation with per-category template counts
- template-preview.tsx: dialog showing LaTeX source, package list, tags,
document class metadata, and "Use Template" CTA
State management (template-store.ts):
- Zustand store for gallery state: search query, category filter, template
selection, and preview modal state with computed filtered results
Project wizard refactor (project-wizard.tsx):
- Replace inline TemplateGrid and hardcoded template array with the new
TemplateGallery component
- Use template.hasBibliography flag instead of hardcoded ID check for
references.bib generation
- Fix overflow handling for step 2 scrollable content