<feed xmlns='http://www.w3.org/2005/Atom'>
<title>lattex.git/src/main/index.ts, branch v0.3.4</title>
<subtitle>Unnamed repository; edit this file 'description' to name the repository.
</subtitle>
<link rel='alternate' type='text/html' href='https://git.blackhao.com/lattex.git/'/>
<entry>
<title>Add online users popover, MCP get_online_users, claude-workspace, stronger CLAUDE.md</title>
<updated>2026-03-15T23:47:29+00:00</updated>
<author>
<name>haoyuren</name>
<email>13851610112@163.com</email>
</author>
<published>2026-03-15T23:47:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.blackhao.com/lattex.git/commit/?id=a36b73505754acab6872d23c9add58dfca3cecdd'/>
<id>a36b73505754acab6872d23c9add58dfca3cecdd</id>
<content type='text'>
- Online users: click "N online" badge to see user names with cursor colors
- MCP get_online_users tool: main process tracks users in .lattex-online-users.json
- CLAUDE.md: show current user's Overleaf name (fetched from /user/settings)
- CLAUDE.md: mandatory first steps with MUST/NEVER language at top of file
- claude-workspace/ directory: untracked scratch space for Claude Code experiments
- chokidar + bridge skip claude-workspace/ to prevent syncing to Overleaf

Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- Online users: click "N online" badge to see user names with cursor colors
- MCP get_online_users tool: main process tracks users in .lattex-online-users.json
- CLAUDE.md: show current user's Overleaf name (fetched from /user/settings)
- CLAUDE.md: mandatory first steps with MUST/NEVER language at top of file
- claude-workspace/ directory: untracked scratch space for Claude Code experiments
- chokidar + bridge skip claude-workspace/ to prevent syncing to Overleaf

Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix file sync for non-active tabs, MCP compile integration, OT resilience</title>
<updated>2026-03-15T23:21:06+00:00</updated>
<author>
<name>haoyuren</name>
<email>13851610112@163.com</email>
</author>
<published>2026-03-15T23:21:06+00:00</published>
<link rel='alternate' type='text/html' href='https://git.blackhao.com/lattex.git/commit/?id=c9d673d83037167553dcef3947065266743b2d5f'/>
<id>c9d673d83037167553dcef3947065266743b2d5f</id>
<content type='text'>
- 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 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- 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 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Enhance CLAUDE.md with project structure, guidelines, and conventions</title>
<updated>2026-03-15T19:46:39+00:00</updated>
<author>
<name>haoyuren</name>
<email>13851610112@163.com</email>
</author>
<published>2026-03-15T19:46:39+00:00</published>
<link rel='alternate' type='text/html' href='https://git.blackhao.com/lattex.git/commit/?id=d1cde0fa291046b3e9768a4efd2f6c62b20748d6'/>
<id>d1cde0fa291046b3e9768a4efd2f6c62b20748d6</id>
<content type='text'>
Includes main file path, TeX file list, and rules for Claude Code:
read full document before editing, match existing style, compile after
changes, respond to comments properly.

Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Includes main file path, TeX file list, and rules for Claude Code:
read full document before editing, match existing style, compile after
changes, respond to comments properly.

Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix MCP server in packaged app: bundle with esbuild, asarUnpack</title>
<updated>2026-03-15T19:13:21+00:00</updated>
<author>
<name>haoyuren</name>
<email>13851610112@163.com</email>
</author>
<published>2026-03-15T19:13:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.blackhao.com/lattex.git/commit/?id=d0162055842e5343bca54153f8f9ce83d969f2a3'/>
<id>d0162055842e5343bca54153f8f9ce83d969f2a3</id>
<content type='text'>
MCP server was not included in DMG builds. Now esbuild bundles it into
a single file (out/mcp/lattex.mjs) with all dependencies inlined, and
electron-builder unpacks it from asar so external node can execute it.

Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
MCP server was not included in DMG builds. Now esbuild bundles it into
a single file (out/mcp/lattex.mjs) with all dependencies inlined, and
electron-builder unpacks it from asar so external node can execute it.

Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>v0.3.2: Add search features and SyncTeX forward search</title>
<updated>2026-03-15T18:41:14+00:00</updated>
<author>
<name>haoyuren</name>
<email>13851610112@163.com</email>
</author>
<published>2026-03-15T18:41:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.blackhao.com/lattex.git/commit/?id=3a1ad20d63f7d96dd6b4aee92b2851b3a35a8d92'/>
<id>3a1ad20d63f7d96dd6b4aee92b2851b3a35a8d92</id>
<content type='text'>
- 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 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- 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 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix crash on quit: use ptyInstances map instead of undefined ptyInstance</title>
<updated>2026-03-15T18:05:24+00:00</updated>
<author>
<name>haoyuren</name>
<email>13851610112@163.com</email>
</author>
<published>2026-03-15T18:05:24+00:00</published>
<link rel='alternate' type='text/html' href='https://git.blackhao.com/lattex.git/commit/?id=0b2431faad5271e4721fcf7f96917b1a314120b3'/>
<id>0b2431faad5271e4721fcf7f96917b1a314120b3</id>
<content type='text'>
Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix SyncTeX: download synctex.gz via web proxy, normalize paths, smooth zoom</title>
<updated>2026-03-15T17:36:13+00:00</updated>
<author>
<name>haoyuren</name>
<email>13851610112@163.com</email>
</author>
<published>2026-03-15T17:36:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.blackhao.com/lattex.git/commit/?id=e8ecd08d17ec4b9d907d0585925fd73aa7863954'/>
<id>e8ecd08d17ec4b9d907d0585925fd73aa7863954</id>
<content type='text'>
- synctex.gz CDN returns 503; use Overleaf web proxy URL with session cookie
- Normalize synctex paths (collapse /./ segments)
- Pass session cookie to all compile artifact downloads
- Smooth editor zoom: continuous delta, debounced remeasure

Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- synctex.gz CDN returns 503; use Overleaf web proxy URL with session cookie
- Normalize synctex paths (collapse /./ segments)
- Pass session cookie to all compile artifact downloads
- Smooth editor zoom: continuous delta, debounced remeasure

Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>v0.3.0: Fix sync exclusions, add editor zoom, cached PDF loading</title>
<updated>2026-03-15T09:27:43+00:00</updated>
<author>
<name>haoyuren</name>
<email>13851610112@163.com</email>
</author>
<published>2026-03-15T09:27:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.blackhao.com/lattex.git/commit/?id=d1ee677591bd5e6e8b1726b2281621adf6131332'/>
<id>d1ee677591bd5e6e8b1726b2281621adf6131332</id>
<content type='text'>
- 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 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- 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 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Add MCP compile debugging tools: get_compile_errors, get_compile_warnings, get_compile_log</title>
<updated>2026-03-15T09:02:40+00:00</updated>
<author>
<name>haoyuren</name>
<email>13851610112@163.com</email>
</author>
<published>2026-03-15T09:02:40+00:00</published>
<link rel='alternate' type='text/html' href='https://git.blackhao.com/lattex.git/commit/?id=6aea514b38a8b36882d39aec30fd12e997f82611'/>
<id>6aea514b38a8b36882d39aec30fd12e997f82611</id>
<content type='text'>
New MCP tools for agents to debug LaTeX compilation:
- get_compile_errors: parsed errors with file paths and line numbers
- get_compile_warnings: parsed warnings with locations
- get_compile_log: full raw log with optional tail parameter
- compile_latex: improved to fetch log via CDN URL, return error summary

Log parsing uses the same Overleaf-style parser as the PdfViewer component.
Updated CLAUDE.md template with compile-debug workflow documentation.

Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
New MCP tools for agents to debug LaTeX compilation:
- get_compile_errors: parsed errors with file paths and line numbers
- get_compile_warnings: parsed warnings with locations
- get_compile_log: full raw log with optional tail parameter
- compile_latex: improved to fetch log via CDN URL, return error summary

Log parsing uses the same Overleaf-style parser as the PdfViewer component.
Updated CLAUDE.md template with compile-debug workflow documentation.

Co-Authored-By: Claude Opus 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Fix server compile: download PDF to .build dir, prevent artifact sync to Overleaf</title>
<updated>2026-03-15T09:00:12+00:00</updated>
<author>
<name>haoyuren</name>
<email>13851610112@163.com</email>
</author>
<published>2026-03-15T09:00:12+00:00</published>
<link rel='alternate' type='text/html' href='https://git.blackhao.com/lattex.git/commit/?id=183af193dcf46838506958a50daad61c6b29a23d'/>
<id>183af193dcf46838506958a50daad61c6b29a23d</id>
<content type='text'>
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 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
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 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
</feed>
