| Age | Commit message (Collapse) | Author |
|
On launch the home page checks the latest GitHub release; when a newer
version exists a bottom-right card offers Download (streams the right
installer for the platform into ~/Downloads and opens it), Later, or
Skip this version (remembered). Unsigned app rules out silent
auto-update on macOS, so installation stays a manual replace.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
|
The project list is now a persistent home tab; each opened project runs
in its own WebContentsView tab below a 38px tab strip (hidden when only
home is open). Background tabs stay fully live (sync, collab, terminals).
Main process: per-project singletons (socket, sync bridge, compilation
manager, MCP state, compile watcher) become per-tab ProjectSession
objects keyed by webContents.id; PTYs are scoped per webContents.
Hardened against races found in review: concurrent ot:connect dedupe,
teardown/reopen serialization on the shared sync dir, destroyed-window
guards on all bridge sends, real logout that closes project tabs.
Renderer: tabs strip in the home renderer (wt-* classes, distinct from
the editor's .tab-bar file tabs), project tabs boot from ?projectId= and
connect straight into the editor; Back closes the tab.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
|
Workspace browser:
- The left panel gains a Project/Workspace toggle; the Workspace view
browses the agent scratch space (claude-workspace/, never synced)
- Open/edit workspace text files in the editor with debounced auto-save
(flushed on tab switch); binaries open with the system default app
- Import to Project copies a workspace file/folder into the project root
where the sync bridge picks it up and creates it on Overleaf
(collision-safe: falls back to a -imported suffix)
- New file/folder, rename, delete, reveal in Finder, drag-drop into the
workspace, 5s auto-refresh while visible
OpenAlex search (MCP):
- New search_openalex tool: broad OpenAlex coverage with an explicit
citation-authority policy — BibTeX is cross-checked against Semantic
Scholar (by DOI, then by exact title, since OpenAlex DOIs can point at
mirrors); entries not found on S2 are flagged "OpenAlex only" with
instructions to verify via web search before citing
- Tool description, agent guide, permission allowlist, and README updated
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
|
Uses the Overleaf open-source code as golden reference throughout.
Project dashboard (official /tag + /project endpoints):
- Sidebar filters (all/yours/shared/archived/trashed) with the web
client's exact filtering predicates
- Tags: create/edit/delete with the official preset palette, per-row
chips, bulk add/remove, uncategorized view
- Archive/trash/restore/delete-forever/leave, rename, copy, zip download,
multi-select bulk actions (parallelized)
Editor:
- Remote cursors rewritten as a layer() overlay ported from Overleaf's
cursor-highlights — no more inline widgets disturbing line wrapping,
cursor motion, or IME composition
- Autocomplete ported from Overleaf's completion system: official
top-hundred snippet data, environment templates, package/class/bib
style data (verbatim, AGPL), project-wide \ref and \cite completion,
package commands via the official /project/:id/metadata endpoint,
brace-aware apply behavior, official keymap precedence
- Fixed completion popup keybindings (Enter/arrows previously fell
through to the default keymap) and dead Enter/Backspace handlers in
latexClosing
File sync reliability:
- Two-tier compile-artifact detection: pure build noise is ignored,
while pdf/docx/gz/bbl sync unless there is concrete local-compile
evidence — agent-generated figure PDFs now sync (previously all PDFs
were blanket-ignored)
- Local compile outputs are registered with the bridge so nested-root
projects don't upload the root PDF as junk
- Upload retry with exponential backoff and permanent-failure parking,
CSRF refresh with session validation and single-flight guard,
periodic orphan rescan, sync status surfaced in the status bar
- Official textExtensions list (plus legacy extras) for doc-vs-file
classification
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
|
|
|
- Settings modal on project list page for OpenAI, Anthropic, OpenRouter, Gemini, Semantic Scholar keys
- Keys stored in userData/api-keys.json, masked by default with show/hide toggle
- S2 API key passed to MCP server via .lattex-mcp.json to avoid rate limits
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Fix .bib (and other non-active tab) edits disappearing: call otLeaveDoc
on tab switch so bridge takes back OT ownership; release .bib pre-loads
immediately after reading content for citation autocomplete
- Always update lastKnownContent in processDocChange for editor docs to
prevent stale state accumulation
- Flush pending OT ops in OverleafDocSync.destroy() before tab switch
- Add three-way merge in replaceContent to preserve concurrent remote edits
- Wire MCP compile to UI: file-based signal between MCP server and Electron
main process, with compile animation and PDF refresh in renderer
- Add CLSI flush before compile to prevent stale cached results
- Add OT error recovery: re-join doc and re-apply disk changes on otUpdateError
- Add bridge reconnect handling: reset OtClient on docRejoined for non-editor docs
- Add compile concurrency lock to prevent duplicate compiles
- removeEditorDoc compares disk vs server content to catch in-flight ops
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- In-file search: Cmd+F opens CodeMirror search panel with themed styling
- Multi-file search: Cmd+Shift+F or toolbar button opens project-wide search
- PDF text search: Cmd+F on PDF or search button to find text in PDF
- SyncTeX forward search: Cmd+Enter jumps from editor cursor to PDF position
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Exclude CLAUDE.md from sync (move to .claude/ dotfile dir, clean up root copy)
- Add Ctrl+wheel font zoom for editor (capture phase, disable Electron built-in zoom)
- Load cached PDF on project connect (avoid recompile to see last PDF)
- Add synctex debug logging for PDF↔source navigation troubleshooting
- Fix .claude/ dir creation order (mkdir before write)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Overleaf
The root cause of server compile failures was that output.pdf was being
saved into the synced project directory, causing FileSyncBridge to upload
it back to Overleaf as a project file. CLSI then failed because it found
an existing output.pdf blocking its compilation output.
Changes:
- Save compile artifacts (PDF, synctex.gz) to .build/ subdirectory instead
of the synced project root — .build is a dotfile dir ignored by chokidar
- Add pdf/pdfxref/stderr/stdout/chktex to FileSyncBridge ignore patterns
- Add rootResourcePath to compile request body (matches Overleaf web client)
- Implement PDF download with fallback via direct build ID URL construction
- Add server compile handler, compile dropdown menu, PDF save button
- Fix resolved comment highlight flash on startup (null initial state)
- Fix EPIPE crash on startup when stdout/stderr is closed
- Fix synctex inverse search to use relative paths via OT doc join
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Fix Socket.IO v0.9 ack parser to handle acks without data (6:::N format),
fixing comment creation stuck at "sending"
- Rewrite comment sync to use local state updates from socket events
(new-comment, resolve-thread, reopen-thread, delete-thread, edit-message,
delete-message) instead of REST re-fetches — instant UI updates
- Optimistic updates for all comment actions (resolve, reopen, delete, reply, edit)
- Fetch threads + contexts on project connect so editor highlights are correct
from startup, not only when review panel is opened
- Add comment context to store immediately after creation for instant highlight
- Rename MCP server from overleaf-comments to lattex, add 6 new tools:
reopen_comment, delete_comment, get_chat_messages, send_chat_message,
list_project_files, compile_latex — all auto-granted permissions
- Refactor terminal from fixed Terminal/Claude tabs to dynamic multi-tab with
bottom tab bar and unlimited new terminal creation
- Fix chat panel layout overflow pushing other components
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Sync new local files (created by Claude Code etc.) to Overleaf via REST API
- Create intermediate folders as needed, handle both text docs and binaries
- Scan for orphaned files on startup that weren't synced previously
- Add "Copy Comments" quick action: copies unresolved comments for current file
to clipboard with line numbers, context, author names, and timestamps
- Filter comments to active file only, exclude resolved threads
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Support multiple named pty instances via ID-based IPC channels
- Terminal tab spawns a shell, Claude tab spawns `claude` CLI separately
- Fix pty race condition: old instance's onExit callback could delete
the replacement instance from the Map during React StrictMode re-mount
- Guard against StrictMode double-initialization in TerminalInstance
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
- Add file upload to Overleaf projects via multipart POST with correct
"name" text field (server reads filename from req.body.name, not from
Content-Disposition filename)
- Add drag-and-drop support in file tree panel with visual feedback
- Replace window.prompt() with custom modal for new project creation
(prompt() returns null in Electron)
- Fix API endpoints: /api/project/new → /project/new
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Collaborator cursors:
- Real-time cursor positions via clientTracking Socket.IO events
- CM6 extension renders colored cursor widgets with name labels
- Throttled cursor position broadcasting (300ms)
- Connected users count in toolbar and status bar
Project chat:
- Chat panel in right sidebar (toggleable)
- Load message history via REST API
- Send messages with real-time delivery via Socket.IO new-chat-message
- Auto-scroll, avatars, timestamps
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Implement full Overleaf integration with Socket.IO v0.9 real-time sync:
- FileSyncBridge for bidirectional temp dir ↔ Overleaf sync via chokidar + diff-match-patch
- OT state machine, transform functions, and CM6 adapter for collaborative editing
- Comment system with highlights, tooltips, and review panel
- Project list, file tree management, and socket-based compilation
- 3-layer loop prevention (write guards, content equality, debounce)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|
|
Features:
- Electron + React + TypeScript app with Cosmic Latte theme
- CodeMirror 6 editor with LaTeX syntax highlighting
- PDF preview with pdf.js, zoom controls, SyncTeX double-click jump
- File tree with context menu (new/rename/delete/reveal)
- Overleaf Git clone with token auth + macOS Keychain storage
- Git pull/push sync for Overleaf projects
- Embedded terminal (xterm.js + node-pty) with Claude CLI integration
- LaTeX compilation via latexmk with auto package install detection
- Structured compile log (errors/warnings) with click-to-navigate
- Main document setting (auto-detect or right-click to set)
- Custom modal system (input/confirm/alert)
- Resizable panel layout (file tree | editor | PDF + terminal)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
|