vantage-md 0.4.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (298) hide show
  1. vantage_md-0.4.1/.github/dependabot.yml +16 -0
  2. vantage_md-0.4.1/.github/pull_request_template.md +21 -0
  3. vantage_md-0.4.1/.github/workflows/ci.yml +72 -0
  4. vantage_md-0.4.1/.github/workflows/publish.yml +187 -0
  5. vantage_md-0.4.1/.github/workflows/release.yml +84 -0
  6. vantage_md-0.4.1/.gitignore +66 -0
  7. vantage_md-0.4.1/.mise.toml +4 -0
  8. vantage_md-0.4.1/.pre-commit-config.yaml +50 -0
  9. vantage_md-0.4.1/.prettierrc.json +8 -0
  10. vantage_md-0.4.1/.python-version +1 -0
  11. vantage_md-0.4.1/CHANGELOG.md +73 -0
  12. vantage_md-0.4.1/Justfile +337 -0
  13. vantage_md-0.4.1/LICENSE +191 -0
  14. vantage_md-0.4.1/MANIFEST.in +2 -0
  15. vantage_md-0.4.1/NOTICE +14 -0
  16. vantage_md-0.4.1/PKG-INFO +299 -0
  17. vantage_md-0.4.1/Procfile +2 -0
  18. vantage_md-0.4.1/README.md +277 -0
  19. vantage_md-0.4.1/build-docs.sh +13 -0
  20. vantage_md-0.4.1/docs/design/jj-history-viewer.md +124 -0
  21. vantage_md-0.4.1/docs/design/technical_spec.md +282 -0
  22. vantage_md-0.4.1/docs/design/working-directory-diffs.md +79 -0
  23. vantage_md-0.4.1/docs/development.md +123 -0
  24. vantage_md-0.4.1/docs/mermaid-diagrams-test.md +206 -0
  25. vantage_md-0.4.1/docs/screenshot.png +0 -0
  26. vantage_md-0.4.1/docs-worker.js +5 -0
  27. vantage_md-0.4.1/docs-wrangler.toml +9 -0
  28. vantage_md-0.4.1/frontend/.gitignore +34 -0
  29. vantage_md-0.4.1/frontend/README.md +73 -0
  30. vantage_md-0.4.1/frontend/e2e/basic.spec.ts +20 -0
  31. vantage_md-0.4.1/frontend/e2e/commit_info.spec.ts +47 -0
  32. vantage_md-0.4.1/frontend/e2e/ctrl_click.spec.ts +151 -0
  33. vantage_md-0.4.1/frontend/e2e/livereload.spec.ts +86 -0
  34. vantage_md-0.4.1/frontend/e2e/mermaid.spec.ts +63 -0
  35. vantage_md-0.4.1/frontend/e2e/navigation.spec.ts +48 -0
  36. vantage_md-0.4.1/frontend/e2e/sidebar.spec.ts +47 -0
  37. vantage_md-0.4.1/frontend/e2e/ui_behavior.spec.ts +87 -0
  38. vantage_md-0.4.1/frontend/eslint.config.js +23 -0
  39. vantage_md-0.4.1/frontend/index.html +13 -0
  40. vantage_md-0.4.1/frontend/package-lock.json +9224 -0
  41. vantage_md-0.4.1/frontend/package.json +70 -0
  42. vantage_md-0.4.1/frontend/playwright.config.ts +27 -0
  43. vantage_md-0.4.1/frontend/postcss.config.js +6 -0
  44. vantage_md-0.4.1/frontend/public/vite.svg +1 -0
  45. vantage_md-0.4.1/frontend/src/App.css +42 -0
  46. vantage_md-0.4.1/frontend/src/App.test.tsx +19 -0
  47. vantage_md-0.4.1/frontend/src/App.tsx +16 -0
  48. vantage_md-0.4.1/frontend/src/assets/react.svg +1 -0
  49. vantage_md-0.4.1/frontend/src/components/AppLink.test.tsx +95 -0
  50. vantage_md-0.4.1/frontend/src/components/AppLink.tsx +55 -0
  51. vantage_md-0.4.1/frontend/src/components/ConnectionBanner.tsx +43 -0
  52. vantage_md-0.4.1/frontend/src/components/DiffViewer.test.tsx +72 -0
  53. vantage_md-0.4.1/frontend/src/components/DiffViewer.tsx +178 -0
  54. vantage_md-0.4.1/frontend/src/components/DirectoryViewer.test.tsx +145 -0
  55. vantage_md-0.4.1/frontend/src/components/DirectoryViewer.tsx +145 -0
  56. vantage_md-0.4.1/frontend/src/components/FilePicker.tsx +437 -0
  57. vantage_md-0.4.1/frontend/src/components/FileTree.test.tsx +307 -0
  58. vantage_md-0.4.1/frontend/src/components/FileTree.tsx +300 -0
  59. vantage_md-0.4.1/frontend/src/components/FrontmatterDisplay.test.tsx +123 -0
  60. vantage_md-0.4.1/frontend/src/components/FrontmatterDisplay.tsx +126 -0
  61. vantage_md-0.4.1/frontend/src/components/KeyboardShortcuts.test.tsx +75 -0
  62. vantage_md-0.4.1/frontend/src/components/KeyboardShortcuts.tsx +188 -0
  63. vantage_md-0.4.1/frontend/src/components/MarkdownViewer.test.tsx +173 -0
  64. vantage_md-0.4.1/frontend/src/components/MarkdownViewer.tsx +648 -0
  65. vantage_md-0.4.1/frontend/src/components/MermaidDiagram.test.tsx +177 -0
  66. vantage_md-0.4.1/frontend/src/components/MermaidDiagram.tsx +174 -0
  67. vantage_md-0.4.1/frontend/src/components/MiddleEllipsis.tsx +110 -0
  68. vantage_md-0.4.1/frontend/src/components/Modal.test.tsx +58 -0
  69. vantage_md-0.4.1/frontend/src/components/Modal.tsx +63 -0
  70. vantage_md-0.4.1/frontend/src/components/ProjectPicker.tsx +241 -0
  71. vantage_md-0.4.1/frontend/src/components/RecentFilePopover.test.tsx +307 -0
  72. vantage_md-0.4.1/frontend/src/components/RecentFilePopover.tsx +220 -0
  73. vantage_md-0.4.1/frontend/src/components/RecentsModal.test.tsx +207 -0
  74. vantage_md-0.4.1/frontend/src/components/RecentsModal.tsx +234 -0
  75. vantage_md-0.4.1/frontend/src/components/RelativeTime.tsx +16 -0
  76. vantage_md-0.4.1/frontend/src/components/ReviewCommentPopover.tsx +143 -0
  77. vantage_md-0.4.1/frontend/src/components/ReviewCommentViewer.tsx +87 -0
  78. vantage_md-0.4.1/frontend/src/components/ReviewPanel.tsx +253 -0
  79. vantage_md-0.4.1/frontend/src/components/ReviewToolbar.tsx +67 -0
  80. vantage_md-0.4.1/frontend/src/components/SettingsDropdown.test.tsx +148 -0
  81. vantage_md-0.4.1/frontend/src/components/SettingsDropdown.tsx +253 -0
  82. vantage_md-0.4.1/frontend/src/components/StyleGuideModal.tsx +111 -0
  83. vantage_md-0.4.1/frontend/src/components/WhatsNewModal.test.tsx +79 -0
  84. vantage_md-0.4.1/frontend/src/components/WhatsNewModal.tsx +204 -0
  85. vantage_md-0.4.1/frontend/src/hooks/useDeltaFlash.test.ts +114 -0
  86. vantage_md-0.4.1/frontend/src/hooks/useDeltaFlash.ts +82 -0
  87. vantage_md-0.4.1/frontend/src/hooks/useKeyboardShortcuts.test.ts +105 -0
  88. vantage_md-0.4.1/frontend/src/hooks/useKeyboardShortcuts.ts +226 -0
  89. vantage_md-0.4.1/frontend/src/hooks/useLineAnchor.ts +142 -0
  90. vantage_md-0.4.1/frontend/src/hooks/useRelativeTime.test.ts +96 -0
  91. vantage_md-0.4.1/frontend/src/hooks/useRelativeTime.ts +69 -0
  92. vantage_md-0.4.1/frontend/src/hooks/useReviewHighlights.ts +705 -0
  93. vantage_md-0.4.1/frontend/src/hooks/useWebSocket.test.ts +300 -0
  94. vantage_md-0.4.1/frontend/src/hooks/useWebSocket.ts +385 -0
  95. vantage_md-0.4.1/frontend/src/hooks/useWhatsNew.ts +53 -0
  96. vantage_md-0.4.1/frontend/src/index.css +939 -0
  97. vantage_md-0.4.1/frontend/src/lib/docTips.test.ts +45 -0
  98. vantage_md-0.4.1/frontend/src/lib/docTips.ts +77 -0
  99. vantage_md-0.4.1/frontend/src/lib/frontmatter.test.ts +264 -0
  100. vantage_md-0.4.1/frontend/src/lib/frontmatter.ts +55 -0
  101. vantage_md-0.4.1/frontend/src/lib/mermaidCache.ts +7 -0
  102. vantage_md-0.4.1/frontend/src/lib/mermaidLoader.ts +31 -0
  103. vantage_md-0.4.1/frontend/src/lib/multiRepoNavigation.test.ts +159 -0
  104. vantage_md-0.4.1/frontend/src/lib/navigation.test.ts +52 -0
  105. vantage_md-0.4.1/frontend/src/lib/navigation.ts +20 -0
  106. vantage_md-0.4.1/frontend/src/lib/rehypeSourceLines.ts +51 -0
  107. vantage_md-0.4.1/frontend/src/lib/staticMode.test.ts +154 -0
  108. vantage_md-0.4.1/frontend/src/lib/staticMode.ts +133 -0
  109. vantage_md-0.4.1/frontend/src/lib/utils.test.ts +29 -0
  110. vantage_md-0.4.1/frontend/src/lib/utils.ts +6 -0
  111. vantage_md-0.4.1/frontend/src/main.tsx +19 -0
  112. vantage_md-0.4.1/frontend/src/pages/HistoryPage.tsx +779 -0
  113. vantage_md-0.4.1/frontend/src/pages/RecentsPage.test.tsx +119 -0
  114. vantage_md-0.4.1/frontend/src/pages/RecentsPage.tsx +229 -0
  115. vantage_md-0.4.1/frontend/src/pages/ViewerPage.test.tsx +246 -0
  116. vantage_md-0.4.1/frontend/src/pages/ViewerPage.tsx +1642 -0
  117. vantage_md-0.4.1/frontend/src/stores/useConnectionStore.ts +18 -0
  118. vantage_md-0.4.1/frontend/src/stores/useGitStore.test.ts +142 -0
  119. vantage_md-0.4.1/frontend/src/stores/useGitStore.ts +185 -0
  120. vantage_md-0.4.1/frontend/src/stores/useJJStore.test.ts +101 -0
  121. vantage_md-0.4.1/frontend/src/stores/useJJStore.ts +132 -0
  122. vantage_md-0.4.1/frontend/src/stores/useRepoStore.test.ts +700 -0
  123. vantage_md-0.4.1/frontend/src/stores/useRepoStore.ts +497 -0
  124. vantage_md-0.4.1/frontend/src/stores/useReviewStore.test.ts +316 -0
  125. vantage_md-0.4.1/frontend/src/stores/useReviewStore.ts +417 -0
  126. vantage_md-0.4.1/frontend/src/test/setup.ts +1 -0
  127. vantage_md-0.4.1/frontend/src/types/index.ts +121 -0
  128. vantage_md-0.4.1/frontend/src/virtual-changelog.d.ts +10 -0
  129. vantage_md-0.4.1/frontend/tailwind.config.js +11 -0
  130. vantage_md-0.4.1/frontend/tsconfig.app.json +33 -0
  131. vantage_md-0.4.1/frontend/tsconfig.json +7 -0
  132. vantage_md-0.4.1/frontend/tsconfig.node.json +26 -0
  133. vantage_md-0.4.1/frontend/vite-changelog-plugin.ts +98 -0
  134. vantage_md-0.4.1/frontend/vite.config.ts +70 -0
  135. vantage_md-0.4.1/frontend/vitest.config.ts +27 -0
  136. vantage_md-0.4.1/main.py +6 -0
  137. vantage_md-0.4.1/packages/vantage-md/README.md +123 -0
  138. vantage_md-0.4.1/packages/vantage-md/package-lock.json +4908 -0
  139. vantage_md-0.4.1/packages/vantage-md/package.json +104 -0
  140. vantage_md-0.4.1/packages/vantage-md/src/FrontmatterDisplay.tsx +126 -0
  141. vantage_md-0.4.1/packages/vantage-md/src/MarkdownViewer.tsx +248 -0
  142. vantage_md-0.4.1/packages/vantage-md/src/MermaidDiagram.tsx +234 -0
  143. vantage_md-0.4.1/packages/vantage-md/src/frontmatter.ts +55 -0
  144. vantage_md-0.4.1/packages/vantage-md/src/index.ts +27 -0
  145. vantage_md-0.4.1/packages/vantage-md/src/mermaidCache.ts +6 -0
  146. vantage_md-0.4.1/packages/vantage-md/src/mermaidLoader.ts +31 -0
  147. vantage_md-0.4.1/packages/vantage-md/src/react.ts +35 -0
  148. vantage_md-0.4.1/packages/vantage-md/src/rehypeSourceLines.ts +51 -0
  149. vantage_md-0.4.1/packages/vantage-md/src/renderMarkdown.ts +122 -0
  150. vantage_md-0.4.1/packages/vantage-md/src/renderMermaidBlocks.ts +96 -0
  151. vantage_md-0.4.1/packages/vantage-md/src/resolveLinks.ts +92 -0
  152. vantage_md-0.4.1/packages/vantage-md/src/sanitize.ts +59 -0
  153. vantage_md-0.4.1/packages/vantage-md/src/scrollToLineAnchor.ts +114 -0
  154. vantage_md-0.4.1/packages/vantage-md/src/styles/index.css +7 -0
  155. vantage_md-0.4.1/packages/vantage-md/src/styles/line-anchor.css +22 -0
  156. vantage_md-0.4.1/packages/vantage-md/src/styles/prose.css +210 -0
  157. vantage_md-0.4.1/packages/vantage-md/src/useLineAnchor.ts +129 -0
  158. vantage_md-0.4.1/packages/vantage-md/tsconfig.json +18 -0
  159. vantage_md-0.4.1/packages/vantage-md/tsup.config.ts +49 -0
  160. vantage_md-0.4.1/pyproject.toml +61 -0
  161. vantage_md-0.4.1/ruff.toml +9 -0
  162. vantage_md-0.4.1/scripts/build-site.sh +14 -0
  163. vantage_md-0.4.1/scripts/hooks/commit-msg +30 -0
  164. vantage_md-0.4.1/scripts/hooks/pre-commit +4 -0
  165. vantage_md-0.4.1/scripts/hooks/pre-push +41 -0
  166. vantage_md-0.4.1/setup.cfg +4 -0
  167. vantage_md-0.4.1/src/vantage/__init__.py +0 -0
  168. vantage_md-0.4.1/src/vantage/cli.py +587 -0
  169. vantage_md-0.4.1/src/vantage/config.py +289 -0
  170. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
  171. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
  172. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
  173. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
  174. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
  175. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
  176. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
  177. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
  178. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
  179. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
  180. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
  181. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
  182. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
  183. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
  184. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
  185. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
  186. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
  187. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
  188. vantage_md-0.4.1/src/vantage/frontend_dist/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
  189. vantage_md-0.4.1/src/vantage/frontend_dist/assets/_baseUniq-BzjAJ5JS.js +1 -0
  190. vantage_md-0.4.1/src/vantage/frontend_dist/assets/arc-DW1GZeyX.js +1 -0
  191. vantage_md-0.4.1/src/vantage/frontend_dist/assets/architectureDiagram-Q4EWVU46-etwRjL9h.js +36 -0
  192. vantage_md-0.4.1/src/vantage/frontend_dist/assets/blockDiagram-DXYQGD6D-D2xPqqOj.js +132 -0
  193. vantage_md-0.4.1/src/vantage/frontend_dist/assets/c4Diagram-AHTNJAMY-BBk3XTxE.js +10 -0
  194. vantage_md-0.4.1/src/vantage/frontend_dist/assets/channel-Br_HNLzt.js +1 -0
  195. vantage_md-0.4.1/src/vantage/frontend_dist/assets/chunk-4BX2VUAB-BnH5aWVT.js +1 -0
  196. vantage_md-0.4.1/src/vantage/frontend_dist/assets/chunk-4TB4RGXK-CxpPNuPM.js +206 -0
  197. vantage_md-0.4.1/src/vantage/frontend_dist/assets/chunk-55IACEB6-0GgW-XH2.js +1 -0
  198. vantage_md-0.4.1/src/vantage/frontend_dist/assets/chunk-EDXVE4YY-JPlt4r7q.js +1 -0
  199. vantage_md-0.4.1/src/vantage/frontend_dist/assets/chunk-FMBD7UC4-CjVIXvwj.js +15 -0
  200. vantage_md-0.4.1/src/vantage/frontend_dist/assets/chunk-OYMX7WX6-B_s5Oyto.js +231 -0
  201. vantage_md-0.4.1/src/vantage/frontend_dist/assets/chunk-QZHKN3VN-CQf9A4kd.js +1 -0
  202. vantage_md-0.4.1/src/vantage/frontend_dist/assets/chunk-YZCP3GAM-Dxjqtgkp.js +1 -0
  203. vantage_md-0.4.1/src/vantage/frontend_dist/assets/classDiagram-6PBFFD2Q-Du8hDS8t.js +1 -0
  204. vantage_md-0.4.1/src/vantage/frontend_dist/assets/classDiagram-v2-HSJHXN6E-Du8hDS8t.js +1 -0
  205. vantage_md-0.4.1/src/vantage/frontend_dist/assets/clone-Brjjqzcg.js +1 -0
  206. vantage_md-0.4.1/src/vantage/frontend_dist/assets/cose-bilkent-S5V4N54A-ZpMdfjHh.js +1 -0
  207. vantage_md-0.4.1/src/vantage/frontend_dist/assets/cytoscape.esm-DkOyvmE4.js +321 -0
  208. vantage_md-0.4.1/src/vantage/frontend_dist/assets/dagre-KV5264BT-Cc7lqTnk.js +4 -0
  209. vantage_md-0.4.1/src/vantage/frontend_dist/assets/defaultLocale-DX6XiGOO.js +1 -0
  210. vantage_md-0.4.1/src/vantage/frontend_dist/assets/diagram-5BDNPKRD-BO6NioEI.js +10 -0
  211. vantage_md-0.4.1/src/vantage/frontend_dist/assets/diagram-G4DWMVQ6-BVXLGuNL.js +24 -0
  212. vantage_md-0.4.1/src/vantage/frontend_dist/assets/diagram-MMDJMWI5-ByuR5ZTG.js +43 -0
  213. vantage_md-0.4.1/src/vantage/frontend_dist/assets/diagram-TYMM5635-5W8JSU0H.js +24 -0
  214. vantage_md-0.4.1/src/vantage/frontend_dist/assets/erDiagram-SMLLAGMA-BLT__Y4b.js +85 -0
  215. vantage_md-0.4.1/src/vantage/frontend_dist/assets/flowDiagram-DWJPFMVM-ESrwQaOL.js +162 -0
  216. vantage_md-0.4.1/src/vantage/frontend_dist/assets/ganttDiagram-T4ZO3ILL-Dsx3-ocM.js +292 -0
  217. vantage_md-0.4.1/src/vantage/frontend_dist/assets/gitGraphDiagram-UUTBAWPF-kFxlqkjs.js +106 -0
  218. vantage_md-0.4.1/src/vantage/frontend_dist/assets/graph-CUsmYolQ.js +1 -0
  219. vantage_md-0.4.1/src/vantage/frontend_dist/assets/index-B3U0nrhq.css +1 -0
  220. vantage_md-0.4.1/src/vantage/frontend_dist/assets/index-BrU0vSaY.js +524 -0
  221. vantage_md-0.4.1/src/vantage/frontend_dist/assets/infoDiagram-42DDH7IO-BuHfLnJ4.js +2 -0
  222. vantage_md-0.4.1/src/vantage/frontend_dist/assets/init-Gi6I4Gst.js +1 -0
  223. vantage_md-0.4.1/src/vantage/frontend_dist/assets/ishikawaDiagram-UXIWVN3A-43xxoQXf.js +70 -0
  224. vantage_md-0.4.1/src/vantage/frontend_dist/assets/journeyDiagram-VCZTEJTY-B9JjJfzf.js +139 -0
  225. vantage_md-0.4.1/src/vantage/frontend_dist/assets/kanban-definition-6JOO6SKY-CDNNwYqE.js +89 -0
  226. vantage_md-0.4.1/src/vantage/frontend_dist/assets/layout-CQUnwyiV.js +1 -0
  227. vantage_md-0.4.1/src/vantage/frontend_dist/assets/linear-DHXzPUd4.js +1 -0
  228. vantage_md-0.4.1/src/vantage/frontend_dist/assets/mermaid.core-BBOkBt1D.js +303 -0
  229. vantage_md-0.4.1/src/vantage/frontend_dist/assets/min-CmQGJ1WS.js +1 -0
  230. vantage_md-0.4.1/src/vantage/frontend_dist/assets/mindmap-definition-QFDTVHPH-Ds1Ac4jf.js +96 -0
  231. vantage_md-0.4.1/src/vantage/frontend_dist/assets/ordinal-Cboi1Yqb.js +1 -0
  232. vantage_md-0.4.1/src/vantage/frontend_dist/assets/pieDiagram-DEJITSTG-_PAeuwxX.js +30 -0
  233. vantage_md-0.4.1/src/vantage/frontend_dist/assets/quadrantDiagram-34T5L4WZ-ZJy13LwY.js +7 -0
  234. vantage_md-0.4.1/src/vantage/frontend_dist/assets/requirementDiagram-MS252O5E-BrKpOeGK.js +84 -0
  235. vantage_md-0.4.1/src/vantage/frontend_dist/assets/sankeyDiagram-XADWPNL6-D9T7x1rR.js +10 -0
  236. vantage_md-0.4.1/src/vantage/frontend_dist/assets/sequenceDiagram-FGHM5R23-troUvgyD.js +157 -0
  237. vantage_md-0.4.1/src/vantage/frontend_dist/assets/stateDiagram-FHFEXIEX-CWfVDcVk.js +1 -0
  238. vantage_md-0.4.1/src/vantage/frontend_dist/assets/stateDiagram-v2-QKLJ7IA2-DjUyDw-5.js +1 -0
  239. vantage_md-0.4.1/src/vantage/frontend_dist/assets/timeline-definition-GMOUNBTQ-BQXjYav1.js +120 -0
  240. vantage_md-0.4.1/src/vantage/frontend_dist/assets/vendor-katex-Dehg5p_Y.js +261 -0
  241. vantage_md-0.4.1/src/vantage/frontend_dist/assets/vendor-markdown-BLwYaWWF.js +40 -0
  242. vantage_md-0.4.1/src/vantage/frontend_dist/assets/vendor-react-DF8rR34Z.js +3 -0
  243. vantage_md-0.4.1/src/vantage/frontend_dist/assets/vennDiagram-DHZGUBPP-C3ZD4R0z.js +34 -0
  244. vantage_md-0.4.1/src/vantage/frontend_dist/assets/wardley-RL74JXVD-HY0CblDc.js +162 -0
  245. vantage_md-0.4.1/src/vantage/frontend_dist/assets/wardleyDiagram-NUSXRM2D-C9In7O-h.js +20 -0
  246. vantage_md-0.4.1/src/vantage/frontend_dist/assets/xychartDiagram-5P7HB3ND-DpRh5iFB.js +7 -0
  247. vantage_md-0.4.1/src/vantage/frontend_dist/index.html +17 -0
  248. vantage_md-0.4.1/src/vantage/frontend_dist/vite.svg +1 -0
  249. vantage_md-0.4.1/src/vantage/main.py +161 -0
  250. vantage_md-0.4.1/src/vantage/routers/__init__.py +0 -0
  251. vantage_md-0.4.1/src/vantage/routers/api.py +716 -0
  252. vantage_md-0.4.1/src/vantage/routers/socket.py +77 -0
  253. vantage_md-0.4.1/src/vantage/schemas/__init__.py +0 -0
  254. vantage_md-0.4.1/src/vantage/schemas/models.py +125 -0
  255. vantage_md-0.4.1/src/vantage/services/__init__.py +0 -0
  256. vantage_md-0.4.1/src/vantage/services/fs_service.py +367 -0
  257. vantage_md-0.4.1/src/vantage/services/git_service.py +1218 -0
  258. vantage_md-0.4.1/src/vantage/services/jj_service.py +437 -0
  259. vantage_md-0.4.1/src/vantage/services/perf.py +415 -0
  260. vantage_md-0.4.1/src/vantage/services/review_service.py +57 -0
  261. vantage_md-0.4.1/src/vantage/services/socket_manager.py +64 -0
  262. vantage_md-0.4.1/src/vantage/services/static_builder.py +305 -0
  263. vantage_md-0.4.1/src/vantage/services/watcher.py +406 -0
  264. vantage_md-0.4.1/src/vantage/settings.py +55 -0
  265. vantage_md-0.4.1/src/vantage/version.py +11 -0
  266. vantage_md-0.4.1/src/vantage_md.egg-info/PKG-INFO +299 -0
  267. vantage_md-0.4.1/src/vantage_md.egg-info/SOURCES.txt +296 -0
  268. vantage_md-0.4.1/src/vantage_md.egg-info/dependency_links.txt +1 -0
  269. vantage_md-0.4.1/src/vantage_md.egg-info/entry_points.txt +3 -0
  270. vantage_md-0.4.1/src/vantage_md.egg-info/requires.txt +9 -0
  271. vantage_md-0.4.1/src/vantage_md.egg-info/top_level.txt +1 -0
  272. vantage_md-0.4.1/tests/__init__.py +0 -0
  273. vantage_md-0.4.1/tests/conftest.py +22 -0
  274. vantage_md-0.4.1/tests/e2e/test_repo/README.md +3 -0
  275. vantage_md-0.4.1/tests/e2e/test_repo/mermaid-diagrams-test.md +206 -0
  276. vantage_md-0.4.1/tests/e2e/test_repo/page1.md +4 -0
  277. vantage_md-0.4.1/tests/e2e/test_repo/page2.md +3 -0
  278. vantage_md-0.4.1/tests/e2e/test_repo/subdir/README.md +1 -0
  279. vantage_md-0.4.1/tests/test_api.py +143 -0
  280. vantage_md-0.4.1/tests/test_clean_worktree.py +77 -0
  281. vantage_md-0.4.1/tests/test_cli.py +133 -0
  282. vantage_md-0.4.1/tests/test_config.py +227 -0
  283. vantage_md-0.4.1/tests/test_fs_service.py +227 -0
  284. vantage_md-0.4.1/tests/test_git_service.py +866 -0
  285. vantage_md-0.4.1/tests/test_global_files.py +61 -0
  286. vantage_md-0.4.1/tests/test_perf.py +316 -0
  287. vantage_md-0.4.1/tests/test_security.py +489 -0
  288. vantage_md-0.4.1/tests/test_startup_perf.py +56 -0
  289. vantage_md-0.4.1/tests/test_static_builder.py +220 -0
  290. vantage_md-0.4.1/userguide/README.md +39 -0
  291. vantage_md-0.4.1/userguide/cli-reference.md +123 -0
  292. vantage_md-0.4.1/userguide/configuration.md +126 -0
  293. vantage_md-0.4.1/userguide/daemon-mode.md +153 -0
  294. vantage_md-0.4.1/userguide/features.md +187 -0
  295. vantage_md-0.4.1/userguide/getting-started.md +57 -0
  296. vantage_md-0.4.1/userguide/keyboard-shortcuts.md +45 -0
  297. vantage_md-0.4.1/userguide/static-sites.md +152 -0
  298. vantage_md-0.4.1/uv.lock +714 -0
