Add three core VISION features on top of the barebones MVP:
Git workflow (backend + frontend):
- Backend: simple-git wrapper with per-project repo isolation, init
(idempotent .gitignore reconciliation, handles empty repos), status,
log, commit (per-commit identity via -c flags), remote, push, pull
- gitFor() now refuses to run without the project's own .git, preventing
accidental parent-repo detection when projects/ lives inside the
typst-leaf worktree
- Frontend: GitPanel (branch, ahead/behind, inline commit, push/pull,
remote prompt, collapsible log), SettingsPanel (git identity in
localStorage), Ctrl+Shift+S focuses commit input
- Status/log refresh driven by gitVersion bumps (no polling) with
cancellation guards across project switches
- Auto-init on status failure for pre-existing projects
Vim mode:
- Off-by-default toggle persisted to localStorage
- Dynamic monaco-vim import, status bar div, StrictMode-safe lifecycle
via editorReady reset on unmount
SyncTeX (preview → editor):
- Handle tinymist/preview/scrollSource notification and
window/showDocument request
- Cross-platform path normalization (Windows drive letters, native
backslash paths, URL-decoded paths)
- Editor jump effect with Monaco selection/reveal/focus, clears on
completion
Robustness fixes across review cycles:
- Cancellation guards on git status/log effects to prevent stale writes
- bumpGitVersion after auto-init so log viewer updates
- jsonOrThrow extracts structured backend errors, handles empty bodies
- SettingsPanel/GitPanel validate localStorage identity shape
- GitPanel clears log state on project switch
- File path URI encoding preserves path separators (segment-wise encode)
- tsconfig lib bumped to ES2021 for String.replaceAll
AGENTS.md: removed stale execa/monaco-languageclient references
PLAN.md: implementation plan for this chunk