@@ -0,0 +1,16 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "pip"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+
8
+ - package-ecosystem: "npm"
9
+ directory: "/frontend"
10
+ schedule:
11
+ interval: "weekly"
12
+
13
+ - package-ecosystem: "github-actions"
14
+ directory: "/"
15
+ schedule:
16
+ interval: "weekly"
@@ -0,0 +1,21 @@
1
+ ## Summary
2
+
3
+ Brief description of the changes.
4
+
5
+ ## Motivation
6
+
7
+ Why is this change needed?
8
+
9
+ ## Changes
10
+
11
+ - List of changes made
12
+
13
+ ## Testing
14
+
15
+ - [ ] Ran `just check` (format, lint, typecheck, tests)
16
+ - [ ] Added/updated tests for new functionality
17
+ - [ ] Tested manually in browser
18
+
19
+ ## Screenshots
20
+
21
+ If applicable, add screenshots of UI changes.
@@ -0,0 +1,72 @@
1
+ name: CI
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ permissions:
10
+ contents: read
11
+
12
+ jobs:
13
+ secrets-scan:
14
+ runs-on: ubuntu-latest
15
+ steps:
16
+ - uses: actions/checkout@v6
17
+ with:
18
+ fetch-depth: 0
19
+ - name: TruffleHog secret scan
20
+ uses: trufflesecurity/trufflehog@main
21
+ with:
22
+ extra_args: --only-verified
23
+
24
+ check:
25
+ strategy:
26
+ fail-fast: false
27
+ matrix:
28
+ os: [ubuntu-latest, macos-latest]
29
+ runs-on: ${{ matrix.os }}
30
+ steps:
31
+ - uses: actions/checkout@v6
32
+ with:
33
+ fetch-depth: 0 # setuptools-scm needs tags
34
+
35
+ - name: Install mise
36
+ uses: jdx/mise-action@v4
37
+
38
+ - name: Install uv
39
+ uses: astral-sh/setup-uv@v7
40
+
41
+ - name: Install Python dependencies
42
+ run: uv sync
43
+
44
+ - name: Build vantage-md package
45
+ run: cd packages/vantage-md && npm ci && npx tsup
46
+
47
+ - name: Install Node dependencies
48
+ run: cd frontend && npm ci
49
+
50
+ - name: Lint Python
51
+ run: uv run ruff check .
52
+
53
+ - name: Format check Python
54
+ run: uv run ruff format --check .
55
+
56
+ - name: Type check Python
57
+ run: uv run basedpyright src/ --warnings || true
58
+
59
+ - name: Lint JavaScript
60
+ run: cd frontend && npm run lint
61
+
62
+ - name: Type check TypeScript
63
+ run: cd frontend && npx tsc --noEmit
64
+
65
+ - name: Test Python
66
+ run: uv run pytest tests/ -v
67
+
68
+ - name: Test JavaScript
69
+ run: cd frontend && npm run test
70
+
71
+ - name: Build frontend
72
+ run: cd frontend && npm run build
@@ -0,0 +1,187 @@
1
+ name: Publish
2
+
3
+ on:
4
+ release:
5
+ types: [published]
6
+ workflow_dispatch:
7
+ inputs:
8
+ version:
9
+ description: "Version to (re)publish to the homebrew tap, e.g. 0.4.0. PyPI upload is skipped — must already be on PyPI."
10
+ required: true
11
+ type: string
12
+
13
+ permissions:
14
+ contents: read
15
+ id-token: write
16
+
17
+ jobs:
18
+ build:
19
+ # Skip on workflow_dispatch — dispatch only re-runs the brew job to
20
+ # backfill or recover; the package must already be on PyPI.
21
+ if: github.event_name == 'release'
22
+ runs-on: ubuntu-latest
23
+ steps:
24
+ - uses: actions/checkout@v6
25
+ with:
26
+ fetch-depth: 0 # setuptools-scm needs tags
27
+
28
+ - name: Install mise
29
+ uses: jdx/mise-action@v4
30
+
31
+ - name: Install uv
32
+ uses: astral-sh/setup-uv@v7
33
+
34
+ - name: Install Python dependencies
35
+ run: uv sync
36
+
37
+ # The frontend imports from the local `vantage-md` package; build it
38
+ # first so TypeScript + Vite can resolve the module.
39
+ - name: Build local vantage-md package
40
+ run: cd packages/vantage-md && npm ci && npx tsup
41
+
42
+ - name: Install frontend deps
43
+ run: cd frontend && npm ci
44
+
45
+ - name: Build frontend
46
+ run: cd frontend && npm run build
47
+
48
+ - name: Bundle frontend into Python package
49
+ run: python3 -c "import shutil; from pathlib import Path; dst=Path('src/vantage/frontend_dist'); shutil.rmtree(dst, ignore_errors=True); shutil.copytree('frontend/dist', dst)"
50
+
51
+ - name: Build sdist + wheel
52
+ run: uv build
53
+
54
+ - name: Upload build artifacts
55
+ uses: actions/upload-artifact@v4
56
+ with:
57
+ name: dist
58
+ path: dist/
59
+
60
+ publish-pypi:
61
+ if: github.event_name == 'release'
62
+ needs: build
63
+ runs-on: ubuntu-latest
64
+ environment: pypi
65
+ steps:
66
+ - name: Download build artifacts
67
+ uses: actions/download-artifact@v4
68
+ with:
69
+ name: dist
70
+ path: dist/
71
+
72
+ - name: Install uv
73
+ uses: astral-sh/setup-uv@v7
74
+
75
+ - name: Publish to PyPI
76
+ run: uv publish dist/* --check-url https://pypi.org/simple/
77
+
78
+ brew:
79
+ # Run after publish-pypi on release events, or standalone on workflow_dispatch.
80
+ # `always()` is required so the job still runs when upstream jobs are
81
+ # skipped (manual dispatch); the inner condition gates on either PyPI
82
+ # having succeeded, or the event being manual.
83
+ if: |
84
+ always() &&
85
+ (github.event_name == 'workflow_dispatch' ||
86
+ needs.publish-pypi.result == 'success')
87
+ needs: [publish-pypi]
88
+ runs-on: ubuntu-latest
89
+ steps:
90
+ - name: Determine version
91
+ id: version
92
+ run: |
93
+ if [ "$GITHUB_EVENT_NAME" = "release" ]; then
94
+ VERSION="${GITHUB_REF_NAME#v}"
95
+ else
96
+ VERSION="${{ github.event.inputs.version }}"
97
+ fi
98
+ echo "version=${VERSION}" >> "$GITHUB_OUTPUT"
99
+ echo "Publishing vantage-md ${VERSION} to homebrew tap"
100
+
101
+ - name: Check out homebrew tap
102
+ uses: actions/checkout@v6
103
+ with:
104
+ repository: mschulkind-oss/homebrew-tap
105
+ token: ${{ secrets.HOMEBREW_TAP_TOKEN }}
106
+ path: tap
107
+
108
+ - name: Set up Python
109
+ uses: actions/setup-python@v5
110
+ with:
111
+ python-version: "3.13"
112
+
113
+ - name: Install homebrew-pypi-poet + vantage-md from PyPI
114
+ run: |
115
+ python -m venv /tmp/poet-venv
116
+ # poet still uses the deprecated pkg_resources API, which was removed
117
+ # in setuptools 81. Pin below that for the lifetime of this job.
118
+ /tmp/poet-venv/bin/pip install --quiet 'setuptools<81' homebrew-pypi-poet
119
+ # Retry the vantage-md install in case PyPI index replication lags
120
+ # behind the publish step (rare but documented).
121
+ VERSION="${{ steps.version.outputs.version }}"
122
+ for i in 1 2 3 4 5 6; do
123
+ if /tmp/poet-venv/bin/pip install --quiet "vantage-md==${VERSION}"; then
124
+ echo "Installed vantage-md==${VERSION}"
125
+ break
126
+ fi
127
+ echo "PyPI not ready yet, retrying in 15s..."
128
+ sleep 15
129
+ done
130
+
131
+ - name: Generate + patch formula
132
+ run: |
133
+ set -euo pipefail
134
+ /tmp/poet-venv/bin/poet -f vantage-md > /tmp/formula.rb
135
+
136
+ # Poet leaves placeholder fields — patch them here instead of
137
+ # maintaining a separate template that could drift from poet's output.
138
+ python3 <<'PY'
139
+ from pathlib import Path
140
+
141
+ f = Path("/tmp/formula.rb")
142
+ text = f.read_text()
143
+
144
+ text = text.replace(
145
+ 'desc "Shiny new formula"',
146
+ 'desc "Beautiful local Markdown viewer with live reload and Git awareness"',
147
+ )
148
+ text = text.replace(
149
+ 'homepage "None"',
150
+ 'homepage "https://github.com/mschulkind-oss/vantage"\n license "Apache-2.0"',
151
+ )
152
+
153
+ # vantage-md's pyproject.toml requires Python >=3.13.
154
+ text = text.replace(
155
+ 'depends_on "python3"',
156
+ 'depends_on "python@3.13"',
157
+ )
158
+
159
+ # Replace poet's `false` test stub with a real smoke test.
160
+ # `--version` exits 0 without binding a port or loading a repo.
161
+ text = text.replace(
162
+ " test do\n false\n end",
163
+ ' test do\n assert_match "vantage-md", shell_output("#{bin}/vantage-md --version")\n end',
164
+ )
165
+
166
+ f.write_text(text)
167
+ PY
168
+
169
+ echo "--- Generated formula ---"
170
+ cat /tmp/formula.rb
171
+
172
+ - name: Commit and push to tap
173
+ run: |
174
+ set -euo pipefail
175
+ VERSION="${{ steps.version.outputs.version }}"
176
+ mkdir -p tap/Formula
177
+ cp /tmp/formula.rb tap/Formula/vantage-md.rb
178
+ cd tap
179
+ git config user.name "vantage-md release bot"
180
+ git config user.email "noreply@github.com"
181
+ git add Formula/vantage-md.rb
182
+ if git diff --cached --quiet; then
183
+ echo "Formula unchanged; nothing to commit."
184
+ exit 0
185
+ fi
186
+ git commit -m "vantage-md ${VERSION}"
187
+ git push
@@ -0,0 +1,84 @@
1
+ name: Release
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - "v*" # Full release: v0.3.5
7
+ - "vantage-md@*" # npm-only release: vantage-md@0.1.5
8
+
9
+ permissions:
10
+ contents: write # gh release create
11
+ id-token: write # npm provenance (OIDC trusted publishing)
12
+
13
+ jobs:
14
+ release:
15
+ runs-on: ubuntu-latest
16
+ steps:
17
+ - uses: actions/checkout@v6
18
+ with:
19
+ fetch-depth: 0 # setuptools-scm needs tags to compute the version
20
+
21
+ - name: Install mise
22
+ uses: jdx/mise-action@v4
23
+
24
+ - name: Install uv
25
+ uses: astral-sh/setup-uv@v7
26
+
27
+ - name: Setup Node with npm registry
28
+ uses: actions/setup-node@v4
29
+ with:
30
+ node-version: "24"
31
+ registry-url: https://registry.npmjs.org
32
+
33
+ - name: Install Python dependencies
34
+ run: uv sync
35
+
36
+ - name: Build vantage-md
37
+ run: cd packages/vantage-md && npm ci && npx tsup
38
+
39
+ - name: Install frontend deps
40
+ run: cd frontend && npm ci
41
+
42
+ # --- npm publish with provenance ---
43
+ # Skip if the version in package.json is already on the registry. This
44
+ # lets `v*` tags (Python releases) ride past a stale npm version without
45
+ # failing the whole workflow; only `vantage-md@*` tags or v* tags that
46
+ # also bumped npm actually publish.
47
+ - name: Check if npm version needs publishing
48
+ id: npm_check
49
+ run: |
50
+ set -euo pipefail
51
+ pkg_version=$(node -p "require('./packages/vantage-md/package.json').version")
52
+ if npm view "vantage-md@${pkg_version}" version > /dev/null 2>&1; then
53
+ echo "skip=true" >> "$GITHUB_OUTPUT"
54
+ echo "vantage-md@${pkg_version} is already on npm; skipping publish."
55
+ else
56
+ echo "skip=false" >> "$GITHUB_OUTPUT"
57
+ echo "Publishing vantage-md@${pkg_version}."
58
+ fi
59
+
60
+ - name: Publish vantage-md to npm
61
+ if: steps.npm_check.outputs.skip == 'false'
62
+ run: cd packages/vantage-md && npm publish --provenance --access public
63
+
64
+ # --- Python build + GitHub release (only for v* tags) ---
65
+ - name: Build frontend
66
+ if: startsWith(github.ref_name, 'v')
67
+ run: cd frontend && npm run build
68
+
69
+ - name: Bundle frontend into Python package
70
+ if: startsWith(github.ref_name, 'v')
71
+ run: python3 -c "import shutil; from pathlib import Path; dst=Path('src/vantage/frontend_dist'); shutil.rmtree(dst, ignore_errors=True); shutil.copytree('frontend/dist', dst)"
72
+
73
+ - name: Build Python wheel
74
+ if: startsWith(github.ref_name, 'v')
75
+ run: uv build
76
+
77
+ - name: Create GitHub release
78
+ if: startsWith(github.ref_name, 'v')
79
+ run: |
80
+ gh release create "${{ github.ref_name }}" dist/*.whl dist/*.tar.gz \
81
+ --title "${{ github.ref_name }}" \
82
+ --generate-notes
83
+ env:
84
+ GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
@@ -0,0 +1,66 @@
1
+ # Python
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+ .venv/
6
+ env/
7
+ venv/
8
+ *.egg-info/
9
+ .coverage
10
+ htmlcov/
11
+ .pytest_cache/
12
+
13
+ # Python build artifacts
14
+ build/
15
+ dist/
16
+ *.egg-info/
17
+ pyproject.toml.bak
18
+
19
+ # Environment
20
+ .env
21
+
22
+ # OS
23
+ .DS_Store
24
+ Thumbs.db
25
+
26
+ # MyPy
27
+ .mypy_cache/
28
+ .dmypy.json
29
+ dmypy.json
30
+
31
+ # Ruff
32
+ .ruff_cache/
33
+
34
+ # Coverage reports
35
+ htmlcov/
36
+ .coverage
37
+ # Overmind
38
+ .overmind.sock
39
+ .overmind.pid
40
+ overmind.log
41
+
42
+ # Node
43
+ node_modules/
44
+ npm-debug.log*
45
+ yarn-debug.log*
46
+ yarn-error.log*
47
+ pnpm-debug.log*
48
+
49
+ # Frontend build
50
+ frontend/dist/
51
+ src/vantage/frontend_dist/
52
+
53
+ # Built docs output
54
+ dist/docs/
55
+
56
+ # IDE
57
+ .vscode/
58
+ .idea/
59
+ *.swp
60
+ *.swo
61
+ *~
62
+
63
+ /.chrome-state/
64
+
65
+ # YOLO Jail workspace state
66
+ .yolo/
@@ -0,0 +1,4 @@
1
+ [tools]
2
+ just = "latest"
3
+ node = "22"
4
+ python = "3.13"
@@ -0,0 +1,50 @@
1
+ # Pre-commit hooks for Vantage
2
+ # See https://pre-commit.com for more information
3
+ repos:
4
+ # Python: Ruff for formatting and linting
5
+ - repo: https://github.com/astral-sh/ruff-pre-commit
6
+ rev: v0.8.5
7
+ hooks:
8
+ # Run the formatter
9
+ - id: ruff-format
10
+ name: ruff format (Python)
11
+ types_or: [python, pyi]
12
+ # Run the linter
13
+ - id: ruff
14
+ name: ruff lint (Python)
15
+ types_or: [python, pyi]
16
+ args: [--fix]
17
+
18
+ # JavaScript/TypeScript: Prettier for formatting
19
+ - repo: https://github.com/pre-commit/mirrors-prettier
20
+ rev: v4.0.0-alpha.8
21
+ hooks:
22
+ - id: prettier
23
+ name: prettier (JS/TS)
24
+ types_or: [javascript, jsx, ts, tsx, json, yaml, markdown]
25
+ exclude: ^(package-lock\.json|.*\.lock|\.chrome-state/|frontend/node_modules/)
26
+ additional_dependencies:
27
+ - prettier@3.4.2
28
+
29
+ # JavaScript/TypeScript: ESLint for linting (must run from frontend/)
30
+ - repo: local
31
+ hooks:
32
+ - id: eslint-frontend
33
+ name: eslint (JS/TS in frontend/)
34
+ entry: bash -c 'cd frontend && npx eslint --fix $(echo "$@" | sed "s|frontend/||g")' --
35
+ language: system
36
+ files: ^frontend/.*\.(js|ts|jsx|tsx)$
37
+ types: [file]
38
+
39
+ # General: trailing whitespace, end of file, YAML validation
40
+ - repo: https://github.com/pre-commit/pre-commit-hooks
41
+ rev: v6.0.0
42
+ hooks:
43
+ - id: trailing-whitespace
44
+ exclude: ^(\.chrome-state/|frontend/node_modules/)
45
+ - id: end-of-file-fixer
46
+ exclude: ^(\.chrome-state/|frontend/node_modules/)
47
+ - id: check-yaml
48
+ - id: check-added-large-files
49
+ args: [--maxkb=1000]
50
+ - id: check-merge-conflict
@@ -0,0 +1,8 @@
1
+ {
2
+ "semi": true,
3
+ "trailingComma": "all",
4
+ "singleQuote": false,
5
+ "printWidth": 80,
6
+ "tabWidth": 2,
7
+ "endOfLine": "lf"
8
+ }
@@ -0,0 +1 @@
1
+ 3.13
@@ -0,0 +1,73 @@
1
+ # Changelog
2
+
3
+ All notable changes to Vantage will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [0.3.1] - 2026-04-06
9
+
10
+ ### Fixed
11
+
12
+ - `just deploy` now works after `git pull` without needing `just setup` — the build bootstraps its own environment.
13
+ - `just setup` no longer modifies lockfiles (`uv sync --frozen`, `npm ci`).
14
+ - `just build` safely patches `pyproject.toml` for dev versioning via backup+restore instead of fragile `git checkout` trap.
15
+
16
+ ## [0.3.0] - 2026-04-06
17
+
18
+ ### Added
19
+
20
+ - **Review mode** — Toggle review mode on any markdown file to select text and leave inline comments. Comments are highlighted in the document and stored server-side for persistence across sessions.
21
+ - **Outdated comment detection** — When the document changes and a comment's selected text no longer matches, it appears as an amber "Outdated" block near the changed section with a Dismiss button — similar to GitHub's outdated review comments.
22
+ - **Auto-snapshots & revision history** — While in review mode, each file change automatically snapshots the previous version. Navigate revisions with `← Rev N of M →` controls.
23
+ - **Block-level change highlights** — Changed paragraphs between revisions are marked with a purple left border for quick scanning.
24
+ - **Copy all comments** — One-click export of all active review comments as markdown quotes, ready to paste back to an AI agent.
25
+ - **TOML frontmatter support** — Zola-style `+++` TOML frontmatter is now parsed and displayed, with taxonomies and extra fields flattened into tag pills.
26
+ - **Collapsible sidebar** — Click the collapse button to hide the file tree and maximize content area. State persists across sessions.
27
+ - **Show hidden / gitignored files** — New filter toggles in the sidebar to reveal hidden files and gitignored files.
28
+ - **Mermaid error handling** — Broken mermaid diagrams now show a friendly error message instead of crashing.
29
+ - **`disable_whats_new` config** — Suppress the What's New popup entirely via server config.
30
+
31
+ ### Changed
32
+
33
+ - **Startup performance** — Significantly faster initial load with background tree fetching, repo caching, and loading gate.
34
+ - **Auto-discover repos** — `source_dirs` now recursively discovers git repos without explicit enumeration.
35
+
36
+ ### Fixed
37
+
38
+ - Suppress What's New popup in static export mode.
39
+ - Show directory index and README on root path in static mode.
40
+ - Replace bundled GitHub SVG icon with inline SVG to avoid asset issues.
41
+
42
+ ## [0.2.0] - 2026-03-25
43
+
44
+ ### Added
45
+
46
+ - **Global file search** — Press `T` (Shift+T) from anywhere to search files across all projects. Press `t` on the project picker page to do the same.
47
+ - **Project picker shortcut** — Press `P` from anywhere to fuzzy-search project names and quickly switch between repos.
48
+ - **Recent file search** — Press `r` to search recently modified files in the current project, or `R` to search recents across all projects.
49
+ - **Copy file path** — Press `y` or click the "Path" button to copy the current file's absolute filesystem path to the clipboard.
50
+ - **Changelog & What's New** — A built-in changelog with a "What's New" popup that appears when new features are available. Opt out anytime via settings.
51
+ - **Source directories** — Configure `source_dirs` in your config to auto-discover git repos from specified directories.
52
+ - **Repo sorting** — Toggle between alphabetical and recent-activity sorting on the project picker page.
53
+
54
+ ### Changed
55
+
56
+ - **Project picker redesign** — Full-page layout without sidebar, cleaner table with repo names and relative timestamps.
57
+ - **Repo age display** — Project picker now shows the age of the newest file in each repo rather than the last git commit.
58
+
59
+ ## [0.1.0] - 2026-03-20
60
+
61
+ ### Added
62
+
63
+ - Markdown rendering with GitHub-flavored markdown, syntax highlighting, and KaTeX math support.
64
+ - Mermaid diagram rendering with click-to-zoom.
65
+ - Live reload via WebSocket — files update automatically when saved.
66
+ - Git integration — view commit history, diffs, and file status.
67
+ - Jujutsu (jj) support — view revisions, evolution log, and diffs.
68
+ - Fuzzy file picker with `t` keyboard shortcut.
69
+ - Dark mode with `Shift+D` toggle.
70
+ - Vim-style keyboard navigation (`j`/`k` scroll, `g g`/`G` jump, `g h` home).
71
+ - Multi-repo daemon mode with TOML configuration.
72
+ - Static site export for hosting on Cloudflare Pages, GitHub Pages, etc.
73
+ - Print-optimized stylesheet.